# data.placeholder.com > Free, deterministic placeholder data for tests, demos and AI agents: synthetic people, a mock REST API, a fictional company with an answer key, fictional brand kits, AI-testing fixtures with answer keys, filler text and safe test values. No sign-up, no API key, JSON by default. The same URL returns the same bytes forever (frozen v1, cached for a year), except /safe-values (reference data, cached a day). Everything is synthetic. Never use in production; run placeholder-check in CI (https://tools.placeholder.com/placeholder-check). All responses: CORS `*`, header `X-Placeholder: data.placeholder.com`. Errors are JSON `{"error": "...", "status": N}`; out-of-range parameters are 400, never silently clamped. ## People ``` https://data.placeholder.com/people/{cc}/{pid} https://data.placeholder.com/people/{cc}.{json|ndjson|csv|sql}?count={N}&seed={S} ``` - cc: `se`, `no`, `gb`, `us` only (FI and DK return 404). pid: 1..1000000. - count: 1..10000 (default 10). seed: 1..100 (default 1); seed S = pids (S-1)*10000+1 onward, never overlapping. - `?format=` instead of the extension; `table=` names the SQL table (default `people`); `download=1` forces a file for JSON. - Fields: id, country, locale, first_name, last_name, full_name, gender, birth_date, age (vs 2026-01-01), national_id{type,value,test_range,format_valid,source,note}, email (@example.com/.org/.net), phone{e164,national,type,fictional_range,source}, address{street,house_number,postal_code,city,region,country,country_name,formatted}, iban{value,test,kind,source} (null for US), employer{name,title}, username, avatar_url. - national_id, phone and iban are NOT unique (small safe pools). id, email, username are unique per country. Examples: - https://data.placeholder.com/people/se/1 - https://data.placeholder.com/people/gb.csv?count=100&seed=1 - https://data.placeholder.com/people/us.ndjson?count=1000 - https://data.placeholder.com/people/no.sql?count=500&table=customers ## Mock REST API (JSONPlaceholder / json-server style) ``` https://data.placeholder.com/api/{resource}[/{id}[/{child}]] ``` - Resources (count): users (10), posts (100), comments (500), albums (100), photos (5000), todos (200), products (50), orders (100). - Relations: posts/albums/todos/orders.userId, comments.postId, photos.albumId. Nested: /api/users/1/posts, /api/posts/1/comments, /api/albums/1/photos. - Query: `field=value` (dot paths, repeat = OR), `field_ne|_like|_gte|_lte|_gt|_lt`, `q` (full text), `_sort` (`-field` = desc) + `_order`, `_page` + `_limit` (default 10, `Link` header), `_start`/`_end`/`_limit`, `_embed=comments`, `_expand=user`, `country=SE|NO|GB|US` (users from one persona country). - Lists send `X-Total-Count`. Writes (POST 201, PUT/PATCH 200 merged, DELETE 200 `{}`) are validated and echoed, never stored. - Index: https://data.placeholder.com/api Examples: - https://data.placeholder.com/api/users - https://data.placeholder.com/api/posts?userId=1&_sort=title - https://data.placeholder.com/api/posts/1?_embed=comments&_expand=user - https://data.placeholder.com/api/products?category=home&price_lte=100 ## Company in a box (agent evals, RAG tests) ``` https://data.placeholder.com/company/brightfjord/v1[/{collection}[/{id}]] ``` - Brightfjord, Inc.: fictional B2B SaaS, Q1 2026. Collections: departments, employees, products, plans, accounts, contacts, deals, invoices, tickets, incidents, commits, email_threads, emails, chat_channels, chat_messages, events, wiki, questions. Profile: /company. - Filters: any top-level field (exact; comma = OR; list fields by membership; `null`), `_q` text search, `_page`, `_limit` (default 100, max 500). Unknown filter = 400. - Wiki pages as Markdown: /wiki/{slug} (`?format=json` for metadata). Whole dataset: /bundle.zip. - questions: 34 items with `answer`, `answer_value`, `answer_type`, `kind` (single-hop, multi-hop, aggregate, trap) and `evidence[]` (collection, id, role: proof | context | stale, quote). - Domains use `.example`; phones +1 555-01xx. Examples: - https://data.placeholder.com/company/brightfjord/v1 - https://data.placeholder.com/company/brightfjord/v1/tickets?status=open&_limit=20 - https://data.placeholder.com/company/brightfjord/v1/questions - https://data.placeholder.com/company/brightfjord/v1/bundle.zip ## Brand kits ``` https://data.placeholder.com/brands curated brands (list, cached a day) https://data.placeholder.com/brands/{slug-or-seed} full kit (also .json) https://data.placeholder.com/brands/{slug-or-seed}/tokens.css CSS custom properties + @font-face ``` - 24 curated slugs (brightfjord, ledgerlark, mossgate-health, saltmeadow-bakery, northbeck-outfitters, shipkiln, ...). Any name-like slug becomes the name (`quillmere-labs` -> "Quillmere Labs"); a seed or generic word (`42`, `test`) or a real brand name (`nike`) gets a generated fictional name, and the kit adds `requested` and `canonical_url`. - Kit fields: slug, name, legal_name, fictional, version, tagline, description, industry, domain/website/email (`.example`), voice (keywords, tone, do, dont), copy (headline, subheadline, cta, social_post, email_subject, about), palette (primary, secondary, accent, neutrals 50-900, background, surface, text, text_muted, border, semantic; each with hex, rgb, hsl, contrast and WCAG level; pairings), typography (heading/body family, weight, css stack, OFL font file URL, scale), logo, assets (image URLs), social (fictional handles), usage_notes, notice. Brightfjord also has products, company_dataset. - tokens.css: `--brand-primary`, `--brand-on-primary`, `--brand-secondary`, `--brand-accent`, `--brand-neutral-50..900`, `--brand-background`, `--brand-surface`, `--brand-text`, `--brand-text-muted`, `--brand-border`, `--brand-success|warning|danger|info`, `--brand-font-heading`, `--brand-font-body` (+ `-weight`), `--brand-logo`. - Images (logo, logomark, favicon, og card, palette) are on via: https://via.placeholder.com/brand/{slug}/logo.svg (see https://via.placeholder.com/llms.txt). - No real brands: names are checked against a denylist of well-known brands and trademarks. Examples: - https://data.placeholder.com/brands - https://data.placeholder.com/brands/brightfjord - https://data.placeholder.com/brands/quillmere-labs - https://data.placeholder.com/brands/brightfjord/tokens.css ## Fixtures with answer keys (AI testing) ``` https://data.placeholder.com/fixtures catalog of kinds https://data.placeholder.com/fixtures/{kind}[?subkind=&tag=] items (documents: ?subkind=&language=&variant=) https://data.placeholder.com/fixtures/{kind}/{id} manifest (files with url, media_type, bytes, sha256, variant) https://data.placeholder.com/fixtures/{kind}/{id}/answers answer key https://data.placeholder.com/fixtures/{kind}/{id}/{file} a file from the manifest https://data.placeholder.com/fixtures/{kind}/bundle.zip everything of a kind ``` - Kinds (count): documents (82: invoice, receipt, bank_statement, payslip, purchase_order, contract, packing_list, insurance_claim, utility_bill, test_report; languages en, sv, nb, de; variants clean PDF + scanned, photographed, stamped, folded images), haystacks (56: `needle-{4k|8k|16k|32k|64k|128k|200k}-d{000|025|050|075|100}`, `multi-{size}`, `chain-{size}`, `distractor-{size}`), rag (2: brightfjord-workplace, quillmoor-support-kb; Markdown + corpus.jsonl + questions.json), repos (5: py-invoicing, py-booking, py-logstats, js-cart, ts-ratelimit; zip with failing tests), spreadsheets (4: sales-ledger-q1, expenses-2026-03, inventory-count, orders-clean; XLSX + CSV). - Answer key: `{id, kind, version, answers: [{key, question, answer, type: string|number|money|date|boolean|list|object, unit, tolerance, evidence: [{file, page, quote, bbox, cell, line, ...}]}]}`. Money = decimal string with 2 decimals + ISO 4217 unit; dates ISO 8601. bbox = [x0, y0, x1, y1] from top-left, `bbox_units` pt (PDF) or px (image). - Optional fields (ignore unknown ones): evidence `char_offset`, `approx_token_offset`, `depth_percent`, `role` (proof|stale|context), `doc_id`, `path`, `hidden_row`; answers `kind` (single-hop, multi-hop, aggregate, conflicting, false-premise, unanswerable), `answerable`, `expected_behavior` (answer|abstain|correct-premise), `absent_terms`, `order_matters`; repo keys `patch`, `failing_tests_as_shipped`, `not_bugs`; manifests `questions`, `task`, `test_command`. - `world: {company: "brightfjord", refs: [...]}` links an item to company-in-a-box records. Read-only; unknown filter 400, unknown item 404. v1 frozen; items cached a year, the /fixtures catalog an hour. - Contract: https://tools.placeholder.com/fixtures Examples: - https://data.placeholder.com/fixtures - https://data.placeholder.com/fixtures/documents/invoice-0007 - https://data.placeholder.com/fixtures/documents/invoice-0007/answers - https://data.placeholder.com/fixtures/documents?subkind=receipt&language=sv - https://data.placeholder.com/fixtures/documents/purchase-order-0005/answers - https://data.placeholder.com/fixtures/haystacks/needle-32k-d050/answers - https://data.placeholder.com/fixtures/rag/brightfjord-workplace/corpus.jsonl - https://data.placeholder.com/fixtures/repos/py-invoicing/py-invoicing.zip - https://data.placeholder.com/fixtures/spreadsheets/sales-ledger-q1/sales-ledger-q1.xlsx ## Text - Lorem: https://data.placeholder.com/text/lorem?paragraphs=3 (or sentences, words, headlines; max 100/500/10000/100). `format=plain|html|markdown|json`, `start=classic|random`, `seed=` any string. - Localized copy: https://data.placeholder.com/text/{lang}?type=paragraph|sentence|headline|product|ui&count=N. Languages: en sv no da fi de nl fr es it pt pl ar he ja zh ko. Same seed = same content in every language. - Stress strings: https://data.placeholder.com/text/stress[/{kind}] with kinds long-words, rtl, cjk, emoji, names, combining, whitespace, numbers, casing, confusables, scripts, pseudo. JSON with lengths and code points; `count`, `seed`, `format=plain`. - Pseudo-localization: https://data.placeholder.com/text/pseudo?text=Add%20to%20cart (max 4000 chars; POST raw text up to 64 KB). Keeps {placeholders}, %s, tags, URLs. - Index: https://data.placeholder.com/text ## Safe test values - https://data.placeholder.com/safe-values (all), /safe-values/{category}, `?country=SE`. - Categories: domains, ip (also ipv4, ipv6), asn, mac, email, uri, phone, cards, iban, national-id, company-id. Every item has `value`, `purpose`, `source` URL and `confidence` (verified, verified-archive, secondary, uncertain). - Use these instead of inventing "fake" emails, IPs, phone numbers, card numbers or IDs. ## Docs - [People and datasets](https://tools.placeholder.com/people) - [Mock REST API](https://tools.placeholder.com/mock-api) - [Company in a box](https://tools.placeholder.com/company) - [Brand kits](https://tools.placeholder.com/brands) - [Fixtures with answer keys](https://tools.placeholder.com/fixtures) - [Text](https://tools.placeholder.com/text) - [Safe test values](https://tools.placeholder.com/safe-values) - [CI check](https://tools.placeholder.com/placeholder-check) - [Images, avatars, photos, QR codes, barcodes, brand images](https://via.placeholder.com/llms.txt) - [Everything, incl. dummy files and HTTP test endpoints](https://tools.placeholder.com/llms-full.txt)