AI API Documentation

AI API Documentation

Throwaway.io provides a small public API — and a remote MCP server for AI agents — so scripts, tools, and AI assistants can generate disposable email addresses and read what arrives in them, without needing to sign up or hold an API key.

Connect to Claude (MCP)

The easiest way for an AI agent to use this: add it as a remote MCP server. In Claude Code, run:

claude mcp add --transport http throwaway-io https://mcp.throwaway.io/mcp

In Claude Desktop or claude.ai, add a remote connector pointing at the same URL:

https://mcp.throwaway.io/mcp

This exposes four tools: list_domains, generate_address, check_inbox (works for any address, not just ones you generated), and get_message. No install, no API key — the same rate limits below apply.

Base URL (REST API)

https://throwaway.io/api/ai/v1

Authentication

None required. The API is public and rate-limited per IP address instead.

Rate limits

300 requests per IP address, per rolling 7-day window — this covers every call, including GET /domains. Every response includes these headers so you can track your usage:

X-RateLimit-Limit: 300
X-RateLimit-Remaining: 287
X-RateLimit-Reset: 2026-08-12T21:30:11+01:00

Once the limit is reached, every request returns:

HTTP 429 Too Many Requests
{
  "status": false,
  "message": "You have reached the maximum of 300 requests allowed per 7 days for this IP address. Try again after 2026-08-12T21:30:11+01:00."
}

Separately, checking inboxes is capped at 300 distinct never-before-seen addresses per IP per rolling 7 days. This only limits checking new addresses you haven't looked up before — re-checking an address you've already checked (e.g. your own generated address) never counts against it, so normal polling for a verification code is unaffected. This exists because GET /addresses/{email}/messages works for any address, not just ones you generated, and this cap keeps that from being usable to enumerate or snoop on other people's inboxes. Hitting it returns:

HTTP 429 Too Many Requests
{
  "status": false,
  "message": "You have checked the maximum of 300 different email addresses allowed per 7 days for this IP address. You can keep re-checking addresses you have already looked up."
}

GET /domains

List the domains currently available for generating an address.

curl https://throwaway.io/api/ai/v1/domains
{
  "status": true,
  "data": {
    "domains": ["example1.com", "example2.com", "..."]
  }
}

POST /addresses

Generate a new disposable email address. Send an empty body (or omit domain) for a random domain, or specify one from the list above.

curl -X POST https://throwaway.io/api/ai/v1/addresses \
  -H "Content-Type: application/json" \
  -d '{"domain": "example1.com"}'
{
  "status": true,
  "data": {
    "email": "[email protected]",
    "domain": "example1.com",
    "expires_at": "2026-08-05T18:00:00.000000Z"
  }
}

Requesting a domain that isn't in the current list returns 422.

GET /addresses/{email}/messages

List messages received by an address — any well-formed address at an available domain, not only ones you generated yourself. New mail can take a few minutes to appear — incoming mail is processed on a short cycle, not instantly.

curl https://throwaway.io/api/ai/v1/addresses/a1b2c3d4e%40example1.com/messages
{
  "status": true,
  "data": {
    "email": "[email protected]",
    "messages": [
      {
        "id": "abc123...",
        "subject": "Confirm your signup",
        "from": "Example App",
        "from_email": "[email protected]",
        "received_at": "2026-08-05 18:03:12",
        "is_seen": false,
        "has_attachments": false
      }
    ]
  }
}

GET /messages/{id}

Get the full content of a single message (the id from the list above), including body and any attachment links.

curl https://throwaway.io/api/ai/v1/messages/abc123...
{
  "status": true,
  "data": {
    "subject": "Confirm your signup",
    "from": "Example App",
    "from_email": "[email protected]",
    "to": "[email protected]",
    "received_at": "2026-08-05 18:03:12",
    "is_seen": true,
    "html": true,
    "content": "<p>Click the link to confirm...</p>",
    "attachments": []
  }
}

Unknown or expired message IDs return 404.


Every call — including GET /domains — counts toward the 300-request-per-week cap for your IP address.