v1

EmailSuite API

A REST API for creating disposable inboxes and reading their mail. No API key, no dashboard signup — create an account, exchange it for a token, start reading messages.

https://api.emailsuite.shop/api/v1JSON over HTTPS · CORS enabled

Introduction

Every endpoint lives under /api/v1, accepts and returns JSON, and is reachable from the browser — CORS is open, so you can call it directly from client-side code.

Addresses created through this API are permanent: they never expire, and neither does the mail they receive. That differs from inboxes created on the website, which are disposable by default.

Quick start

Four calls take you from nothing to reading mail.

bash
# 1. Get available domains
curl https://api.emailsuite.shop/api/v1/domains

# 2. Create account
curl -X POST https://api.emailsuite.shop/api/v1/accounts \
  -H "Content-Type: application/json" \
  -d '{"address":"user@yourdomain.com","password":"secret"}'

# 3. Get token
curl -X POST https://api.emailsuite.shop/api/v1/token \
  -H "Content-Type: application/json" \
  -d '{"address":"user@yourdomain.com","password":"secret"}'

# 4. Fetch messages
curl https://api.emailsuite.shop/api/v1/messages \
  -H "Authorization: Bearer TOKEN"

Authentication

All message endpoints require a bearer token from POST /api/v1/token. Pass it in the Authorization header.

bash
curl https://api.emailsuite.shop/api/v1/messages \
  -H "Authorization: Bearer eyJhbGciOi..."

Tokens are valid for 30 days. They are stored hashed, so they cannot be recovered — request a new one if you lose it. The account password is the only long-lived credential.

Domains

GET/api/v1/domains

Returns the hostnames you may create addresses on. No authentication required.

bash
curl https://api.emailsuite.shop/api/v1/domains

Response

json
[
  "example.com"
]

Accounts

POST/api/v1/accounts

Creates a permanent inbox. No authentication required.

FieldTypeDescription
addressstringFull address, e.g. user@yourdomain.com
passwordstringAt least 6 characters. Used to obtain tokens.
bash
curl -X POST https://api.emailsuite.shop/api/v1/accounts \
  -H "Content-Type: application/json" \
  -d '{"address":"user@yourdomain.com","password":"secret"}'

Response · 201

json
{
  "address": "user@yourdomain.com",
  "createdAt": "2026-08-17T09:12:44.000Z",
  "isPermanent": true
}

Address already taken · 409

Taken and reserved addresses come back with ready-to-use alternatives, so you can retry without a second round trip.

json
{
  "error": "That address is already taken",
  "suggestions": [
    "user1@yourdomain.com",
    "user.mail@yourdomain.com",
    "user4821@yourdomain.com"
  ]
}
GET/api/v1/accounts

Returns the authenticated account.

bash
curl https://api.emailsuite.shop/api/v1/accounts \
  -H "Authorization: Bearer TOKEN"

Token

POST/api/v1/token

Exchanges credentials for a bearer token.

bash
curl -X POST https://api.emailsuite.shop/api/v1/token \
  -H "Content-Type: application/json" \
  -d '{"address":"user@yourdomain.com","password":"secret"}'

Response

json
{
  "token": "Zm9vYmFy...",
  "expiresIn": 2592000,
  "address": "user@yourdomain.com"
}

Messages

GET/api/v1/messages

Lists messages newest first. Supports page and limit (max 100).

bash
curl "https://api.emailsuite.shop/api/v1/messages?page=1&limit=30" \
  -H "Authorization: Bearer TOKEN"
json
{
  "messages": [
    {
      "id": "8f2c...",
      "from": "noreply@github.com",
      "to": "user@yourdomain.com",
      "subject": "Verify your email",
      "intro": "Click the link below to confirm...",
      "seen": false,
      "hasAttachments": false,
      "size": 5412,
      "createdAt": "2026-08-17T09:20:10.000Z"
    }
  ],
  "total": 1,
  "page": 1,
  "limit": 30
}
GET/api/v1/messages/{id}

Returns the full message and marks it as read.

bash
curl https://api.emailsuite.shop/api/v1/messages/8f2c... \
  -H "Authorization: Bearer TOKEN"
json
{
  "id": "8f2c...",
  "from": "noreply@github.com",
  "to": "user@yourdomain.com",
  "subject": "Verify your email",
  "text": "Click the link below...",
  "html": "<html>...</html>",
  "seen": true,
  "createdAt": "2026-08-17T09:20:10.000Z",
  "attachments": []
}
DELETE/api/v1/messages/{id}

Permanently deletes a message and its attachments.

bash
curl -X DELETE https://api.emailsuite.shop/api/v1/messages/8f2c... \
  -H "Authorization: Bearer TOKEN"

Attachments

GET/api/v1/messages/{id}/attachments/{attachmentId}

Returns the raw file. Each attachment in a message response carries a ready-made downloadUrl.

bash
curl -O -J https://api.emailsuite.shop/api/v1/messages/8f2c.../attachments/a1b2 \
  -H "Authorization: Bearer TOKEN"

Errors

Errors return a JSON body with an error field.

FieldTypeDescription
400Bad RequestMissing or malformed parameters
401UnauthorizedMissing, invalid or expired token
404Not FoundNo such message, or it belongs to another account
409ConflictAddress already taken — see suggestions
422UnprocessableUnknown domain, or a reserved address
429Too Many RequestsRate limit exceeded

Limits

FieldTypeDescription
Token lifetime30 daysRequest a new token with the account password
Messages per page100Use page to walk further
Account lifetimePermanentAPI accounts and their mail never expire
Attachment size10 MBLarger attachments are dropped on receipt

Questions or a higher limit? Get in touch.