Sharry (1.14.0)

Download OpenAPI specification:Download

License: GPLv3

Sharry provides a way to share files with others in a convenient way. The core functionality is provided by a server that can be controlled via REST calls.

The calls are divided into 4 categories:

  • /open/*: no authentication is required to access
  • /sec/*: an authenticated user is required
  • /alias/*: these routes are allowed with a valid alias id given as header Sharry-Alias
  • /admin/*: an authenticated user that is admin is required

Authentication works by logging in with username/password (or an oauth2 flow) that generates a token that has to be sent with every request to a secured and admin route. It is possible to sent it via a Cookie header or the special Sharry-Auth header.

Files can be uploaded using different methods. There is an endpoint that can take all files and meta data from one single request. For more reliable uploads, the server implements the tus protocol that allows to resume failed or paused uploads.

Information

Get information about this API.

Version information.

Returns version information about server application.

Responses

Response samples

Content type
application/json
{
  • "version": "string",
  • "builtAtMillis": 0,
  • "builtAtString": "string",
  • "gitCommit": "string",
  • "gitVersion": "string"
}

Basic configuration.

Return basic information for setting up a web client.

Responses

Response samples

Content type
application/json
{
  • "appName": "string",
  • "baseUrl": "string",
  • "logoUrl": "string",
  • "logoUrlDark": "string",
  • "iconUrl": "string",
  • "iconUrlDark": "string",
  • "footerText": "string",
  • "footerVisible": true,
  • "signupMode": "string",
  • "oauthConfig": [
    ],
  • "chunkSize": 0,
  • "retryDelays": [
    ],
  • "maxValidity": 0,
  • "maxSize": 0,
  • "mailEnabled": true,
  • "welcomeMessage": "string",
  • "defaultLanguage": "string",
  • "authRefreshTime": 0,
  • "initialPage": "home",
  • "oauthOnly": true,
  • "aliasMemberEnabled": true,
  • "defaultValidity": 0,
  • "initialTheme": "string",
  • "oauthAutoRedirect": true,
  • "proxyAuthEnabled": true,
  • "proxyOnly": true,
  • "hideLoginForm": true
}

Authentication

Various methods to authenticate.

Authenticate with account name and password.

Authenticate with account name and password.

If successful, an authentication token is returned that can be used for subsequent calls to protected routes.

Request Body schema: application/json
account
required
string
password
required
string

Responses

Request samples

Content type
application/json
{
  • "account": "string",
  • "password": "string"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "user": "string",
  • "admin": true,
  • "success": true,
  • "message": "string",
  • "token": "string",
  • "validMs": 0
}

Authenticate via OAuth2

The id must be a configured OAuth provider. This requests will redirect the client to the configured provider. After authentication there, the provider will redirect back to sharry.

This only works, if sharry uses TLS (https), and the correct callback-url is configured at the provider.

path Parameters
id
required
string

A share identifier

Responses

Callback url from OAuth2 providers.

This endpoint is for OAuth2 providers when delegating control back to sharry. At this stage, sharry will do basic validation and then finishes logging into the application.

path Parameters
id
required
string

A share identifier

Request Body schema: multipart/form-data
code
string

Responses

Authenticate via request headers

When using an authenticating proxy in front, this login route can be used to rely on trusted request headers to perform login.

Responses

Authentication with a token

Authenticate with a token. This can be used to get a new authentication token based on another valid one.

Authorizations:
authTokenHeader

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "user": "string",
  • "admin": true,
  • "success": true,
  • "message": "string",
  • "token": "string",
  • "validMs": 0
}

Logout.

This route informs the server about a logout. This is not strictly necessary.

Authorizations:
authTokenHeader

Responses

Registration

Register a new account.

Register a new account.

Create a new account.

Request Body schema: application/json
login
required
string <ident>
password
required
string <password>
invite
string <ident>

Responses

Request samples

Content type
application/json
{
  • "login": "string",
  • "password": "pa$$word",
  • "invite": "string"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string"
}

Generate a new invite.

When signup mode is set to "invite", sharry requires an invitation key when signing up. These keys can be created here. Creating such keys requires an admin user. It also asks for a password that must be set in the configuration file.

Authorizations:
authTokenHeader
Request Body schema: application/json
password
required
string <password>

Responses

Request samples

Content type
application/json
{
  • "password": "pa$$word"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "key": "string"
}

Account Management

Admins can create/update/delete accounts.

List all accounts.

Lists all available (internal and external) accounts. An optional query parameter can be used to narrow the list down by username. It is a simple substring search in the username property.

Authorizations:
authTokenHeader
query Parameters
q
string

A query string

Responses

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Create a new account.

Creates a new account. The account is marked as internal and the provided password is used when authenticating. Sharry supports external authentication, these accounts however, cannot be directly created. They are created on demand.

The username and password properties are mandatory. The others are optional or have a sensible default.

Authorizations:
authTokenHeader
Request Body schema: application/json
login
required
string <ident>
state
required
string <accountstate>
admin
required
boolean
password
required
string <password>
email
string

Responses

Request samples

Content type
application/json
{
  • "login": "string",
  • "state": "string",
  • "admin": true,
  • "password": "pa$$word",
  • "email": "string"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string"
}

Details about one account.

Returns details about the account with the given id. Note that the id is not the username, but the account-id.

Authorizations:
authTokenHeader
path Parameters
accountId
required
string

A account identifier

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "login": "string",
  • "source": "string",
  • "state": "string",
  • "admin": true,
  • "email": "string",
  • "loginCount": 0,
  • "shares": 0,
  • "lastLogin": 0,
  • "created": 0
}

Modify an account.

Modifies an existing account. It is only possible to modify state, email and the admin property.

If the email property is not supplied, an existing email is removed from the account.

The password can be changed for an account. If it is null or empty, it is left unchanged. Also, if the account is not internal, a given password is ignored.

Authorizations:
authTokenHeader
path Parameters
accountId
required
string

A account identifier

Request Body schema: application/json
state
required
string <accountstate>
admin
required
boolean
email
string
password
string <password>

Responses

Request samples

Content type
application/json
{
  • "state": "string",
  • "admin": true,
  • "email": "string",
  • "password": "pa$$word"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string"
}

Deletes an account.

Deletes the account and all its related data.

Authorizations:
authTokenHeader
path Parameters
accountId
required
string

A account identifier

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string"
}

Get your E-Mail address.

Allows the current user to get their e-mail address.

Authorizations:
authTokenHeader

Responses

Response samples

Content type
application/json
{
  • "email": "string"
}

Edit your E-Mail.

Allows the current user to change their e-mail address.

Authorizations:
authTokenHeader
Request Body schema: application/json
email
required
string

Responses

Request samples

Content type
application/json
{
  • "email": "string"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string"
}

Removed your E-Mail.

Allows the current user to remove their e-mail address.

Authorizations:
authTokenHeader

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string"
}

Check for password change.

Returns wether the current account is available for a password change. If this returns false, the POST request to this url will always fail.

Authorizations:
authTokenHeader

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string"
}

Change your password.

Allows users to change their password. This is only valid for internal accounts.

Authorizations:
authTokenHeader
Request Body schema: application/json
oldPassword
required
string <password>
newPassword
required
string <password>

Responses

Request samples

Content type
application/json
{
  • "oldPassword": "pa$$word",
  • "newPassword": "pa$$word"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string"
}

Alias

Edit your alias pages.

List all aliases.

Lists all aliases of the current user.

Authorizations:
authTokenHeader
query Parameters
q
string

A query string

Responses

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Create new alias

Create a new alias. The id is generated to some random string if not specified, such that the URLs resulting from this alias are not guessable.

Authorizations:
authTokenHeader
Request Body schema: application/json
id
string <ident>
name
required
string
validity
required
integer <duration>
enabled
required
boolean
members
required
Array of strings <ident> [ items <ident > ]

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "validity": 0,
  • "enabled": true,
  • "members": [
    ]
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "id": "string"
}

Details about one alias.

Returns details about an alias for the given id.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "validity": 0,
  • "owner": "string",
  • "enabled": true,
  • "members": {
    },
  • "created": 0
}

Change an alias

Change some properties of an existing alias.

The id is optional; if it is not specified a new random one will be generated.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

Request Body schema: application/json
id
string <ident>
name
required
string
validity
required
integer <duration>
enabled
required
boolean
members
required
Array of strings <ident> [ items <ident > ]

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "validity": 0,
  • "enabled": true,
  • "members": [
    ]
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "id": "string"
}

Delete an alias.

Deletes an alias.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string"
}

Get a list of accounts

Gets a list of accounts suitable for adding them as members to an alias.

Authorizations:
authTokenHeader
query Parameters
q
string

A query string

Responses

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Shares

Edit shares.

Search your shares.

Returns a list of all shares of the current user.

Authorizations:
authTokenHeader
query Parameters
q
string

A query string

Responses

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Get details about a share.

Returns all details about a share.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "aliasId": "string",
  • "aliasName": "string",
  • "validity": 0,
  • "maxViews": 0,
  • "password": true,
  • "descriptionRaw": "string",
  • "description": "string",
  • "created": 0,
  • "publishInfo": {
    },
  • "files": [
    ]
}

Delete a share.

Allows to delete a share and all associated files.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string"
}

Set a new name.

Sets the name of the share.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

Request Body schema: application/json
value
required
string

Responses

Request samples

Content type
application/json
{
  • "value": "string"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string"
}

Deletes the name of a share.

A name is optional and can be removed via this route.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string"
}

Set a new validity time.

Sets the validity property of the share to a new value.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

Request Body schema: application/json
value
required
integer <int64>

Responses

Request samples

Content type
application/json
{
  • "value": 0
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string"
}

Set a new description.

Sets the description of share.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

Request Body schema: application/json
value
required
string

Responses

Request samples

Content type
application/json
{
  • "value": "string"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string"
}

Set new maximum downloads.

Sets the maximum downloads property.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

Request Body schema: application/json
value
required
integer <int64>

Responses

Request samples

Content type
application/json
{
  • "value": 0
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string"
}

Sets a password to this share.

Sets or changes the password of the share. If the share already has a password defined, it must be given with the request. Otherwise it may be empty.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

Request Body schema: application/json
value
required
string

Responses

Request samples

Content type
application/json
{
  • "value": "string"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string"
}

Removes the password from the share.

Removes the password that has been set for this share. If this share has no password set, a successful response is sent.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string"
}

Publishes a share.

A share can be published. That means it is accessible by everyone (no access protection!) using a different url and id. This link can then be shared. Once the validity time is expired, the public link won't work anymore.

If the share is already published, this is a no-op (resulting in a successful response).

If the share was previously published the request can control, wether the old id should be reused (resulting in the same links as before), or a new random one should be generated.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

Request Body schema: application/json
reuseId
required
boolean

Responses

Request samples

Content type
application/json
{
  • "reuseId": true
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string"
}

Unpublish a share.

If a share is currently published it can be un-published using this endpoint.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string"
}

Retrieve a file from the share.

Returns a file from a share.

The response supports byte-serving and ETag.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

fid
required
string

A file identifier

Responses

Remove a file from a share.

Deletes a file from a share.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

fid
required
string

A file identifier

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string"
}

Shares Upload

Create or Add Files

Upload files to create a share.

Allows to create a new share by uploading data using multipart/form-data requests. All requests must have content type multipart/form-data.

All parts of a multipart/form-data request are treated as files except if one with name "meta" is found. This is expected to contain a JSON structure with the metadata (validity, password etc). If this is missing, default values will be used. All other parts are added as files to the new share. It is allowed to send only a "meta" part or even an empty body. In these cases the new share will be created without files..

If this route is at /alias/ a Sharry-Alias header is required.

Authorizations:
authTokenHeader
Request Body schema: multipart/form-data
object (ShareProperties)

Describes a share.

file
Array of strings <binary> [ items <binary > ]

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "id": "string"
}

Upload files to create a share.

Allows to create a new share by uploading data using multipart/form-data requests. All requests must have content type multipart/form-data.

All parts of a multipart/form-data request are treated as files except if one with name "meta" is found. This is expected to contain a JSON structure with the metadata (validity, password etc). If this is missing, default values will be used. All other parts are added as files to the new share. It is allowed to send only a "meta" part or even an empty body. In these cases the new share will be created without files..

If this route is at /alias/ a Sharry-Alias header is required.

Authorizations:
authTokenHeader
Request Body schema: multipart/form-data
object (ShareProperties)

Describes a share.

file
Array of strings <binary> [ items <binary > ]

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "id": "string"
}

Create a new empty share.

This endpoint allows to only upload json data to create a new empty share.

The same thing can be achieved by using multipart/form-data requests to the /sec/upload endpoint containing only one part named "meta". But this endpoint may be more convenient to use.

If this route is at /alias/ a Sharry-Alias header is required.

Authorizations:
authTokenHeader
Request Body schema: application/json
name
string
validity
required
integer <duration>
description
string
maxViews
required
integer <int32>
password
string <password>

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "validity": 0,
  • "description": "string",
  • "maxViews": 0,
  • "password": "pa$$word"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "id": "string"
}

Create a new empty share.

This endpoint allows to only upload json data to create a new empty share.

The same thing can be achieved by using multipart/form-data requests to the /sec/upload endpoint containing only one part named "meta". But this endpoint may be more convenient to use.

If this route is at /alias/ a Sharry-Alias header is required.

Authorizations:
authTokenHeader
Request Body schema: application/json
name
string
validity
required
integer <duration>
description
string
maxViews
required
integer <int32>
password
string <password>

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "validity": 0,
  • "description": "string",
  • "maxViews": 0,
  • "password": "pa$$word"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string",
  • "id": "string"
}

Add more files to a share.

This endpoint can be used to add more files to an existing share. It must be a multipart/form-data request, where each part results in a new file added to the share.

If this route is at /alias/ a Sharry-Alias header is required.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

Request Body schema: multipart/form-data
file
Array of strings <binary> [ items <binary > ]

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string"
}

Add more files to a share.

This endpoint can be used to add more files to an existing share. It must be a multipart/form-data request, where each part results in a new file added to the share.

If this route is at /alias/ a Sharry-Alias header is required.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

Request Body schema: multipart/form-data
file
Array of strings <binary> [ items <binary > ]

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string"
}

[Tus] Protocol information.

Implements the TUS protocol OPTIONS request to return common information about what parts of the tus protocol are supported by this server.

Please see the protocol specification for more details.

If this is the /alias route, a Sharry-Alias header is required.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

Responses

[Tus] Create new (empty) files using tus protocol

Create a new (empty) file via tus' creation extension.

This follows the tus protocol, but uses different headers for transporting the filename and filetype. While the tus protocol defines a Upload-Metadata header, what it can contain is not specified. It requires custom negotiation between server and client, so we can as well use different headers that are easier to read and write:

  • Sharry-File-Name specifies the filename (percent-encoded)
  • Sharry-File-Type specifies the content type
  • Sharry-File-Length can be used to specifiy the total length in bytes. If not found Upload-Length is used.

The total length must be specified, name and content type are optional.

Please see the protocol specification for more details.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

header Parameters
Sharry-File-Name
string
Sharry-File-Type
string
Sharry-File-Length
integer <int64>
Upload-Length
required
integer <int64>

Responses

[Tus] Protocol information.

Implements the TUS protocol OPTIONS request to return common information about what parts of the tus protocol are supported by this server.

Please see the protocol specification for more details.

If this is the /alias route, a Sharry-Alias header is required.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

Responses

[Tus] Create new (empty) files using tus protocol

Create a new (empty) file via tus' creation extension.

This follows the tus protocol, but uses different headers for transporting the filename and filetype. While the tus protocol defines a Upload-Metadata header, what it can contain is not specified. It requires custom negotiation between server and client, so we can as well use different headers that are easier to read and write:

  • Sharry-File-Name specifies the filename (percent-encoded)
  • Sharry-File-Type specifies the content type
  • Sharry-File-Length can be used to specifiy the total length in bytes. If not found Upload-Length is used.

The total length must be specified, name and content type are optional.

Please see the protocol specification for more details.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

header Parameters
Sharry-File-Name
string
Sharry-File-Type
string
Sharry-File-Length
integer <int64>
Upload-Length
required
integer <int64>

Responses

[Tus] Upload binary data

Endpoint for receiving the binary data belonging to a file. The file must have been created before using a POST request to the parent path url.

The Upload-Offset header must be specified, it may be set to 0.

You may also use the POST method instead.

Please see the protocol specification for more details.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

fid
required
string

A file identifier

header Parameters
Upload-Offset
required
integer <int64>
Request Body schema: application/offset+octet-stream
string <binary>

Responses

[Tus] Information about a file.

Returns the upload status of the file. Returns the total expected length and the number of bytes that have really been saved. This is used by clients to determine the next Upload-Offset to use.

Please see the protocol specification for more details.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

fid
required
string

A file identifier

Responses

[Tus] Upload binary data

Endpoint for receiving the binary data belonging to a file. The file must have been created before using a POST request to the parent path url.

The Upload-Offset header must be specified, it may be set to 0.

You may also use the POST method instead.

Please see the protocol specification for more details.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

fid
required
string

A file identifier

header Parameters
Upload-Offset
required
integer <int64>
Request Body schema: application/offset+octet-stream
string <binary>

Responses

[Tus] Information about a file.

Returns the upload status of the file. Returns the total expected length and the number of bytes that have really been saved. This is used by clients to determine the next Upload-Offset to use.

Please see the protocol specification for more details.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

fid
required
string

A file identifier

Responses

Shares (Public)

Get details about a share.

Returns all details about a share.

If the share is password protected, the password must be supplied using the header Sharry-Password. If it is not supplied, a 401 response is sent. If it is wrong, a 403 response will be returned.

path Parameters
pid
required
string

A public share identifier

header Parameters
Sharry-Password
string

The password to access a protected share. Must be percent-encoded.

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "aliasId": "string",
  • "aliasName": "string",
  • "validity": 0,
  • "maxViews": 0,
  • "password": true,
  • "descriptionRaw": "string",
  • "description": "string",
  • "created": 0,
  • "publishInfo": {
    },
  • "files": [
    ]
}

Retrieve a file from the share.

Returns a file from a share.

The response supports byte-serving and ETag.

path Parameters
pid
required
string

A public share identifier

fid
required
string

A file identifier

Responses

Mail

Notify the owner.

After uploading some files via an alias page, the client can request to notify the owner via e-mail that an upload just finished.

The corresponding user must have an e-mail address in their account and the mail feautre must be enabled in the config file.

Authorizations:
aliasTokenHeader
path Parameters
id
required
string

A share identifier

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string"
}

Get the mail template for a published share.

To send a link to a published share via e-mail, templates can be specified in the configuration file. The server can then insert the required data (like the cryptic url), so the user is freed from copy-pasting things.

Authorizations:
authTokenHeader
path Parameters
id
required
string

A share identifier

Responses

Response samples

Content type
application/json
{
  • "subject": "string",
  • "body": "string"
}

Get the mail template for a published share.

To send a link to an alias page via e-mail, templates can be specified in the configuration file. The server can then insert the required data (like the cryptic url), so the user is freed from copy-pasting things.

Authorizations:
authTokenHeader
path Parameters
aid
required
string

The alias identifier.

Responses

Response samples

Content type
application/json
{
  • "subject": "string",
  • "body": "string"
}

Send an e-mail.

This will send the given e-mail as is to the specified recipients. This will only work, if the server enabled the mail feature.

Authorizations:
authTokenHeader
Request Body schema: application/json
recipients
required
Array of strings
subject
required
string
body
required
string

Responses

Request samples

Content type
application/json
{
  • "recipients": [
    ],
  • "subject": "string",
  • "body": "string"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "string"
}