Send Email

Full reference for the Send Email resource in the bluefox.email API. See the API overview for authentication, the response envelope, and pagination.

Send a transactional email

POST /v1/projectId/{projectId}/send-transactional

The project is resolved from transactionalId, not just the URL - the URL's projectId must match the transactional email's own project, or this 404s.

Sending fails with a 405 if the account is out of email credit ("Insufficient credits available") - there is no public endpoint to check remaining balance ahead of time, only in the app. It also fails with a 405 if a sandbox project's daily send cap is exceeded, or if bounce/complaint rates have triggered automatic restriction (see Project.status and GET .../sandbox/deliverability).

Parameters

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.

Request body

FieldTypeRequiredDescription
emailstringyes
transactionalIdstringyesA transactional email _id, from GET /v1/projectId/{projectId}/transactional-emails - NOT a template ID.
dataanyTemplate variables to render into the email.
attachmentsarray of object
attachments[].filenamestring
attachments[].contentstringBase64-encoded file content.

Responses

StatusDescription
200OK, queued for sending
400Invalid request body or query - every violation found (missing/invalid/unexpected fields) is reported in one response, semicolon-separated, not just the first one hit.
403Missing or invalid API key
404Transactional email not found
405The operation is blocked by a business rule (e.g. the resource is still in use)

Response body

FieldTypeRequiredDescription
successboolean

Send a triggered email

POST /v1/projectId/{projectId}/send-triggered

The project is resolved from triggeredId, not just the URL - the URL's projectId must match the triggered email's own project, or this 404s.

Sending fails with a 405 if the account is out of email credit ("Insufficient credits available") - there is no public endpoint to check remaining balance ahead of time, only in the app. It also fails with a 405 if a sandbox project's daily send cap is exceeded, or if bounce/complaint rates have triggered automatic restriction (see Project.status and GET .../sandbox/deliverability).

Parameters

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.

Request body

FieldTypeRequiredDescription
triggeredIdstringyesA triggered email _id, from GET /v1/projectId/{projectId}/triggered-emails - NOT a template ID.
emailsarray of stringDefaults to every active subscriber on the triggered email's subscriber list when omitted.
dataanyTemplate variables to render into the email.
attachmentsarray of object
attachments[].filenamestring
attachments[].contentstringBase64-encoded file content.

Responses

StatusDescription
200OK, queued for sending
400Invalid request body or query - every violation found (missing/invalid/unexpected fields) is reported in one response, semicolon-separated, not just the first one hit.
403Missing or invalid API key
404Triggered email not found
405The operation is blocked by a business rule (e.g. the resource is still in use)

Response body

FieldTypeRequiredDescription
successboolean

Send a transactional email (legacy flat URL shape)

POST /v1/send-transactional

Legacy flat URL shape, kept for backward compatibility - identical behavior to POST /v1/projectId/{projectId}/send-transactional above (which is the same handler; there is no projectId in this URL because the project is resolved entirely from transactionalId).

Sending fails with a 405 if the account is out of email credit ("Insufficient credits available") - there is no public endpoint to check remaining balance ahead of time, only in the app. It also fails with a 405 if a sandbox project's daily send cap is exceeded, or if bounce/complaint rates have triggered automatic restriction (see Project.status and GET .../sandbox/deliverability).

Request body

FieldTypeRequiredDescription
emailstringyes
transactionalIdstringyesA transactional email _id, from GET /v1/projectId/{projectId}/transactional-emails - NOT a template ID.
dataanyTemplate variables to render into the email.
attachmentsarray of object
attachments[].filenamestring
attachments[].contentstringBase64-encoded file content.

Responses

StatusDescription
200OK, queued for sending
400Invalid request body or query - every violation found (missing/invalid/unexpected fields) is reported in one response, semicolon-separated, not just the first one hit.
403Missing or invalid API key
404Transactional email not found
405The operation is blocked by a business rule (e.g. the resource is still in use)

Response body

FieldTypeRequiredDescription
successboolean

Send a triggered email (legacy flat URL shape)

POST /v1/send-triggered

Legacy flat URL shape, kept for backward compatibility - identical behavior to POST /v1/projectId/{projectId}/send-triggered above (which is the same handler; there is no projectId in this URL because the project is resolved entirely from triggeredId).

Sending fails with a 405 if the account is out of email credit ("Insufficient credits available") - there is no public endpoint to check remaining balance ahead of time, only in the app. It also fails with a 405 if a sandbox project's daily send cap is exceeded, or if bounce/complaint rates have triggered automatic restriction (see Project.status and GET .../sandbox/deliverability).

Request body

FieldTypeRequiredDescription
triggeredIdstringyesA triggered email _id, from GET /v1/projectId/{projectId}/triggered-emails - NOT a template ID.
emailsarray of stringDefaults to every active subscriber on the triggered email's subscriber list when omitted.
dataanyTemplate variables to render into the email.
attachmentsarray of object
attachments[].filenamestring
attachments[].contentstringBase64-encoded file content.

Responses

StatusDescription
200OK, queued for sending
400Invalid request body or query - every violation found (missing/invalid/unexpected fields) is reported in one response, semicolon-separated, not just the first one hit.
403Missing or invalid API key
404Triggered email not found
405The operation is blocked by a business rule (e.g. the resource is still in use)

Response body

FieldTypeRequiredDescription
successboolean