Sending

Send a message

Queues a message for up to 5 recipients (to + cc + bcc). Each recipient is one quota unit. Idempotency-Key (header) or idempotencyKey (body) deduplicates safely; X-Oveyon-Sandbox: 1 accepts and freezes without delivering. On a 500, only retry with an idempotencyKey.

post/send

Request

  • Base URL: https://api.oveyon.com/v1
  • URL: https://api.oveyon.com/v1/send
  • Auth: HTTP bearer

Headers

Idempotency-Keystring
X-Oveyon-Sandbox'1'

Request body

holdboolean

F3b — hold the message for HUMAN approval instead of delivering: accepted, signed and stored, not sent. The 202 answers status held with approve/reject URLs; the human decides in the portal, by Telegram, or by POST /v1/messages/{id}/approve|reject (scope approve:holds — the key that sends is not the key that approves). Default TTL 24 h, max 7 days; expired drafts never go out. Counts one quota unit per recipient at acceptance; rejected/expired refunds it. Ignored (status sandbox) when the key itself is in sandbox.

holdTtlinteger

Seconds until the draft expires (default 86400).

holdNotestring

What the agent wants the approver to know.

fromstring required

a@b.com or Name <a@b.com>; the domain must be verified in the account. Exactly one address: the display name cannot carry another address, and a bare address is the whole value (a@b.com (Name) and Name a@b.com are 400). At most 998 characters (the RFC 5322 line limit). The display name may have accents; the address is ASCII only (an IDN domain in xn-- form), with no Unicode space next to it — otherwise 400 with reason: address_not_ascii.

subjectstring
htmlstring
textstring

At least one of html/text is required — unless templateId is used.

dataobject

Template variables.

versioninteger

Pins a published template version.

headersobject

Extra headers. List-Unsubscribe, X-Report-Abuse and X-Oveyon-* are ignored. Each value is a string (or a list of strings); an object is 400. Address headers (Reply-To, Sender, Cc, Disposition-Notification-To…) follow the same rules as the addresses above — ASCII only, and read like to (a group is allowed and each member is checked).

idempotencyKeystring

Optional task/order key (alternative to the Idempotency-Key header). Within the account, a retained key returns the original message id for 24 hours from its first claim. After expiry a retry can create another message.

sandboxboolean

true accepts and freezes without delivering (or header X-Oveyon-Sandbox: 1).

return_path'sender' | 'platform'

The envelope sender (Return-Path) of THIS message; without it, the key's default applies (set under Credentials). platform (the default for new keys): a per-message platform address — bounces come back to us, show up on the message, fire the bounce webhook and suppress addresses that do not exist. sender: the envelope is the From address itself, stable across messages — for a personal mailbox and mailing lists (list confirmation, greylisting, allowlists by envelope sender); a bounce the destination sends back goes straight to the sender's mailbox and is NOT tracked (no suppression, no bounce webhook) — an immediate refusal our server sees still shows up in the message status. sender requires the From domain to authorize us: its SPF must have our include: (and the _mailchannels TXT when that relay is active) — otherwise 422 return_path_not_authorized. sender is for paid plans: on an account without one it is 403 return_path_requires_paid_plan (unless our team switched the key to sender as an exception); a key whose default is sender on an account that moved to a free plan simply sends with the platform address. Any other value (an address included) is 400.

Response

Duplicate: the idempotencyKey was already used; returns the original id.

idstring uuid required

The id of the ORIGINAL message (the one the idempotencyKey created).

status'duplicate' required
messagestring required

Changes

No recorded changes to this operation across all 1 revision of this API.