Developer API
Create email accounts and read incoming messages programmatically. Account creation is charged from your balance at the standard rate.
All requests require a Bearer token in the Authorization header. Generate an API key in your dashboard.
Authorization: Bearer sk_live_your_key_here
/accountsCreates 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
emailrequiredpasswordrequiredRequest
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
}/accounts/bulkCreates 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.
accountsrequiredaccounts[].emailrequiredaccounts[].passwordrequiredRequest
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.
/accounts/:email/emailsReturns 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.
:emailrequiredlimitsinceunreadkeywordRequest
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."
}
]
}INSUFFICIENT_BALANCEBalance too low to create an account.ACCOUNT_ALREADY_EXISTSAn account with this email already exists.INVALID_API_KEYThe provided API key is missing, invalid, or revoked.ACCOUNT_NOT_FOUNDNo account found for the given email address.INVALID_DOMAINThe domain in the email address is not available for your account.INVALID_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."
}
}