Skip to content

Developers

The NameForge API

Two endpoints, both plain JSON, both served as static files. No API key, no signup, no quota and no rate limit, because there is no server here to rate-limit anything: this site is a static build, and these responses are files on a CDN. Everything they contain is published under CC BY 4.0, so you may use it commercially as long as you keep the attribution line.

Endpoints

NameForge API endpoints
EndpointReturnsSize
GET /api/v1/generatorsAll 48 generators: slug, name, category, target keyword, page URL, data URL, assembly patterns, selection space and building-block count.Small, a few tens of kilobytes
GET /api/v1/corpusThe complete NameForge Naming Corpus v1: every building block of every generator, with roles, provenance notes and counting formulas.Large, 1,744 blocks in one document

Both send content-type: application/json; charset=utf-8 and access-control-allow-origin: *, so you can call them straight from a browser without a proxy. Neither takes a query parameter, and neither would honour one if you sent it.

Calling them

The whole generator index:

curl https://nameforge.name/api/v1/generators

One generator’s figures, using jq to filter client side:

curl -s https://nameforge.name/api/v1/generators | jq '.generators[] | select(.slug=="elf")'

The full corpus, saved to a file:

curl -s https://nameforge.name/api/v1/corpus -o nameforge-corpus.json

Example response: /api/v1/generators

Abbreviated to one generator, and the figures in it are illustrative rather than live. The real response carries all 48 with their current counts.

{
  "attribution": "Names by NameForge, https://nameforge.name",
  "license": "CC BY 4.0",
  "version": "v1",
  "count": 48,
  "documentation": "https://nameforge.name/api-docs",
  "corpusUrl": "https://nameforge.name/api/v1/corpus",
  "generators": [
    {
      "slug": "elf",
      "name": "Elf Name Generator",
      "short": "Elf",
      "category": "fantasy-races",
      "keyword": "elf name generator",
      "url": "https://nameforge.name/generator/elf",
      "dataUrl": "https://nameforge.name/data/elf",
      "patterns": ["[syllables](+[suffix])"],
      "combinations": 1234567,
      "blockCount": 62
    }
  ]
}

Example response: /api/v1/corpus

Abbreviated hard. The real response carries every generator with every word list in full, and the figures below are placeholders rather than live numbers.

{
  "attribution": "Names by NameForge, https://nameforge.name",
  "license": "CC BY 4.0",
  "apiVersion": "v1",
  "licenseUrl": "https://creativecommons.org/licenses/by/4.0/",
  "datasetAttribution": "Data: NameForge Naming Corpus v1, https://nameforge.name/data",
  "name": "NameForge Naming Corpus",
  "version": "v1",
  "totals": { "generators": 48, "blocks": 4000, "combinations": 0 },
  "generators": [
    {
      "slug": "tavern",
      "patterns": ["The [Adjective] [Noun]"],
      "combinations": 3600,
      "countedAs": "60 adjectives x 60 nouns",
      "blocks": [
        { "label": "Adjectives", "role": "The descriptor on the sign.",
          "count": 60, "items": ["Rusty", "Gilded"] }
      ]
    }
  ]
}

Why there is no /api/v1/names endpoint

The obvious endpoint is missing, and the reason is worth stating plainly rather than leaving you to guess. NameForge is a fully static build. There is no server process at request time, so a route that reads ?generator=elf&seed=42 and returns a freshly generated batch cannot exist here: a static route is executed once at build time and its single output is served to every caller. The query string would be ignored while the response still looked as though it had been generated for you. A plausible wrong answer is worse than a missing one, so the endpoint is absent instead of faked.

Generation stays where it already is: in the browser. The module lib/runtime.ts in this repository is dependency-free and importable on its own. It exports the generate function for every slug plus sampleNames(slug, count) and generateBatch(fn, count, rng), all seeded through a small deterministic PRNG, so the same slug and seed give the same names on your machine as on this site. Pair it with /api/v1/generators for the catalogue and you have the endpoint you came looking for, running locally and at no latency.

Licence and attribution

Everything here is licensed under CC BY 4.0. Commercial use is fine. Redistribution is fine. Building a competing generator on this data is fine. The one condition is credit, and both responses carry the exact line to use at the top level:

Names by NameForge, https://nameforge.name

A visible credit near the names, or a line in an about or credits screen, both satisfy it. If you are reusing the corpus itself rather than generated names, the datasetAttribution field carries the dataset citation instead, and the corpus page has ready-made plain-text and BibTeX forms.

One thing this API never tells you: whether a name is free to use. Nothing returned here is checked against any trademark register, company register or domain registry, and a grammar built from ordinary English words will produce real brand names and real surnames by coincidence. Checking a name is your side of the line.

Versioning

The v1 in the path is a promise about shape, not about values. Fields will be added, and word banks and counts change when the generators change. Nothing already present will be renamed or removed under v1; a breaking change gets a v2 path and this page will document both. If you need a frozen copy, the dated download on the corpus page is the thing to pin.

Embedding a generator on a page rather than calling it from code? The embed builder produces a ready iframe snippet. If you would rather have something like this built for you than build it yourself, this site was made by FusionStudios.

Last reviewed 5 August 2026. Corpus v1. Method: how NameForge builds a name. Built and maintained by FusionStudios.