🎄 New Year's Special: Use code NEWYEARS for 50% off 🎉

Pay by card (Stripe) or cryptocurrency

API Documentation

Build on top of tempmail.fish

Automate inbox creation, pull message data, and manage premium aliases through a simple REST API. Anonymous usage is supported out of the box, with advanced features unlocked for premium customers.

Base URL
https://api.tempmail.fish

We’ve processed 0 emails and generated 0 disposable inboxes so far.

Receive-only inboxes
Generate disposable inboxes instantly and poll for incoming mail using lightweight JSON responses.
Dual authentication
Anonymous inboxes return an auth key for follow-up requests, while premium plans rely on secure JWT cookies issued by the dashboard.
Privacy first
Inboxes are isolated, disposable, and never send outbound email - ideal for testing flows, sign-ups, and anonymized workflows.
Quick start example
Create a disposable inbox in your preferred language
// Create a new disposable inbox
const createResponse = await fetch('https://api.tempmail.fish/emails/new-email', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' }
});

const { email, authKey } = await createResponse.json();
console.log('Created inbox:', email);

// Fetch emails for the inbox
const emailsResponse = await fetch(
  `https://api.tempmail.fish/emails/emails?emailAddress=${email}`,
  { headers: { 'Authorization': authKey } }
);

const emails = await emailsResponse.json();
console.log('Emails:', emails);
import requests

# Create a new disposable inbox
response = requests.post('https://api.tempmail.fish/emails/new-email')
data = response.json()

email = data['email']
auth_key = data['authKey']
print(f'Created inbox: {email}')

# Fetch emails for the inbox
emails_response = requests.get(
    f'https://api.tempmail.fish/emails/emails',
    params={'emailAddress': email},
    headers={'Authorization': auth_key}
)

emails = emails_response.json()
print(f'Emails: {emails}')
# Create a new disposable inbox
curl -X POST https://api.tempmail.fish/emails/new-email \
  -H "Content-Type: application/json"

# Response
# {
#   "email": "[email protected]",
#   "authKey": "kv4i1u8sdl3",
#   "emails": []
# }

# Fetch emails for the inbox
curl "https://api.tempmail.fish/emails/[email protected]" \
  -H "Authorization: kv4i1u8sdl3"
Get started in minutes
Follow this quick flow to pull messages programmatically.
  1. 1. Create inbox

    Call POST /emails/new-email to receive an inbox address plus an authKey.

  2. 2. Poll for messages

    Use GET /emails/emails with the inbox address and authentication of your choice.

  3. 3. Clean up

    Delete the inbox using DELETE /emails/email once you have processed the messages.

Anonymous usage is ideal for quick automations. The auth key returned on inbox creation should be supplied in the Authorization header on subsequent calls.

const res = await fetch('https://api.tempmail.fish/emails/new-email', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' }
});
const { email, authKey } = await res.json();

// Fetch emails
const emails = await fetch(
  `https://api.tempmail.fish/emails/emails?emailAddress=${email}`,
  { headers: { 'Authorization': authKey } }
).then(r => r.json());
import requests

res = requests.post('https://api.tempmail.fish/emails/new-email')
data = res.json()

# Fetch emails
emails = requests.get(
    'https://api.tempmail.fish/emails/emails',
    params={'emailAddress': data['email']},
    headers={'Authorization': data['authKey']}
).json()
# Create inbox
curl -X POST https://api.tempmail.fish/emails/new-email \
  -H "Content-Type: application/json"

# Response: { "email": "[email protected]", "authKey": "kv4i1u8sdl3", "emails": [] }

# Fetch emails
curl "https://api.tempmail.fish/emails/[email protected]" \
  -H "Authorization: kv4i1u8sdl3"
Endpoint reference
Every endpoint responds with JSON. Endpoints are grouped by authentication type.
Anonymous endpointsNo authentication required

AuthKey endpointsRequires Authorization header

JWT endpointsRequires authentication

Need something else?
Billing upgrades, higher usage limits, and webhook requests go through the support team.

Open the dashboard to manage subscriptions or reach out if you need extended message retention or dedicated infrastructure. We review every request within one business day.