Skip to main content

Fake Email Address API

MOCK DATA

Fake email addresses with name-derived usernames on guaranteed non-deliverable domains (example.com/net/org and .test) — or stamp your own with ?domain=.

Generated test data for fixtures and development

Base URL
/api/emails
Category
People
Capabilities
1 route Seedable
Last updated
July 29, 2026

GET /api/emails

Live requestRuns against the public API
No key required
GET/api/emails?count=5&seed=42

Request parameters

Domain stamped onto every address (e.g. acme.test); lowercased, 1–63 chars. Omit for rotating non-deliverable defaults (example.com/net/org and generated .test names).

Advanced response options7 options

How many records to generate (1–100).

Deterministic output: the same seed always returns the same records. Omit for random (the used seed is echoed in meta.seed).

Return only these fields (comma-separated). Mutually exclusive with 'exclude'.

Return all fields except these (comma-separated).

Response format: json envelope, ndjson (one record per line) or csv.

Pretty-print the JSON response.

Drop the envelope: return the raw array/object without data/meta wrapper.

Response

Example parameters are ready. Send the request to inspect the live response.

Route reference

Code samples Ready-to-copy requests in 4 languages
Choose a code sample language
curl "https://randomapi.dev/api/emails?count=5&seed=42"
const res = await fetch("https://randomapi.dev/api/emails?count=5&seed=42");
const { data, meta } = await res.json();
import requests

data = requests.get("https://randomapi.dev/api/emails?count=5&seed=42").json()["data"]
$json = json_decode(file_get_contents(
  "https://randomapi.dev/api/emails?count=5&seed=42"
), true);
$data = $json["data"];
Parameters Route-specific request inputs 1
domain string

Domain stamped onto every address (e.g. acme.test); lowercased, 1–63 chars. Omit for rotating non-deliverable defaults (example.com/net/org and generated .test names).

allowed: 1 – 63
example: domain=acme.test
Universal parameters Shared response and formatting options 7
count int

How many records to generate (1–100).

default: 10
allowed: 1 – 100
example: count=3
seed int

Deterministic output: the same seed always returns the same records. Omit for random (the used seed is echoed in meta.seed).

example: seed=42
fields list

Return only these fields (comma-separated). Mutually exclusive with 'exclude'.

example: fields=email,username
exclude list

Return all fields except these (comma-separated).

example: exclude=domain
format enum

Response format: json envelope, ndjson (one record per line) or csv.

default: json
allowed: json | ndjson | csv
example: format=csv
pretty boolean

Pretty-print the JSON response.

default: false
example: pretty=true
unwrap boolean

Drop the envelope: return the raw array/object without data/meta wrapper.

default: false
example: unwrap=true
Response schema Fields returned in each record 3
email string

Full address, username@domain — non-deliverable unless you override the domain.

example: maria.ortiz@example.net

username string

Local part derived from a fake name: ASCII-only, lowercase, first.last.

example: maria.ortiz

domain string

Domain used for this record — your ?domain= override, or one of the rotating reserved defaults.

example: example.net

Documented examples

Build-generated requests and complete responses
3
Five reproducible addresses
GET /api/emails?count=5&seed=42
{
  "data": [
    {
      "email": "kaylie.gorczanyconsidine@example.org",
      "username": "kaylie.gorczanyconsidine",
      "domain": "example.org"
    },
    {
      "email": "waino.marvin@example.com",
      "username": "waino.marvin",
      "domain": "example.com"
    },
    {
      "email": "hailee.streich@gummy-boyfriend.test",
      "username": "hailee.streich",
      "domain": "gummy-boyfriend.test"
    },
    {
      "email": "otis.hodkiewicz@example.net",
      "username": "otis.hodkiewicz",
      "domain": "example.net"
    },
    {
      "email": "melisa.funk@kosher-luck.test",
      "username": "melisa.funk",
      "domain": "kosher-luck.test"
    }
  ],
  "meta": {
    "endpoint": "emails",
    "count": 5,
    "seed": 42,
    "params": {},
    "generatedAt": "2026-07-29T08:13:22.000Z"
  }
}
Everything on your own test domain
GET /api/emails?domain=acme.test&count=10
{
  "data": [
    {
      "email": "kaylie.gorczanyconsidine@acme.test",
      "username": "kaylie.gorczanyconsidine",
      "domain": "acme.test"
    },
    {
      "email": "waino.marvin@acme.test",
      "username": "waino.marvin",
      "domain": "acme.test"
    },
    {
      "email": "hailee.streich@acme.test",
      "username": "hailee.streich",
      "domain": "acme.test"
    },
    {
      "email": "otis.hodkiewicz@acme.test",
      "username": "otis.hodkiewicz",
      "domain": "acme.test"
    },
    {
      "email": "melisa.funk@acme.test",
      "username": "melisa.funk",
      "domain": "acme.test"
    },
    {
      "email": "kayden.blick@acme.test",
      "username": "kayden.blick",
      "domain": "acme.test"
    },
    {
      "email": "lucille.strosincrooks@acme.test",
      "username": "lucille.strosincrooks",
      "domain": "acme.test"
    },
    {
      "email": "joe.beier@acme.test",
      "username": "joe.beier",
    …
    "generatedAt": "2026-07-29T08:13:22.000Z"
  }
}
Plain list of just the addresses
GET /api/emails?fields=email&count=20
{
  "data": [
    {
      "email": "kaylie.gorczanyconsidine@example.org"
    },
    {
      "email": "waino.marvin@example.com"
    },
    {
      "email": "hailee.streich@gummy-boyfriend.test"
    },
    {
      "email": "otis.hodkiewicz@example.net"
    },
    {
      "email": "melisa.funk@kosher-luck.test"
    },
    {
      "email": "kayden.blick@example.net"
    },
    {
      "email": "lucille.strosincrooks@example.net"
    },
    {
      "email": "joe.beier@ample-unblinking.test"
    },
    {
      "email": "dorcas.funkwitting@example.com"
    },
    {
      "email": "rubie.stamm@meaty-loaf.test"
    },
    {
      "email": "abdul.rodriguez@normal-morning.test"
    },
    {
      "email": "gus.schmidt@example.org"
    },
    {
      "email": "diana.brakus@example.org""generatedAt": "2026-07-29T08:13:22.000Z"
  }
}

About this API

Coverage & behavior

Generates believable email addresses that can never reach a real inbox. Each username is derived from a fake person's name — ASCII-slugified, lowercase, first.last style — so maria.ortiz@example.net reads naturally in any UI, log or fixture, and apostrophes or accents in the underlying name (O'Brien, Zoë) never leak into the address.

Every default domain is guaranteed non-deliverable. Records rotate between the RFC 2606 reserved domains example.com / example.net / example.org and generated <word>-<word>.test names (the .test TLD is reserved by the same RFC), so no default address can ever resolve to a real mail server or accidentally email a real person.

Need everything on one domain? Pass ?domain=acme.test and it is stamped onto every record — lowercased, and echoed back in meta.params. Combine with seed for byte-identical addresses on every run, or fields=email&format=csv for a plain importable list.

Use it for

  • Seed signup, auth and CRM test fixtures with addresses that can never email a real person
  • Fill inbox and contact-list UI mockups with believable senders
  • Export bulk test addresses for import flows (?domain=acme.test&fields=email&format=csv&count=100)

Frequently asked questions

Can these emails accidentally receive mail?

No — by default every address uses reserved documentation domains (example.com/net/org and .test, per RFC 2606) that can never deliver, so seeding a staging database is risk-free.

Can I use my own domain?

Yes — domain=yourapp.dev stamps every generated address with your domain while keeping the name-derived usernames.

Do the usernames look real?

They're derived from generated first/last names with common separator patterns, so a list reads like a real user table rather than random strings.

Standards & references