Kronati

Developer API

Build with Kronati

Create email accounts and read incoming messages programmatically. Account creation is charged from your balance at the standard rate.

Authentication

All requests require a Bearer token in the Authorization header. Generate an API key in your dashboard.

Authorization: Bearer sk_live_your_key_here
Base URLhttps://kronati.com/api/v1

Create an account

POST/accounts
Deducts from balance

Creates a new email account. The cost is deducted from your balance based on your current pricing tier. You can use any domain available in your account, including custom domains.

Pricing tiers

Body parameters
emailrequired
string
The full email address to create, e.g. user@kronea.app or user@yourdomain.com
passwordrequired
string
Password for the account. Minimum 6 characters.

Request

curl -X POST https://kronati.com/api/v1/accounts \
  -H "Authorization: Bearer sk_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "user@kronea.app",
    "password": "securepassword123"
  }'

Response 201

{
  "success": true,
  "account": {
    "id": "6839f1a2c4d5e6f7a8b9c0d1",
    "email": "user@kronea.app",
    "created_at": "2026-06-07T10:14:00Z"
  },
  "balance_charged": 0.30,
  "balance_remaining": 18.20
}

Bulk create accounts

POST/accounts/bulk
Deducts from balance

Creates up to 500 accounts in a single call. The whole batch is priced with the tiers above, so larger batches get the cheaper per-account rates automatically. The request is all-or-nothing: if any address is already taken or your balance can't cover the full batch, no accounts are created and nothing is charged.

Body parameters
accountsrequired
array
Array of accounts to create (1–500). Each entry is an object with email and password.
accounts[].emailrequired
string
The full email address to create. Duplicates within one request are rejected.
accounts[].passwordrequired
string
Password for the account. Minimum 6 characters.

Request

curl -X POST https://kronati.com/api/v1/accounts/bulk \
  -H "Authorization: Bearer sk_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "accounts": [
      { "email": "user-001@kronea.app", "password": "securepassword123" },
      { "email": "user-002@kronea.app", "password": "securepassword123" }
    ]
  }'

Response 201

{
  "success": true,
  "count": 2,
  "accounts": [
    {
      "id": "6839f1a2c4d5e6f7a8b9c0d1",
      "email": "user-001@kronea.app",
      "created_at": "2026-06-07T10:14:00Z"
    },
    {
      "id": "6839f1a2c4d5e6f7a8b9c0d2",
      "email": "user-002@kronea.app",
      "created_at": "2026-06-07T10:14:00Z"
    }
  ],
  "balance_charged": 0.60,
  "balance_remaining": 17.90
}

On a conflict the ACCOUNT_ALREADY_EXISTS error includes a taken array listing the addresses that already exist.

Get emails

GET/accounts/:email/emails

Returns received emails for the specified account. You can filter by read status, keyword, or date. The account must belong to your API key's owner.

Path parameters
:emailrequired
string
URL-encoded email address of the account, e.g. user%40kronea.app
Query parameters
limit
number
Max emails to return. Default: 20, max: 100.
since
string
ISO 8601 datetime. Only return emails received after this timestamp.
unread
boolean
Set to "true" to return only unread emails.
keyword
string
Filter emails whose subject or body contains this string (case-insensitive).

Request

curl "https://kronati.com/api/v1/accounts/user@kronea.app/emails?limit=10&unread=true&keyword=verify" \
  -H "Authorization: Bearer sk_live_your_key_here"

Response 200

{
  "success": true,
  "account": "user@kronea.app",
  "emails": [
    {
      "id": "6839f2b3c4d5e6f7a8b9c0e2",
      "from": "noreply@service.com",
      "subject": "Your verification code is 482910",
      "received_at": "2026-06-07T10:18:44Z",
      "read": false,
      "body": "Your one-time code is: 482910. Valid for 10 minutes."
    },
    {
      "id": "6839f3c4d5e6f7a8b9c0f3",
      "from": "team@app.io",
      "subject": "Verify your email address",
      "received_at": "2026-06-07T10:15:02Z",
      "read": false,
      "body": "Click the link below to verify your email."
    }
  ]
}

Error codes

402INSUFFICIENT_BALANCEBalance too low to create an account.
409ACCOUNT_ALREADY_EXISTSAn account with this email already exists.
401INVALID_API_KEYThe provided API key is missing, invalid, or revoked.
404ACCOUNT_NOT_FOUNDNo account found for the given email address.
400INVALID_DOMAINThe domain in the email address is not available for your account.
400INVALID_REQUESTA required field is missing or invalid.

Error response shape

{
  "success": false,
  "error": {
    "code": "INSUFFICIENT_BALANCE",
    "message": "Your balance is too low to create an account. Top up at kronati.com/dashboard/topup."
  }
}