A public JSON API for fictional identities, addresses, names and test IMEI numbers. No API key, no sign-up, no quota to apply for — just call it.
Version 1.0.0 · Updated July 2026
In short
The FakeName data API is a free, unauthenticated JSON API that returns fictional identities, postal addresses, personal names and Luhn-valid test IMEI numbers for software testing, QA and database seeding.
•No API key and no sign-up: every endpoint is an anonymous HTTP GET.
•CORS is open to all origins, so it can be called directly from browser JavaScript.
•Passing a "seed" parameter makes the response reproducible — the same seed always returns byte-identical records, so API output can be committed as a test fixture.
•Records cover 36 countries with locale-correct names, address formats, phone formats and postal codes.
•The rate limit is roughly 120 requests per minute per IP address; there is no daily cap.
•Every record is fictional and every response is labelled as such in meta.fictional.
Quick start
One request, no setup. This returns a single complete US identity as JSON:
curl — one identity
curl "https://fakenamely.com/api/v1/identity"
Add count for more records, country to change the locale, and seed to make the result reproducible. Nothing else is required — there is no registration step and no key to attach.
Endpoints
Endpoint
Returns
Max per request
/api/v1/identity
Complete fictional identities — An array of nested identity objects.
100
/api/v1/address
Fictional postal addresses — An array of address objects.
100
/api/v1/name
Fictional personal names — An array of name objects.
100
/api/v1/field
One generated field at a time — An array of objects with type, value and an optional context object.
100
/api/v1/validate
Checksum and format validation — An object with type, input, valid and an optional details object.
1
/api/v1/imei
Luhn-valid test IMEI numbers — An array of objects with imei, rbi, tac, serial, checkDigit and body.
1000
All endpoints are GET-only and read-only. Responses use the same envelope; csv and sql return text instead.
Parameters
Parameter
Type
Default
What it does
count
integer
1
How many records to return. Larger datasets are available from the bulk exporter, which does up to 100,000 rows.
seed
string
random
Any string. The same seed always returns byte-identical records, so a seeded request is reproducible and safe to commit as a test fixture. Omit it for fresh random data.
country
string
united-states
Country slug or ISO-3166 alpha-2 code. Controls the name pools, address format, phone format, postal-code shape and currency.
gender
male | female
random per record
Pins the given-name pool.
state
string
random per record
US state slug or two-letter code. Pins the locality so the ZIP code and area code are valid for that state. Only valid when country is the United States.
fields
string
the endpoint's nested shape
Comma-separated column keys. Switches the response from nested objects to flat, column-selected rows — the same column set the bulk exporter uses.
format
json | csv | sql
json
Response format. csv and sql return text rather than the JSON envelope; sql emits INSERT statements against an `identities` table.
type
string
—
Which kind to generate or validate. The error message for an unknown value lists every supported one, so the endpoint is discoverable without the docs.
value
string
—
The value to check, up to 256 characters. It is validated and discarded — nothing is logged or stored.
Every parameter is optional. Each endpoint accepts a subset — see the per-endpoint notes below.
Endpoint reference
GET /api/v1/identity
A full profile per record: name, address with a valid postal code, phone, email, username, birthday, physical traits, masked national-ID placeholder, sandbox payment-card format and vehicle. This is the same engine output the site's own generator renders, so a seed replayed here matches the page exactly.
Accepts:count, seed, country, gender, state, fields, format
Street, city, region, postal code, country and coordinates. The locality is real and the postal code is genuinely valid for it; only the house number is randomized — so the record passes region validation without resolving to a real occupant.
Accepts:count, seed, country, state, fields, format
A single field per record — phone, email, username, password, guid, zip, coordinates, company or imei — using the same implementation as the corresponding generator page, so a seed replayed against either gives the same value. Values come back bare, with any surrounding context (the state a ZIP belongs to, for instance) in a separate object rather than embedded in the string.
Verify a value against the same pure validators the on-site tool pages use: luhn, card, iban, aba, vin and password. Returns a verdict plus structured detail — the detected card scheme, the expected VIN check digit, a password's score and character classes. National-identity validators are deliberately not exposed here. Nothing submitted is logged or stored.
A 15-digit IMEI per record, plus its structural decomposition — reporting body identifier, type allocation code, serial and Luhn check digit — so validation tests can assert against the parts, not just the string. Values use a reserved test TAC and are not assigned to any real device.
Accepts:count, seed
Example
curl "https://fakenamely.com/api/v1/imei?count=3"
Client examples
Each sample runs unmodified — there is no key to paste in and no placeholder to replace.
curl
# Ten German female identities
curl "https://fakenamely.com/api/v1/identity?count=10&country=de&gender=female"
# Reproducible: the same seed always returns the same records
curl "https://fakenamely.com/api/v1/identity?count=5&seed=checkout-suite-v3"
# 50 California addresses as CSV, straight to a file
curl "https://fakenamely.com/api/v1/address?count=50&state=CA&format=csv" -o addresses.csv
JavaScript (fetch)
const res = await fetch(
"https://fakenamely.com/api/v1/identity?count=5&country=jp",
);
const { success, data, error } = await res.json();
if (!success) throw new Error(error);
for (const person of data) {
console.info(person.name.full, person.address.city);
}
Python (requests)
import requests
res = requests.get(
"https://fakenamely.com/api/v1/identity",
params={"count": 5, "country": "gb", "seed": "fixtures-2026"},
timeout=10,
)
res.raise_for_status()
payload = res.json()
if not payload["success"]:
raise RuntimeError(payload["error"])
for person in payload["data"]:
print(person["name"]["full"], person["address"]["postalCode"])
The same checksum rules that produce a value can verify one, and if you are testing your own validation you usually want both halves. /api/v1/validate runs the identical pure functions behind the on-site validator tools, so an API verdict and a page verdict can never disagree. Nothing you submit is logged or stored.
Validation
# Is this IBAN structurally valid?
curl "https://fakenamely.com/api/v1/validate?type=iban&value=GB82WEST12345698765432"
# Card number: Luhn check plus scheme detection
curl "https://fakenamely.com/api/v1/validate?type=card&value=4242424242424242"
# VIN, returning the check digit it should have had
curl "https://fakenamely.com/api/v1/validate?type=vin&value=1HGCM82633A004352"
The national-identity validators (SSN, SIN, NINO) exist as tool pages but are deliberately not exposed here. Making government-identity checking programmatically scriptable is a different act from putting one behind a form; this endpoint is for developer utilities — checksum and format rules that tell you a value is well-formed and nothing more.
Response format
Every JSON response uses the same envelope, so a client can branch on success alone. data holds the records, error is null on success, and meta carries the seed that produced the payload plus the fictional-data label. On an error, data is null and error explains which parameter was wrong and what values are accepted.
Generation is a pure function of the seed. The same seed and parameters always return byte-identical records — on this API, in the on-site generator, and in the bulk exporter, because all three run the same engine. Record i of a multi-record response uses the row seed {seed}#{i}.
That makes API output usable where random data normally is not. A seeded request can be committed as a test fixture, referenced in a bug report, or used in a snapshot test that has to produce the same diff on every run. Seeded requests are also cached at the edge, so replaying a fixture is fast. Omit the seed and you get fresh random data with a freshly minted seed returned in meta.seed — keep that value if you want to reproduce the batch later.
Rate limits and fair use
The limit is approximately 120 requests per minute per IP address, with no daily cap and no key to apply for. It is stated approximately on purpose: the limiter is per-instance and best-effort, so the exact ceiling moves with how many instances are serving traffic. Treat it as a courtesy threshold rather than a contract, and handle 429 by honouring the Retry-After header.
For datasets larger than a single request, do not loop the API — use the bulk exporter, which builds up to 100,000 rows in the browser and downloads them as CSV, JSON or SQL with no request at all. It is faster than paginating and it costs this site nothing to serve.
The API is free to use, including in commercial projects. Attribution is appreciated but not required. There is no paid tier, and no plan to add one — the site is funded by advertising on the pages, which is why the data can stay free.
OpenAPI specification and tooling
The full contract is published as an OpenAPI 3.1 document at /api/openapi.json. Import that URL into Postman, Insomnia, Bruno, Hoppscotch or an OpenAPI code generator to get a typed client without writing any request code. The spec is generated from the same definitions that drive this page, so it cannot describe an endpoint that does not exist.
Using the spec
# Import into any OpenAPI-aware tool
curl "https://fakenamely.com/api/openapi.json" -o fakename-openapi.json
# Or generate a typed client (example: TypeScript)
npx openapi-typescript "https://fakenamely.com/api/openapi.json" -o fakename.d.ts
Selecting columns for CSV and SQL
Pass fields to flatten the response into column-selected rows, and format=csv or format=sql to get text instead of JSON. SQL output emits INSERT statements against an identities table, which is usually enough to seed a development database directly from a shell pipe. There are 32 available column keys:
# Seed a dev database straight from the API
curl "https://fakenamely.com/api/v1/identity?count=100&seed=dev-seed&format=sql&fields=fullName,email,city,postalCode" \
| psql "$DATABASE_URL"
Supported countries
Pass either the slug or the ISO-3166 alpha-2 code. The country controls the name pools, address format, regional subdivision label, phone format, postal-code shape and currency — not just a country string appended to a US-shaped record.
united-states (us), united-kingdom (gb), canada (ca), australia (au), germany (de), france (fr), spain (es), mexico (mx), italy (it), japan (jp), south-korea (kr), china (cn), brazil (br), netherlands (nl), sweden (se), norway (no), denmark (dk), finland (fi), poland (pl), russia (ru), turkey (tr), greece (gr), romania (ro), hungary (hu), ukraine (ua), vietnam (vn), indonesia (id), thailand (th), israel (il), austria (at), switzerland (ch), india (in), ireland (ie), portugal (pt), taiwan (tw), belgium (be)
What this data is not for
Every record is synthetic and describes no real person. National-ID placeholders are returned masked and use never-issued number ranges; payment-card numbers come from published sandbox test ranges and cannot be charged; phone numbers use reserved fiction ranges; IMEI values use a reserved test type-allocation code and are not assigned to any device.
Use it for software testing, QA fixtures, database seeding, demos, documentation, screenshots and load testing. Do not use it for fraud, impersonation, shipping, billing, KYC, tax, government, employment, banking, medical or legal identity purposes, or anywhere accurate real information is required. Every response repeats this in meta.disclaimer so the constraint travels with the data.
Frequently asked questions
Is the fake data API really free?+
Yes. Every endpoint is free, needs no API key and no sign-up, and there is no paid tier. The site is funded by advertising on its pages, which is what lets the data itself stay free — including in commercial projects.
Do I need an API key or an account?+
No. There is nothing to register for and no token to attach. Every endpoint is an anonymous HTTP GET, so a curl one-liner or a browser address bar is a complete client.
Can I call the API from browser JavaScript?+
Yes. CORS is open to all origins with GET and OPTIONS allowed, so fetch() works from any page, CodePen or local file without a proxy. That is deliberate: there is no auth to leak and no user data to protect, because every response is synthetic.
How do I get the same fake data every time?+
Pass a seed parameter, for example seed=fixtures-2026. Generation is a pure function of the seed, so the same seed and parameters always return byte-identical records. That makes a response safe to commit as a test fixture or cite in a bug report. Record i of a batch uses the row seed {seed}#{i}.
What is the rate limit?+
Roughly 120 requests per minute per IP address, with no daily cap. The limiter is best-effort and per-instance rather than a hard contract, so treat it as a courtesy threshold and honour the Retry-After header on a 429 response.
How many records can one request return?+
Up to 100 for the identity, address and name endpoints, and up to 1000 for the IMEI endpoint, which is pure arithmetic and far cheaper to generate. For larger datasets use the bulk exporter instead of paginating the API: it builds up to 100,000 rows in your browser and downloads them as CSV, JSON or SQL.
Can I get CSV or SQL instead of JSON?+
Yes. Add format=csv or format=sql. SQL output emits INSERT statements against an identities table, which is enough to seed a development database directly from a shell pipe. Add fields to choose which columns appear.
Can the API validate a value as well as generate one?+
Yes. /api/v1/validate checks a value against the same pure validators the on-site tool pages use: luhn, card, iban, aba, vin and password. It returns a verdict plus structured detail — the detected card scheme, the expected VIN check digit, a password's score and character classes. Nothing you submit is logged or stored.
Why does the API not validate SSNs, SINs or NINOs?+
Those validators exist as tool pages but are deliberately not exposed over the API. Making government-identity checking programmatically scriptable is a meaningfully different act from putting one behind a form, and the endpoint is for developer utilities — checksum and format rules like Luhn, IBAN and VIN, which tell you a value is well-formed and nothing more.
Can I get just one field instead of a whole identity?+
Yes. /api/v1/field?type=zip returns a single field per record — phone, email, username, password, guid, zip, coordinates, company or imei. It uses the same implementation as the matching generator page, so a seed replayed against either gives the same value. Values come back bare, with any context such as the state a ZIP belongs to in a separate object.
Is there an OpenAPI specification?+
Yes, at /api/openapi.json, as an OpenAPI 3.1 document. Import that URL into Postman, Insomnia, Bruno or an OpenAPI code generator to get a typed client. It is generated from the same definitions that drive the docs page, so the spec and the documentation cannot disagree.
Are the generated identities real people?+
No. Records are assembled from locale name pools and format rules, never from any real person's data. National-ID placeholders are masked and drawn from never-issued ranges, payment-card numbers use published sandbox test ranges and cannot be charged, phone numbers use reserved fiction ranges, and IMEI values use a reserved test type-allocation code. Any resemblance to a real individual is coincidental.
What am I not allowed to use this data for?+
Do not use it for fraud, impersonation, shipping, billing, KYC, tax, government, employment, banking, medical or legal identity purposes, or anywhere accurate real information is required. It exists for software testing, QA fixtures, database seeding, demos, documentation and load testing.
Does the API return non-US data?+
Yes. Pass country with a slug or ISO-3166 alpha-2 code. The country changes the name pools, address format, regional subdivision label, phone format, postal-code shape and currency — it is not a US-shaped record with a different country string appended.
How is this different from the on-site generator?+
It is the same engine. The API, the on-page generator and the bulk exporter all call one pure generation function, so a seed replayed through any of them produces identical records. The API just makes that engine callable from a script instead of a browser.