NEW

Create and manage temporary email inboxes. Each inbox has a unique address and automatically expires.

POST/api/inbox
Optional Auth

Generate a new disposable email inbox.

Response 201

FieldTypeDescription
idstringUnique inbox identifier
addressstringFull email address
domainstringEmail domain
expiresAtstringISO 8601 expiration timestamp
createdAtstringISO 8601 creation timestamp
Example Responsejson
{
  "id": "cpxNbXpHRKxH9U6ff8nBE",
  "address": "tmp_8hf2@destroy.network",
  "domain": "destroy.network",
  "expiresAt": "2025-01-30T12:00:00.000Z",
  "createdAt": "2025-01-29T12:00:00.000Z"
}

Errors

StatusMessage
403PLAN_LIMIT_EXCEEDED - active inbox count for the user's plan has been reached
429RATE_LIMIT_EXCEEDED - anonymous hourly creation cap reached
429ANON_ACTIVE_LIMIT - anonymous user already has an active inbox (cap of 1)
429HOURLY_LIMIT_EXCEEDED - signed-in user hit the per-tier hourly creation cap

Rate Limits

Free5 req/hour (signed in), 3 req/hour (anonymous)
ProUnlimited per hour
BusinessUnlimited per hour

Code Examples

# Public (no auth required)
curl -X POST https://destroy.network/api/inbox

# With API key (higher limits)
curl -X POST https://destroy.network/api/inbox \
  -H "Authorization: Bearer sk_live_your_api_key"

When authenticated, inbox is linked to your account.

Anonymous: 3 active inboxes at a time, 3 created per hour per IP.

Free (signed in): 3 active, 5 created per hour.

Pro: 10 active, unlimited creations per hour.

Business: 50 active, unlimited creations per hour.

Error responses include signupCta: true (anonymous) or upgradeCta: true (authenticated free) to signal which CTA to surface.

GET/api/inbox/{id}
Public

Retrieve inbox details by ID.

Path Parameters

NameTypeRequiredDescription
idstringYesInbox ID

Response 200

FieldTypeDescription
idstringUnique inbox identifier
addressstringFull email address
domainstringEmail domain
expiresAtstringISO 8601 expiration timestamp
createdAtstringISO 8601 creation timestamp
extensionCountnumberNumber of extensions used
maxExtensionsnumber | nullMaximum extensions allowed (null = unlimited)
canExtendbooleanWhether more extensions are available
forwardTostring | nullEmail address for forwarding (Pro/Business only)
canForwardbooleanWhether forwarding is available on user's plan
Example Responsejson
{
  "id": "cpxNbXpHRKxH9U6ff8nBE",
  "address": "tmp_8hf2@destroy.network",
  "domain": "destroy.network",
  "expiresAt": "2025-01-30T12:00:00.000Z",
  "createdAt": "2025-01-29T12:00:00.000Z",
  "extensionCount": 0,
  "maxExtensions": 1,
  "canExtend": true,
  "forwardTo": null,
  "canForward": true
}

Errors

StatusMessage
404Inbox not found
410Inbox has expired

Rate Limits

Free60 req/min
Pro120 req/min
Business300 req/min

Code Examples

curl https://destroy.network/api/inbox/cpxNbXpHRKxH9U6ff8nBE
DELETE/api/inbox/{id}
Public

Permanently delete an inbox and all its messages.

Path Parameters

NameTypeRequiredDescription
idstringYesInbox ID

Response 200

Example Responsejson
{
  "success": true
}

Errors

StatusMessage
404Inbox not found

Rate Limits

Free10 req/min
Pro30 req/min
Business60 req/min

Code Examples

curl -X DELETE https://destroy.network/api/inbox/cpxNbXpHRKxH9U6ff8nBE
POST/api/inbox/{id}/extend
Optional Auth

Extend the expiration time of an inbox by 10 minutes.

Path Parameters

NameTypeRequiredDescription
idstringYesInbox ID

Response 200

FieldTypeDescription
extensionCountnumberNumber of extensions used
maxExtensionsnumber | nullMaximum extensions (null = unlimited)
canExtendbooleanWhether more extensions are available
Example Responsejson
{
  "id": "cpxNbXpHRKxH9U6ff8nBE",
  "address": "tmp_8hf2@destroy.network",
  "domain": "destroy.network",
  "expiresAt": "2025-01-30T12:10:00.000Z",
  "createdAt": "2025-01-29T12:00:00.000Z",
  "extensionCount": 1,
  "maxExtensions": 1,
  "canExtend": false
}

Errors

StatusMessage
403EXTENSION_LIMIT_REACHED - count cap hit (Free / anonymous: 1 extension per inbox)
403LIFETIME_LIMIT_REACHED - Pro/Business only: inbox aged past the plan's total lifetime ceiling (1 days Pro, 3 days Business)
429EXTEND_TOO_EARLY - Pro/Business only: cooldown active, response includes `availableAt` so the UI can show a countdown
404Inbox not found

Rate Limits

Free1 total extension per inbox (no cooldown, no time ceiling)
ProUnlimited (cooldown: <=15 min remaining; ceiling: 1 days)
BusinessUnlimited (cooldown: <=30 min remaining; ceiling: 3 days)

Code Examples

# Public (1 extension limit)
curl -X POST https://destroy.network/api/inbox/cpxNbXpHRKxH9U6ff8nBE/extend

# With API key (unlimited on Pro/Business)
curl -X POST https://destroy.network/api/inbox/cpxNbXpHRKxH9U6ff8nBE/extend \
  -H "Authorization: Bearer sk_live_your_api_key"

Free / unauthenticated: 1 extension allowed of 10 minutes. The single count cap is the sole gate; there is no cooldown or lifetime ceiling on this tier. After the one allowed extension, canExtend becomes false and a follow-up call returns 403 EXTENSION_LIMIT_REACHED.

Pro: unlimited extensions of 30 minutes each. Cooldown: must have <=15 minutes remaining before each extend. Hard ceiling: 1 days total per inbox.

Business: unlimited extensions of 60 minutes each. Cooldown: must have <=30 minutes remaining before each extend. Hard ceiling: 3 days total per inbox.

After a successful extend on Pro/Business the cooldown is active, so canExtend: false is returned with extendAvailableAt set to the unlock time. On Free, canExtend: false reflects the count cap rather than a cooldown, and extendAvailableAt is null.

PATCH/api/inbox/{id}
Auth Required

Configure email forwarding for an inbox. When enabled, all incoming emails are automatically forwarded to the specified address.

Path Parameters

NameTypeRequiredDescription
idstringYesInbox ID

Request Body

FieldTypeRequiredDescription
forwardTostring | nullYesEmail address to forward to, or null to disable
Example Requestjson
{
  "forwardTo": "your@email.com"
}

Response 200

FieldTypeDescription
forwardTostring | nullCurrent forwarding address
messagestringConfirmation message
Example Responsejson
{
  "id": "cpxNbXpHRKxH9U6ff8nBE",
  "address": "tmp_8hf2@destroy.network",
  "domain": "destroy.network",
  "forwardTo": "your@email.com",
  "expiresAt": "2025-01-30T12:00:00.000Z",
  "createdAt": "2025-01-29T12:00:00.000Z",
  "message": "Emails will now be forwarded to your@email.com"
}

Errors

StatusMessage
401Email forwarding requires a logged-in account
403Email forwarding is available on Pro and Business plans
400INVALID_FORWARD_TARGET - target is one of our own disposable inboxes (loop) or a known third-party temporary email service (amplifier)
404Inbox not found

Rate Limits

FreeNot available
Pro10 req/min
Business30 req/min

Code Examples

# Enable forwarding
curl -X PATCH https://destroy.network/api/inbox/cpxNbXpHRKxH9U6ff8nBE \
  -H "Authorization: Bearer sk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"forwardTo": "your@email.com"}'

# Disable forwarding
curl -X PATCH https://destroy.network/api/inbox/cpxNbXpHRKxH9U6ff8nBE \
  -H "Authorization: Bearer sk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"forwardTo": null}'

Requires authentication - anonymous inboxes cannot use forwarding.

Only available on Pro and Business plans.

Set forwardTo to null to disable forwarding.

Forwarding happens after the email is stored, so you keep a copy.

Each forward target is capped at 50 forwards per hour to prevent your inbox being used as an amplifier toward third parties.

Per-inbox inbound delivery cap (rejects messages past the cap): 200/hr anonymous, 500/hr Free signed-in, 1,000/hr Pro, 5,000/hr Business.

GET/api/inbox/{id}/stream
API Key

Subscribe to real-time updates via Server-Sent Events. New messages are pushed immediately. API access requires Business plan.

Path Parameters

NameTypeRequiredDescription
idstringYesInbox ID

Response 200

Example Responsejson
event: message
data: {"id":"Qm8fK2xvJN3pTa7bR1wYZ","fromAddress":"sender@example.com","subject":"Hello"}

event: heartbeat
data: {"timestamp":"2025-01-29T12:00:00.000Z"}

Errors

StatusMessage
403Real-time streaming via API is available on Business plan only
404Inbox not found
410Inbox has expired

Rate Limits

FreeNot available
ProWeb UI only
Business50 concurrent

Code Examples

# Stream messages in terminal (keeps connection open)
curl -N https://destroy.network/api/inbox/cpxNbXpHRKxH9U6ff8nBE/stream

API access (Bearer token): Business plan only.

Web UI (session): Pro and Business plans.

Use EventSource API in JavaScript.

Heartbeat sent every 3 seconds to keep connection alive.

GET/api/inbox/{id}/aliases
Auth Required

Get all aliases for an inbox. Aliases are alternative email addresses that forward to the same inbox.

Path Parameters

NameTypeRequiredDescription
idstringYesInbox ID

Response 200

FieldTypeDescription
idstringAlias ID
aliasAddressstringFull alias email address
createdAtstringISO 8601 creation timestamp
Example Responsejson
[
  {
    "id": "als_abc123",
    "aliasAddress": "my-alias@destroy.network",
    "createdAt": "2025-01-30T12:00:00.000Z"
  },
  {
    "id": "als_def456",
    "aliasAddress": "shopping@destroy.network",
    "createdAt": "2025-01-30T11:00:00.000Z"
  }
]

Errors

StatusMessage
401Aliases require a logged-in account
404Inbox not found

Rate Limits

FreeNot available
Pro60 req/min
Business120 req/min

Code Examples

curl https://destroy.network/api/inbox/cpxNbXpHRKxH9U6ff8nBE/aliases \
  -H "Authorization: Bearer sk_live_your_api_key"

Requires authentication - only inbox owner can list aliases.

Only available on Pro and Business plans.

POST/api/inbox/{id}/aliases
Auth Required

Create a new alias for an inbox. Emails sent to this alias will appear in the parent inbox.

Path Parameters

NameTypeRequiredDescription
idstringYesInbox ID

Request Body

FieldTypeRequiredDescription
aliasstringYesAlias name (lowercase alphanumeric with hyphens, e.g. 'my-alias')
Example Requestjson
{
  "alias": "my-shopping"
}

Response 201

FieldTypeDescription
idstringAlias ID
aliasAddressstringFull alias email address
inboxIdstringParent inbox ID
createdAtstringISO 8601 creation timestamp
messagestringConfirmation message
Example Responsejson
{
  "id": "als_abc123",
  "aliasAddress": "my-shopping@destroy.network",
  "inboxId": "cpxNbXpHRKxH9U6ff8nBE",
  "createdAt": "2025-01-30T12:00:00.000Z",
  "message": "Alias my-shopping@destroy.network created. Emails to this address will appear in your inbox."
}

Errors

StatusMessage
401Aliases require a logged-in account
403Inbox aliases are available on Pro and Business plans
403You have reached the maximum of X aliases for this inbox
400INVALID_ALIAS - alias is a reserved name (admin, support, noreply, etc.)
404Inbox not found
409This alias is already in use
429RESOURCE_LIMIT_EXCEEDED - more than 30 aliases created in the last hour

Rate Limits

FreeNot available
Pro5 per inbox, 30 created per hour
Business25 per inbox, 30 created per hour

Code Examples

curl -X POST https://destroy.network/api/inbox/cpxNbXpHRKxH9U6ff8nBE/aliases \
  -H "Authorization: Bearer sk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"alias": "my-shopping"}'

Alias must be lowercase alphanumeric with optional hyphens (not at start/end).

Reserved names (admin, support, noreply, etc.) are blocked to prevent phishing.

Pro plan: 5 aliases per inbox. Business plan: 25 aliases per inbox.

Per-account creation cap of 30 aliases per hour to prevent abuse cycles.

The full address is built using the inbox's domain.

DELETE/api/inbox/{id}/aliases/{aliasId}
Auth Required

Delete an alias from an inbox. Emails to this alias will no longer be received.

Path Parameters

NameTypeRequiredDescription
idstringYesInbox ID
aliasIdstringYesAlias ID

Response 200

Example Responsejson
{
  "success": true,
  "message": "Alias my-shopping@destroy.network deleted."
}

Errors

StatusMessage
404Inbox not found
404Alias not found

Rate Limits

FreeNot available
Pro30 req/min
Business60 req/min

Code Examples

curl -X DELETE https://destroy.network/api/inbox/cpxNbXpHRKxH9U6ff8nBE/aliases/als_abc123 \
  -H "Authorization: Bearer sk_live_your_api_key"