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).
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
| Parameter | Type | Default & allowed | Description |
|---|---|---|---|
domain | string | allowed: 1 – 63 example: acme.test | 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). |
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).
| Parameter | Type | Default & allowed | Description |
|---|---|---|---|
count | int | default: 10 allowed: 1 – 100 example: 3 | How many records to generate (1–100). |
seed | int | example: 42 | Deterministic output: the same seed always returns the same records. Omit for random (the used seed is echoed in meta.seed). |
fields | list | example: email,username | Return only these fields (comma-separated). Mutually exclusive with 'exclude'. |
exclude | list | example: domain | Return all fields except these (comma-separated). |
format | enum | default: json allowed: json | ndjson | csv example: csv | Response format: json envelope, ndjson (one record per line) or csv. |
pretty | boolean | default: false example: true | Pretty-print the JSON response. |
unwrap | boolean | default: false example: true | Drop the envelope: return the raw array/object without data/meta wrapper. |
count int How many records to generate (1–100).
seed int Deterministic output: the same seed always returns the same records. Omit for random (the used seed is echoed in meta.seed).
fields list Return only these fields (comma-separated). Mutually exclusive with 'exclude'.
exclude list Return all fields except these (comma-separated).
format enum Response format: json envelope, ndjson (one record per line) or csv.
pretty boolean Pretty-print the JSON response.
unwrap boolean Drop the envelope: return the raw array/object without data/meta wrapper.
| Field | Type | Description | Example |
|---|---|---|---|
email | string | Full address, username@domain — non-deliverable unless you override the domain. | maria.ortiz@example.net |
username | string | Local part derived from a fake name: ASCII-only, lowercase, first.last. | maria.ortiz |
domain | string | Domain used for this record — your ?domain= override, or one of the rotating reserved defaults. | example.net |
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
/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"
}
} /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"
}
} /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"
}
} 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.
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.
Yes — domain=yourapp.dev stamps every generated address with your domain while keeping the name-derived usernames.
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.
Complete fake people — name, age-consistent birth date, email, phone, job and address — with working filters for gender, age range and email domain.
Random usernames in four distinct styles — handle, gamer, professional, anonymous — with a maxLength that is honored by construction, never by truncation.
Random internet building blocks — valid IPv4/IPv6 addresses, locally-administered MACs, non-resolvable .test domains and URLs, slugs, ports and TLDs.
Clearly fake API keys, JWTs and hex/base64 secrets — structurally valid enough to exercise parsers and middleware, cryptographically meaningless by design.
Generate channel-specific notifications with safe recipients, bounded send attempts and exact sent/delivered/read/failure dates.
Validate email syntax against RFC 5322, RFC 5321 transport limits or the HTML input profile — local/domain split and the exact rule that failed. No DNS, ever.