Skip to main content
POST
/
emails
/
batch
Send multiple emails
curl --request POST \
  --url https://api.arkhq.io/v1/emails/batch \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "tenantId": "cm6abc123def456",
  "from": "notifications@myapp.com",
  "emails": [
    {
      "to": [
        "alice@example.com"
      ],
      "subject": "Hello Alice",
      "html": "<p>Hi Alice, your order is ready!</p>",
      "tag": "order-ready"
    },
    {
      "to": [
        "bob@example.com"
      ],
      "subject": "Hello Bob",
      "html": "<p>Hi Bob, your order is ready!</p>",
      "tag": "order-ready"
    }
  ]
}
'
{
  "success": true,
  "data": {
    "total": 10,
    "accepted": 9,
    "failed": 1,
    "tenantId": "cm6abc123def456",
    "messages": {},
    "sandbox": true
  },
  "meta": {
    "requestId": "req_V1StGXR8_Z5jdHi6"
  }
}

Authorizations

Authorization
string
header
required

Use your API key from arkhq.io/org/credentials

Authorization: Bearer YOUR_API_KEY

Headers

Idempotency-Key
string

Unique key for idempotent requests. If a request with this key was already processed, the cached response is returned. Keys expire after 24 hours.

Maximum string length: 255
Pattern: ^[\w\-_.~]+$

Body

application/json
from
string
required

Sender email for all messages

emails
object[]
required
Required array length: 1 - 100 elements
tenantId
string | null

The tenant ID to send this batch from. Determines which tenant's configuration (domains, webhooks, tracking) is used.

  • If your API key is scoped to a specific tenant, this must match that tenant or be omitted.
  • If your API key is org-level, specify the tenant to send from.
  • If omitted, the organization's default tenant is used.
Example:

"cm6abc123def456"

Response

Batch accepted

success
boolean
required
data
object
required
meta
object
required