REST API · Email

Email Verification API

Buy disposable email addresses for OTP verification over a clean REST API. Same JSON conventions and the same API key as the SMS endpoints, scoped to /v1/email-activations.

Base URL

https://smsbulk.net/api/v1/email-activations

One API key works for both SMS and email. If you already integrated the SMS API, you are minutes away from email.

Authentication

Send your API key with every request. Two interchangeable methods are accepted:

# 1. Header (recommended)
curl https://smsbulk.net/api/v1/email-activations \
  -H "x-api-key: YOUR_KEY"

# 2. Bearer token
curl https://smsbulk.net/api/v1/email-activations \
  -H "Authorization: Bearer YOUR_KEY"

Send the key via the header (x-api-key) or a Bearer token. Passing it as a URL query parameter is not recommended for security, because query strings are commonly recorded in server and proxy logs.

Your SMS API key is the same key used here. There is no separate email key.

Endpoints

Six routes under /api/v1/email-activations. Prices are user-facing; wholesale cost is never returned.

GET/api/v1/email-activations/domains?site=telegram.com

List the email provider domains available for a target site, with user-facing price and stock.

Request
curl "https://smsbulk.net/api/v1/email-activations/domains?site=telegram.com" \
  -H "x-api-key: YOUR_KEY"
Response
[
  { "name": "gmx.com", "price": 0.04, "count": 12, "currency": "USD" }
]
POST/api/v1/email-activations

Reserve an email address for a site/domain pair. Charges your wallet immediately and returns the activation in WAITING.

Request
curl -X POST https://smsbulk.net/api/v1/email-activations \
  -H "x-api-key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "site": "telegram.com", "domain": "gmx.com" }'
Response
{
  "id": "cmox8h7pmicm3mkczzwhdz0yd",
  "site": "telegram.com",
  "domain": "gmx.com",
  "emailAddress": "[email protected]",
  "status": "WAITING",
  "otpValue": null,
  "userCost": "0.04",
  "currency": "USD",
  "expiresAt": "2026-06-03T14:05:00Z",
  "createdAt": "2026-06-03T13:45:00Z"
}
GET/api/v1/email-activations?limit=50

Return your most recent email activations, newest first. Default 50, max 100, no cursor pagination.

Request
curl "https://smsbulk.net/api/v1/email-activations?limit=50" \
  -H "x-api-key: YOUR_KEY"
Response
[
  {
    "id": "cmox8h7pmicm3mkczzwhdz0yd",
    "site": "telegram.com",
    "domain": "gmx.com",
    "emailAddress": "[email protected]",
    "status": "RECEIVED",
    "otpValue": "595348",
    "userCost": "0.04",
    "currency": "USD",
    "expiresAt": "2026-06-03T14:05:00Z",
    "receivedAt": "2026-06-03T13:47:12Z",
    "createdAt": "2026-06-03T13:45:00Z",
    "reorderBlockedAt": null
  }
]
GET/api/v1/email-activations/:id

Fetch a single activation. Includes the parsed OTP and the raw HTML email body once received.

Request
curl https://smsbulk.net/api/v1/email-activations/cmox8h7pmicm3mkczzwhdz0yd \
  -H "x-api-key: YOUR_KEY"
Response
{
  "id": "cmox8h7pmicm3mkczzwhdz0yd",
  "site": "telegram.com",
  "domain": "gmx.com",
  "emailAddress": "[email protected]",
  "status": "RECEIVED",
  "otpValue": "595348",
  "htmlMessage": "<html>Your code is 595348</html>",
  "userCost": "0.04",
  "currency": "USD",
  "expiresAt": "2026-06-03T14:05:00Z",
  "receivedAt": "2026-06-03T13:47:12Z",
  "createdAt": "2026-06-03T13:45:00Z",
  "reorderBlockedAt": null
}
POST/api/v1/email-activations/:id/reorder

Re-open the same address for another OTP. Charges the wallet again (email equivalent of SMS resend).

Request
curl -X POST https://smsbulk.net/api/v1/email-activations/cmox8h7pmicm3mkczzwhdz0yd/reorder \
  -H "x-api-key: YOUR_KEY"
Response
{
  "id": "cmox8h7pmicm3mkczzwhdz0yd",
  "site": "telegram.com",
  "domain": "gmx.com",
  "emailAddress": "[email protected]",
  "status": "WAITING",
  "otpValue": null,
  "userCost": "0.04",
  "currency": "USD",
  "expiresAt": "2026-06-03T14:20:00Z",
  "createdAt": "2026-06-03T13:45:00Z",
  "reorderBlockedAt": null
}
Error response

If the email provider has blocked the address, reorder fails with 502 and code EMAIL_BANNED, and the charge is refunded. From then on the activation carries reorderBlockedAt (an ISO date, null otherwise) in list, detail and reorder responses, and every further reorder returns 409 with code EMAIL_BANNED without charging. Buy a new address instead.

HTTP 409 Conflict
{
  "statusCode": 409,
  "code": "EMAIL_BANNED",
  "message": "Email address blocked by the provider; reorder is not possible"
}
DELETE/api/v1/email-activations/:id

Cancel an activation. Refunds your wallet if no OTP was received.

Request
curl -X DELETE https://smsbulk.net/api/v1/email-activations/cmox8h7pmicm3mkczzwhdz0yd \
  -H "x-api-key: YOUR_KEY"
Response
{
  "ok": true
}
Response

If a reorder on this activation stalled, cancel refunds the reorder charge instead of cancelling. The response is 200 with reorderRefunded: true and code EMAIL_REORDER_REFUNDED, and the original address stays active.

HTTP 200 OK
{
  "ok": true,
  "reorderRefunded": true,
  "code": "EMAIL_REORDER_REFUNDED",
  "message": "Reorder failed and was refunded. Your original email address is still active."
}
Error response

If a reorder on this activation is still running, cancel returns 409 with code EMAIL_REORDER_IN_PROGRESS and retryAfterSec (seconds to wait). Nothing is cancelled or charged; retry after that time.

HTTP 409 Conflict
{
  "statusCode": 409,
  "code": "EMAIL_REORDER_IN_PROGRESS",
  "message": "A reorder is in progress. Try again in a moment.",
  "retryAfterSec": 90
}

Notes & limits

  • Daily quota is shared across SMS and email: 10,000 requests per API key per UTC day.
  • The list endpoint returns at most 100 rows (default 50) and has no cursor pagination by design.
  • Loyalty discounts are applied automatically to the charged price. userCost reflects what you actually pay.

Start verifying email

Grab your API key and send your first request with a single curl command.