Skip to content

Create a presigned upload for a large attachment

POST
/v1/uploads
curl --request POST \
--url https://api.frontmail.dev/v1/uploads \
--header 'Content-Type: application/json' \
--header 'X-Frontmail-Public-Key: <X-Frontmail-Public-Key>' \
--data '{ "filename": "example", "content_type": "example", "size": 1, "user_id": "example" }'

Returns a presigned S3 PUT URL valid for 15 minutes. Upload the file with the returned headers, then reference { "upload_id" } in attachments. Uploads expire after 24 h. With a public key, the organization needs at least one template that accepts dynamic attachments, and public uploads have a daily byte budget per organization (plan attachment limit × 200); over it → 429 rate_limited.

Media typeapplication/json
object
filename
required
string
>= 1 characters <= 255 characters
content_type
string
<= 255 characters
size
required

Exact size in bytes (signed into the URL).

integer
> 0
user_id

Public key (alternative to the header).

string
Examplegenerated
{
"filename": "example",
"content_type": "example",
"size": 1,
"user_id": "example"
}

Presigned upload.

Media typeapplication/json
object
upload_id
required
string
url
required
string format: uri
method
required
string
Allowed values: PUT
headers
required
object
key
additional properties
string
expires_at
required
string
Example
{
"method": "PUT"
}

Invalid request body, query or Idempotency-Key (invalid_body, bad_request, invalid_idempotency_key).

Media typeapplication/json
object
error
required
object
code
required
string
Allowed values: bad_request invalid_body invalid_idempotency_key unauthorized invalid_public_key invalid_private_key insufficient_credits forbidden origin_not_allowed captcha_required captcha_failed captcha_not_configured headless_blocked recipient_blocked private_key_required private_key_in_browser email_not_verified organization_suspended plan_limit_reached dynamic_recipient_not_allowed dynamic_recipient_requires_captcha dynamic_field_not_allowed link_not_allowed attachments_not_allowed not_found service_not_found template_not_found message_not_found conflict idempotency_conflict payload_too_large attachment_too_large invalid_template_params template_render_failed invalid_recipient service_unavailable_for_template sender_not_configured rate_limited test_send_limit recipient_suppressed internal_error provider_error service_unavailable
message
required
string
docs_url
required
string format: uri
details
Example
{
"error": {
"code": "invalid_template_params",
"message": "Invalid template parameters. email: Enter a valid e-mail address.",
"docs_url": "https://docs.frontmail.dev/reference/errors/#invalid-template-params",
"details": {
"issues": [
{
"param": "email",
"code": "invalid_email",
"message": "Enter a valid e-mail address."
}
]
}
}
}

Missing or invalid key (unauthorized, invalid_public_key, invalid_private_key).

Media typeapplication/json
object
error
required
object
code
required
string
Allowed values: bad_request invalid_body invalid_idempotency_key unauthorized invalid_public_key invalid_private_key insufficient_credits forbidden origin_not_allowed captcha_required captcha_failed captcha_not_configured headless_blocked recipient_blocked private_key_required private_key_in_browser email_not_verified organization_suspended plan_limit_reached dynamic_recipient_not_allowed dynamic_recipient_requires_captcha dynamic_field_not_allowed link_not_allowed attachments_not_allowed not_found service_not_found template_not_found message_not_found conflict idempotency_conflict payload_too_large attachment_too_large invalid_template_params template_render_failed invalid_recipient service_unavailable_for_template sender_not_configured rate_limited test_send_limit recipient_suppressed internal_error provider_error service_unavailable
message
required
string
docs_url
required
string format: uri
details
Example
{
"error": {
"code": "invalid_template_params",
"message": "Invalid template parameters. email: Enter a valid e-mail address.",
"docs_url": "https://docs.frontmail.dev/reference/errors/#invalid-template-params",
"details": {
"issues": [
{
"param": "email",
"code": "invalid_email",
"message": "Enter a valid e-mail address."
}
]
}
}
}

Forbidden: origin, CAPTCHA (required, failed, not configured), headless, block list, private key required, suspended, unverified owner e-mail, plan limit, dynamic recipient, attachments.

Media typeapplication/json
object
error
required
object
code
required
string
Allowed values: bad_request invalid_body invalid_idempotency_key unauthorized invalid_public_key invalid_private_key insufficient_credits forbidden origin_not_allowed captcha_required captcha_failed captcha_not_configured headless_blocked recipient_blocked private_key_required private_key_in_browser email_not_verified organization_suspended plan_limit_reached dynamic_recipient_not_allowed dynamic_recipient_requires_captcha dynamic_field_not_allowed link_not_allowed attachments_not_allowed not_found service_not_found template_not_found message_not_found conflict idempotency_conflict payload_too_large attachment_too_large invalid_template_params template_render_failed invalid_recipient service_unavailable_for_template sender_not_configured rate_limited test_send_limit recipient_suppressed internal_error provider_error service_unavailable
message
required
string
docs_url
required
string format: uri
details
Example
{
"error": {
"code": "invalid_template_params",
"message": "Invalid template parameters. email: Enter a valid e-mail address.",
"docs_url": "https://docs.frontmail.dev/reference/errors/#invalid-template-params",
"details": {
"issues": [
{
"param": "email",
"code": "invalid_email",
"message": "Enter a valid e-mail address."
}
]
}
}
}

Request or attachments too large (payload_too_large, attachment_too_large).

Media typeapplication/json
object
error
required
object
code
required
string
Allowed values: bad_request invalid_body invalid_idempotency_key unauthorized invalid_public_key invalid_private_key insufficient_credits forbidden origin_not_allowed captcha_required captcha_failed captcha_not_configured headless_blocked recipient_blocked private_key_required private_key_in_browser email_not_verified organization_suspended plan_limit_reached dynamic_recipient_not_allowed dynamic_recipient_requires_captcha dynamic_field_not_allowed link_not_allowed attachments_not_allowed not_found service_not_found template_not_found message_not_found conflict idempotency_conflict payload_too_large attachment_too_large invalid_template_params template_render_failed invalid_recipient service_unavailable_for_template sender_not_configured rate_limited test_send_limit recipient_suppressed internal_error provider_error service_unavailable
message
required
string
docs_url
required
string format: uri
details
Example
{
"error": {
"code": "invalid_template_params",
"message": "Invalid template parameters. email: Enter a valid e-mail address.",
"docs_url": "https://docs.frontmail.dev/reference/errors/#invalid-template-params",
"details": {
"issues": [
{
"param": "email",
"code": "invalid_email",
"message": "Enter a valid e-mail address."
}
]
}
}
}

Rate limited – see Retry-After (seconds).

Media typeapplication/json
object
error
required
object
code
required
string
Allowed values: bad_request invalid_body invalid_idempotency_key unauthorized invalid_public_key invalid_private_key insufficient_credits forbidden origin_not_allowed captcha_required captcha_failed captcha_not_configured headless_blocked recipient_blocked private_key_required private_key_in_browser email_not_verified organization_suspended plan_limit_reached dynamic_recipient_not_allowed dynamic_recipient_requires_captcha dynamic_field_not_allowed link_not_allowed attachments_not_allowed not_found service_not_found template_not_found message_not_found conflict idempotency_conflict payload_too_large attachment_too_large invalid_template_params template_render_failed invalid_recipient service_unavailable_for_template sender_not_configured rate_limited test_send_limit recipient_suppressed internal_error provider_error service_unavailable
message
required
string
docs_url
required
string format: uri
details
Example
{
"error": {
"code": "invalid_template_params",
"message": "Invalid template parameters. email: Enter a valid e-mail address.",
"docs_url": "https://docs.frontmail.dev/reference/errors/#invalid-template-params",
"details": {
"issues": [
{
"param": "email",
"code": "invalid_email",
"message": "Enter a valid e-mail address."
}
]
}
}
}
Retry-After
required

Seconds to wait before retrying.

string

Seconds to wait before retrying.

Unexpected error; details.request_id identifies the request.

Media typeapplication/json
object
error
required
object
code
required
string
Allowed values: bad_request invalid_body invalid_idempotency_key unauthorized invalid_public_key invalid_private_key insufficient_credits forbidden origin_not_allowed captcha_required captcha_failed captcha_not_configured headless_blocked recipient_blocked private_key_required private_key_in_browser email_not_verified organization_suspended plan_limit_reached dynamic_recipient_not_allowed dynamic_recipient_requires_captcha dynamic_field_not_allowed link_not_allowed attachments_not_allowed not_found service_not_found template_not_found message_not_found conflict idempotency_conflict payload_too_large attachment_too_large invalid_template_params template_render_failed invalid_recipient service_unavailable_for_template sender_not_configured rate_limited test_send_limit recipient_suppressed internal_error provider_error service_unavailable
message
required
string
docs_url
required
string format: uri
details
Example
{
"error": {
"code": "invalid_template_params",
"message": "Invalid template parameters. email: Enter a valid e-mail address.",
"docs_url": "https://docs.frontmail.dev/reference/errors/#invalid-template-params",
"details": {
"issues": [
{
"param": "email",
"code": "invalid_email",
"message": "Enter a valid e-mail address."
}
]
}
}
}