Send a form (EmailJS-compatible alias)
const url = 'https://api.frontmail.dev/api/v1.0/email/send-form';const form = new FormData();form.append('service_id', 'example');form.append('template_id', 'example');form.append('user_id', 'example');form.append('accessToken', 'example');form.append('cf-turnstile-response', 'example');form.append('turnstile_token', 'example');form.append('turnstile_key', 'org');
const options = { method: 'POST', headers: { 'Idempotency-Key': '7f0b6c1e-3a57-4a0e-9d0c-5d3f2d1b2a10', 'X-Frontmail-Public-Key': '<X-Frontmail-Public-Key>' }};
options.body = form;
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.frontmail.dev/api/v1.0/email/send-form \ --header 'Content-Type: multipart/form-data' \ --header 'Idempotency-Key: 7f0b6c1e-3a57-4a0e-9d0c-5d3f2d1b2a10' \ --header 'X-Frontmail-Public-Key: <X-Frontmail-Public-Key>' \ --form service_id=example \ --form template_id=example \ --form user_id=example \ --form accessToken=example \ --form cf-turnstile-response=example \ --form turnstile_token=example \ --form turnstile_key=orgMultipart/form-data: text fields become template params, file fields become attachments (plan attachment limit).
Authorizations
Section titled “Authorizations”Parameters
Section titled “ Parameters ”Header Parameters
Section titled “Header Parameters”Unique key per logical send (≤ 255 chars of [A-Za-z0-9_-:.]). Retries with the same key and body return the original response.
Example
7f0b6c1e-3a57-4a0e-9d0c-5d3f2d1b2a10Unique key per logical send (≤ 255 chars of [A-Za-z0-9_-:.]). Retries with the same key and body return the original response.
Request Bodyrequired
Section titled “Request Bodyrequired”Reserved fields as listed; every other text field becomes a template param, every file field an attachment.
Responses
Section titled “ Responses ”Accepted. Frontmail clients (X-Frontmail-Client header or Accept: application/json) get the JSON body; EmailJS-style clients get 200 text/plain "OK". Message id and status are always in X-Frontmail-Message-Id / X-Frontmail-Status.
object
held = accepted but waiting for credits; it is sent automatically once credits are added.
Pass as ?token= to GET /v1/messages/{id} with a public key.
Example
{ "message_id": "msg_01j9z3m2c7v8b9n0m1q2w3e4r5", "status": "queued"}Example
OKInvalid request body, query or Idempotency-Key (invalid_body, bad_request, invalid_idempotency_key).
object
object
Stable error code. See https://docs.frontmail.dev/reference/errors/.
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).
object
object
Stable error code. See https://docs.frontmail.dev/reference/errors/.
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." } ] } }}No credits left and the organization uses reject mode (insufficient_credits).
object
object
Stable error code. See https://docs.frontmail.dev/reference/errors/.
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.
object
object
Stable error code. See https://docs.frontmail.dev/reference/errors/.
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." } ] } }}Template, service or message not found.
object
object
Stable error code. See https://docs.frontmail.dev/reference/errors/.
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." } ] } }}Idempotency-Key reused with a different body, or still in progress (idempotency_conflict).
object
object
Stable error code. See https://docs.frontmail.dev/reference/errors/.
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).
object
object
Stable error code. See https://docs.frontmail.dev/reference/errors/.
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." } ] } }}Invalid template params, recipient or rendering error.
object
object
Stable error code. See https://docs.frontmail.dev/reference/errors/.
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).
object
object
Stable error code. See https://docs.frontmail.dev/reference/errors/.
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." } ] } }}Headers
Section titled “Headers”Seconds to wait before retrying.
Seconds to wait before retrying.
A recipient is on the suppression list (recipient_suppressed).
object
object
Stable error code. See https://docs.frontmail.dev/reference/errors/.
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." } ] } }}Unexpected error; details.request_id identifies the request.
object
object
Stable error code. See https://docs.frontmail.dev/reference/errors/.
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." } ] } }}