1. Delivery
Messaging API
  • Root
    • OTT
      • Send OTT
    • SMS
      • Send SMS
        • SendSms
        • SendSmsBatch
    • Voice
      • Calls
        • Place a call, or launch a campaign
    • Email
      • Raíz
      • Service
        • Health check
      • Delivery
        • Queue transactional email(s) for delivery
          POST
      • Attachments
        • DEPRECATED — you do not need this to send attachments
      • Templates
        • List EmailTemplates owned by the calling client
  • Raíz
  • Schemas
    • Schemas
      • MessageChannel
      • ApiSmsRequest
      • VoiceApiRequest
      • EmailRecipient
      • OTTMessagePayload
      • EmailRequest
      • OTTMessageRequest
      • EmailResponse
      • EmailResult
    • EmailDeliverAttachment
    • VoiceDeliverRequest
    • SmsBatchRequest
    • EmailDeliverPayload
    • ErrorMessage
    • BatchError
    • EmailDeliverRequest
    • ProblemDetails
    • EmailDeliverResult
    • CampaignAccepted
    • EmailDeliverResponse
    • AttachmentUploadResponse
    • EmailTemplateSummary
  1. Delivery

Queue transactional email(s) for delivery

POST
/deliver
Last modified:2026-08-21 18:59:10

Attachments#

Each entry is a name and the file in base64:
"attachments": [
  { "attachmentName": "invoice.pdf", "content": "JVBERi0xLjQK..." },
  { "attachmentName": "receipt.pdf", "content": "JVBERi0xLjQK..." }
]
Up to 10 files per email, adding up to 8 MB of raw file size.
Put attachments inside a payload item when the files belong to that recipient — an invoice, a certificate — which is the usual case. Put it at request level when the very same files go to everyone. One or the other, never both.
Allowed: PDF, Word, Excel, PowerPoint, ODF, TXT, CSV, RTF, images and ZIP. The check is a whitelist by extension and a file-signature match.
A request is limited to 50 recipients and a 20 MB body. Split into more calls past that.

Message#

Provide either templateId or html, not both.
subject is required with html; with templateId the template subject wins and any subject sent here is ignored.

Response#

Returns 202 with a per-recipient status. A 202 does not mean everything was queued — read overallStatus and each status.

Request

Authorization
API Key
Add parameter in header
X-API-KEY
Example:
X-API-KEY: ********************
or
Body Params application/jsonRequired

Examples

Responses

🟢202
application/json
Accepted. Check per-recipient status.
Bodyapplication/json

🟠401
🟠403
🟠413
Request Request Example
Shell
JavaScript
Java
Swift
cURL
curl --location 'https://api.trucontact.co/deliver' \
--header 'X-API-KEY: <api-key>' \
--header 'Content-Type: application/json' \
--data-raw '{
    "from": "billing@yourcompany.com",
    "templateId": "66f1c0a94b8d2e5f7a3c1d90",
    "payload": [
        {
            "recipient": "ana.gomez@example.com",
            "fields": {
                "name": "Ana",
                "invoice_number": "F-2026-00184"
            },
            "attachments": [
                {
                    "content": "JVBERi0xLjQKJcfsj6IKNSAwIG9iago8PC9MZW5ndGggNiAwIFI+Pg==",
                    "attachmentName": "invoice-F-2026-00184.pdf"
                }
            ]
        }
    ]
}'
Response Response Example
202 - Every recipient queued
{
    "overallStatus": "success",
    "errors": null,
    "recipients": [
        {
            "recipient": "ana.gomez@example.com",
            "messageId": "6a7df0dd094c96339894be60",
            "status": "queued",
            "error": null
        },
        {
            "recipient": "luis.perez@example.com",
            "messageId": "6a7df0dd094c96339894be61",
            "status": "queued",
            "error": null
        }
    ]
}
Modified at 2026-08-21 18:59:10
Previous
Health check
Next
DEPRECATED — you do not need this to send attachments
Built with