OpenAPI Explorer

High-speed messaging and notification engine for Zambia. Unified API for SMS, WhatsApp, Transactional Email, message status, delivery logs, webhook delivery history, batches, a shared prepaid Mobile Money wallet, and sender domain setup. Email uses the configured platform sender until your own domain is verified in Dashboard → Email & WhatsApp. WhatsApp sends from our platform Mesa number unless you configure your own mesa.zambrite.com API key and connected session. SMS, email, and WhatsApp all debit the same organization wallet.

Default server: https://zambox.zambrite.com

SMS Messaging

2 endpoints
POST/api/messaging/v1/sms/send

Send single SMS

Request body (application/json)

"string"

Responses

201Queued
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000",
  "status": "queued",
  "channel": "sms"
}
400Validation error
Content-Type: application/json
{
  "error": "string"
}
401Unauthorized
Content-Type: application/json
{
  "error": "string"
}
409Idempotency-Key reused with a different body (idempotency_conflict) or still in progress
Content-Type: application/json
{
  "error": "string",
  "code": "string"
}
422Blocked by a send guard (sms_unrendered_placeholder) when the guard is in block mode
Content-Type: application/json
{
  "error": "string",
  "code": "string"
}
429Rate limit exceeded
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://zambox.zambrite.com/api/messaging/v1/sms/send" \
  -H "Accept: application/json"
POST/api/messaging/v1/sms/send-bulk

Send bulk SMS

Request body (application/json)

"string"

Responses

201Bulk queued
Content-Type: application/json
{
  "batchId": "00000000-0000-4000-8000-000000000000",
  "count": 1,
  "messages": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "to": "string",
      "status": "queued"
    }
  ]
}
400Validation error
Content-Type: application/json
{
  "error": "string"
}
401Unauthorized
Content-Type: application/json
{
  "error": "string"
}
429Rate limit or backpressure limit reached
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://zambox.zambrite.com/api/messaging/v1/sms/send-bulk" \
  -H "Accept: application/json"

WhatsApp Messaging

2 endpoints
POST/api/messaging/v1/whatsapp/send

Send single WhatsApp message

Send a WhatsApp message through the platform Mesa number by default. Configure your own mesa.zambrite.com API key and connected session in Dashboard → Email & WhatsApp to send from your own number. Mesa currently supports text messages; richer message types require your own supported provider. All channels debit the same organization wallet. The `message.type` field determines the message shape: `text`, `template`, `image`, `document`, `audio`, `video`, `sticker`, `location`, `reaction`, or `interactive`.

Request body (application/json)

{
  "to": "string",
  "message": {
    "type": "text",
    "text": {
      "body": "string"
    }
  },
  "category": null,
  "metadata": null,
  "webhook": null
}

Responses

201Message queued
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000",
  "status": "queued",
  "channel": "whatsapp"
}
400Validation error
Content-Type: application/json
{
  "error": "string"
}
401Unauthorized
Content-Type: application/json
{
  "error": "string"
}
429Rate limit exceeded
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://zambox.zambrite.com/api/messaging/v1/whatsapp/send" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d "{
  \"to\": \"string\",
  \"message\": {
    \"type\": \"text\",
    \"text\": {
      \"body\": \"string\"
    }
  },
  \"category\": null,
  \"metadata\": null,
  \"webhook\": null
}"
POST/api/messaging/v1/whatsapp/send-bulk

Send bulk WhatsApp messages

Send the same WhatsApp message to multiple recipients in one call through the platform Mesa number by default. Add your own Mesa API key and connected session in Dashboard → Email & WhatsApp to use your own number. Mesa supports text; richer types require your own supported provider. All channels debit the same organization wallet. Supports message types: text, template, image, document, audio, video, sticker, location. Types `reaction` and `interactive` are per-recipient and cannot be used in bulk sends.

Request body (application/json)

{
  "message": {
    "type": "text",
    "text": {
      "body": "string"
    }
  },
  "category": null,
  "to": [
    "string"
  ],
  "metadata": null,
  "webhook": null
}

Responses

201Bulk queued
Content-Type: application/json
{
  "batchId": "00000000-0000-4000-8000-000000000000",
  "count": 1,
  "messages": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "to": "string",
      "status": "queued"
    }
  ]
}
400Validation error
Content-Type: application/json
{
  "error": "string"
}
401Unauthorized
Content-Type: application/json
{
  "error": "string"
}
429Rate limit or backpressure limit reached
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://zambox.zambrite.com/api/messaging/v1/whatsapp/send-bulk" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d "{
  \"message\": {
    \"type\": \"text\",
    \"text\": {
      \"body\": \"string\"
    }
  },
  \"category\": null,
  \"to\": [
    \"string\"
  ],
  \"metadata\": null,
  \"webhook\": null
}"

Transactional Email

4 endpoints
POST/api/messaging/v1/email/send

Send single email

Request body (application/json)

{
  "to": "[email protected]",
  "subject": "string",
  "body": "string",
  "htmlBody": null,
  "from": null,
  "replyTo": null,
  "metadata": null,
  "webhook": null
}

Responses

201Queued
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000",
  "status": "queued",
  "channel": "email"
}
400Validation error
Content-Type: application/json
{
  "error": "string"
}
401Unauthorized
Content-Type: application/json
{
  "error": "string"
}
429Rate limit exceeded
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://zambox.zambrite.com/api/messaging/v1/email/send" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d "{
  \"to\": \"[email protected]\",
  \"subject\": \"string\",
  \"body\": \"string\",
  \"htmlBody\": null,
  \"from\": null,
  \"replyTo\": null,
  \"metadata\": null,
  \"webhook\": null
}"
POST/api/messaging/v1/email/send-bulk

Send bulk email

Request body (application/json)

{
  "from": null,
  "subject": "string",
  "body": "string",
  "htmlBody": null,
  "to": [
    "[email protected]"
  ],
  "metadata": null,
  "webhook": null
}

Responses

201Bulk queued
Content-Type: application/json
{
  "batchId": "00000000-0000-4000-8000-000000000000",
  "count": 1,
  "messages": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "to": "string",
      "status": "queued"
    }
  ]
}
400Validation error
Content-Type: application/json
{
  "error": "string"
}
401Unauthorized
Content-Type: application/json
{
  "error": "string"
}
429Rate limit or backpressure limit reached
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://zambox.zambrite.com/api/messaging/v1/email/send-bulk" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d "{
  \"from\": null,
  \"subject\": \"string\",
  \"body\": \"string\",
  \"htmlBody\": null,
  \"to\": [
    \"[email protected]\"
  ],
  \"metadata\": null,
  \"webhook\": null
}"
GET/api/providers/email-domain
Auth requiredproviders.view

Get your platform email domain and DNS records

Requires features: providers.view

Responses

200Domain verification state
Content-Type: application/json
{
  "domain": null,
  "sender": null,
  "status": "string",
  "records": [
    {}
  ]
}

Example

curl -X GET "https://zambox.zambrite.com/api/providers/email-domain" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/api/providers/email-domain
Auth requiredproviders.manage

Authorize and verify your email domain for platform sending

Register your domain, publish the returned DNS records, then verify. Until Resend confirms verification, email uses the platform sender. Requires features: providers.manage

Request body (application/json)

{
  "action": "register",
  "domain": "string",
  "sender": "[email protected]"
}

Responses

200Domain verification state
Content-Type: application/json
{
  "domain": null,
  "sender": null,
  "status": "string",
  "records": [
    {}
  ]
}

Example

curl -X POST "https://zambox.zambrite.com/api/providers/email-domain" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"action\": \"register\",
  \"domain\": \"string\",
  \"sender\": \"[email protected]\"
}"

Delivery & Lifecycle

4 endpoints
GET/api/messaging/v1/batches/{id}

Get batch status — all messages in a bulk send batch

Parameters

NameInRequiredSchemaDescription
idpathYesstring—

Responses

200Batch status
Content-Type: application/json
{
  "batchId": "00000000-0000-4000-8000-000000000000",
  "count": 1,
  "messages": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "channel": "string",
      "to": "string",
      "status": "string",
      "externalId": null,
      "errorCode": null,
      "errorMessage": null,
      "sentAt": null,
      "failedAt": null,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ]
}
400Bad request
Content-Type: application/json
{
  "error": "string"
}
401Unauthorized
Content-Type: application/json
{
  "error": "string"
}
404Batch not found
Content-Type: application/json
{
  "error": "string"
}
429Rate limit exceeded
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://zambox.zambrite.com/api/messaging/v1/batches/:id" \
  -H "Accept: application/json"
GET/api/messaging/v1/messages/{id}

Get message status

Parameters

NameInRequiredSchemaDescription
idpathYesstring—

Responses

200Message status
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000",
  "channel": "string",
  "to": "string",
  "status": "string",
  "externalId": null,
  "errorCode": null,
  "errorMessage": null,
  "sentAt": null,
  "failedAt": null,
  "createdAt": "string",
  "updatedAt": "string"
}
400Bad request
Content-Type: application/json
{
  "error": "string"
}
401Unauthorized
Content-Type: application/json
{
  "error": "string"
}
404Not found
Content-Type: application/json
{
  "error": "string"
}
429Rate limit exceeded
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://zambox.zambrite.com/api/messaging/v1/messages/:id" \
  -H "Accept: application/json"
GET/api/messaging/v1/messages/{id}/delivery-logs

Get message delivery logs

Parameters

NameInRequiredSchemaDescription
idpathYesstring—

Responses

200Delivery logs
Content-Type: application/json
{
  "messageId": "00000000-0000-4000-8000-000000000000",
  "logs": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "eventType": "string",
      "errorCode": null,
      "errorMessage": null,
      "createdAt": "string"
    }
  ]
}
400Bad request
Content-Type: application/json
{
  "error": "string"
}
401Unauthorized
Content-Type: application/json
{
  "error": "string"
}
404Not found
Content-Type: application/json
{
  "error": "string"
}
429Rate limit exceeded
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://zambox.zambrite.com/api/messaging/v1/messages/:id/delivery-logs" \
  -H "Accept: application/json"
GET/api/messaging/v1/messages/{id}/webhook-deliveries

Get message webhook delivery history

Parameters

NameInRequiredSchemaDescription
idpathYesstring—

Responses

200Webhook delivery attempts
Content-Type: application/json
{
  "messageId": "00000000-0000-4000-8000-000000000000",
  "deliveries": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "eventId": "string",
      "eventType": "string",
      "targetUrl": "string",
      "status": "string",
      "attemptCount": 1,
      "maxAttempts": 1,
      "nextRetryAt": null,
      "lastAttemptAt": null,
      "deliveredAt": null,
      "failedAt": null,
      "lastHttpStatus": null,
      "lastError": null,
      "responseBody": null,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ]
}
400Bad request
Content-Type: application/json
{
  "error": "string"
}
401Unauthorized
Content-Type: application/json
{
  "error": "string"
}
404Not found
Content-Type: application/json
{
  "error": "string"
}
429Rate limit exceeded
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://zambox.zambrite.com/api/messaging/v1/messages/:id/webhook-deliveries" \
  -H "Accept: application/json"

Prepaid Wallet & Billing

3 endpoints
GET/api/billing/v1/wallet

Get wallet balance

Responses

200Wallet balance
Content-Type: application/json
{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "currency": "string",
  "balance": 1,
  "frozenAmount": 1,
  "available": 1,
  "lowBalanceThreshold": 1,
  "low": true,
  "enforceBalance": true,
  "updatedAt": "string",
  "unitPrices": null
}
401Unauthorized
Content-Type: application/json
{
  "error": "string"
}
429Rate limit exceeded
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://zambox.zambrite.com/api/billing/v1/wallet" \
  -H "Accept: application/json"
POST/api/billing/v1/wallet/funding

Start a wallet top-up

Request body (application/json)

{
  "method": "mobile_money",
  "amount": 1,
  "idempotencyKey": "00000000-0000-4000-8000-000000000000",
  "accountNumber": "string"
}

Responses

201Payment started
Content-Type: application/json
{
  "reference": "string",
  "status": "string",
  "amount": 1,
  "currency": "string",
  "cardRedirectionUrl": null
}
400Validation error
Content-Type: application/json
{
  "error": "string"
}
401Unauthorized
Content-Type: application/json
{
  "error": "string"
}
429Rate limit exceeded
Content-Type: application/json
{
  "error": "string"
}
503Funding provider unavailable
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://zambox.zambrite.com/api/billing/v1/wallet/funding" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d "{
  \"method\": \"mobile_money\",
  \"amount\": 1,
  \"idempotencyKey\": \"00000000-0000-4000-8000-000000000000\",
  \"accountNumber\": \"string\"
}"
GET/api/billing/v1/wallet/funding/{reference}

Get top-up status

Parameters

NameInRequiredSchemaDescription
referencepathYesstring—

Responses

200Payment status
Content-Type: application/json
{
  "reference": "string",
  "status": "string",
  "amount": 1,
  "currency": "string",
  "gatewayMessage": null,
  "settledAt": null
}
401Unauthorized
Content-Type: application/json
{
  "error": "string"
}
404Not found
Content-Type: application/json
{
  "error": "string"
}
429Rate limit exceeded
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://zambox.zambrite.com/api/billing/v1/wallet/funding/:reference" \
  -H "Accept: application/json"

Sender ID Management

7 endpoints
GET/api/providers/sender-ids
Auth requiredproviders.sender_ids.view

List SMS sender IDs for the organization

Requires features: providers.sender_ids.view

Parameters

NameInRequiredSchemaDescription
statusqueryNostring—
organizationIdqueryNostring—
allTenantsqueryNoboolean—
pagequeryNonumber—
pageSizequeryNonumber—

Responses

200Sender IDs
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "tenantId": "00000000-0000-4000-8000-000000000000",
      "organizationId": "00000000-0000-4000-8000-000000000000",
      "senderId": "string",
      "status": "draft",
      "companyName": null,
      "purpose": null,
      "sampleMessages": null,
      "brandUrl": null,
      "contactDetails": null,
      "esignDocumentId": null,
      "esignSigningUrl": null,
      "signedAt": null,
      "activatedAt": null,
      "rejectionReason": null,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}
400Invalid request
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://zambox.zambrite.com/api/providers/sender-ids?allTenants=false&page=1&pageSize=20" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/api/providers/sender-ids
Auth requiredproviders.sender_ids.manage

Request a new SMS sender ID

Requires features: providers.sender_ids.manage

Request body (application/json)

{
  "senderId": "string",
  "companyName": "string",
  "purpose": "Transactional alerts, OTPs, and notifications",
  "sampleMessages": [],
  "brandUrl": null,
  "contactDetails": null
}

Responses

201Sender ID request created
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "senderId": "string",
  "status": "draft",
  "companyName": null,
  "purpose": null,
  "sampleMessages": null,
  "brandUrl": null,
  "contactDetails": null,
  "esignDocumentId": null,
  "esignSigningUrl": null,
  "signedAt": null,
  "activatedAt": null,
  "rejectionReason": null,
  "createdAt": "string",
  "updatedAt": "string"
}
400Validation failed
Content-Type: application/json
{
  "error": "string"
}
409Sender ID already in use
Content-Type: application/json
{
  "error": "string"
}
422Sender ID rejected as not a brand name, a test name or another organisation's brand
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://zambox.zambrite.com/api/providers/sender-ids" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"senderId\": \"string\",
  \"companyName\": \"string\",
  \"purpose\": \"Transactional alerts, OTPs, and notifications\",
  \"sampleMessages\": [],
  \"brandUrl\": null,
  \"contactDetails\": null
}"
GET/api/providers/sender-ids/{id}
Auth requiredproviders.sender_ids.view

Get an SMS sender ID

Requires features: providers.sender_ids.view

Parameters

NameInRequiredSchemaDescription
idpathYesstring—

Responses

200Sender ID
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "senderId": "string",
  "status": "draft",
  "companyName": null,
  "purpose": null,
  "sampleMessages": null,
  "brandUrl": null,
  "contactDetails": null,
  "esignDocumentId": null,
  "esignSigningUrl": null,
  "signedAt": null,
  "activatedAt": null,
  "rejectionReason": null,
  "createdAt": "string",
  "updatedAt": "string"
}
404Not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://zambox.zambrite.com/api/providers/sender-ids/:id" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/api/providers/sender-ids/{id}
Auth requiredproviders.sender_ids.manage

Update a draft sender ID request

Requires features: providers.sender_ids.manage

Parameters

NameInRequiredSchemaDescription
idpathYesstring—

Request body (application/json)

{
  "purpose": "Transactional alerts, OTPs, and notifications",
  "sampleMessages": [],
  "brandUrl": null,
  "contactDetails": null
}

Responses

200Updated sender ID
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "senderId": "string",
  "status": "draft",
  "companyName": null,
  "purpose": null,
  "sampleMessages": null,
  "brandUrl": null,
  "contactDetails": null,
  "esignDocumentId": null,
  "esignSigningUrl": null,
  "signedAt": null,
  "activatedAt": null,
  "rejectionReason": null,
  "createdAt": "string",
  "updatedAt": "string"
}
400Validation failed
Content-Type: application/json
{
  "error": "string"
}
404Not found
Content-Type: application/json
{
  "error": "string"
}
409Not editable in current status
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://zambox.zambrite.com/api/providers/sender-ids/:id" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"purpose\": \"Transactional alerts, OTPs, and notifications\",
  \"sampleMessages\": [],
  \"brandUrl\": null,
  \"contactDetails\": null
}"
PATCH/api/providers/sender-ids/{id}
Auth requiredproviders.sender_ids.approve

Approve, reject, or advance a sender ID (platform operators)

Requires features: providers.sender_ids.approve

Parameters

NameInRequiredSchemaDescription
idpathYesstring—

Request body (application/json)

{
  "status": "active",
  "rejectionReason": null
}

Responses

200Updated sender ID
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "senderId": "string",
  "status": "draft",
  "companyName": null,
  "purpose": null,
  "sampleMessages": null,
  "brandUrl": null,
  "contactDetails": null,
  "esignDocumentId": null,
  "esignSigningUrl": null,
  "signedAt": null,
  "activatedAt": null,
  "rejectionReason": null,
  "createdAt": "string",
  "updatedAt": "string"
}
400Validation failed
Content-Type: application/json
{
  "error": "string"
}
404Not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PATCH "https://zambox.zambrite.com/api/providers/sender-ids/:id" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"status\": \"active\",
  \"rejectionReason\": null
}"
DELETE/api/providers/sender-ids/{id}
Auth requiredproviders.sender_ids.manage

Withdraw a sender ID request

Requires features: providers.sender_ids.manage

Parameters

NameInRequiredSchemaDescription
idpathYesstring—

Responses

200Withdrawn
Content-Type: application/json
{
  "ok": true,
  "id": "00000000-0000-4000-8000-000000000000"
}
404Not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://zambox.zambrite.com/api/providers/sender-ids/:id" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/api/providers/sender-ids/{id}/resend
Auth requiredproviders.sender_ids.manage

Prepare a new declaration for an unsigned draft sender ID

Requires features: providers.sender_ids.manage

Parameters

NameInRequiredSchemaDescription
idpathYesstring—

Responses

200Declaration prepared
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "senderId": "string",
  "status": "draft",
  "companyName": null,
  "purpose": null,
  "sampleMessages": null,
  "brandUrl": null,
  "contactDetails": null,
  "esignDocumentId": null,
  "esignSigningUrl": null,
  "signedAt": null,
  "activatedAt": null,
  "rejectionReason": null,
  "createdAt": "string",
  "updatedAt": "string"
}
400Invalid request
Content-Type: application/json
{
  "error": "string"
}
404Sender ID not found
Content-Type: application/json
{
  "error": "string"
}
409Sender ID is not an unsigned draft
Content-Type: application/json
{
  "error": "string"
}
502Declaration preparation failed
Content-Type: application/json
{
  "error": "string"
}
503Declaration service unavailable
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://zambox.zambrite.com/api/providers/sender-ids/:id/resend" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"