mantalest. MMXXVI

A unified API for Swedish business and civil-registry data.

A modern register of Sweden,
behind one API.

Mantal is the single interface over the country’s primary public registries — persons, geography, real estate, and more. One bearer token, one bill, one URL — no legacy protocols, no five-figure minimums, no sales call.

001 — Persons

8.0M

civil registry

002 — Companies

1.4M

indexed

003 — Localities

77,657

municipalities + districts

004 — Postal codes

93,603

with admin context

on what kind of data sits behind the API.

Six datasets,
one bearer token.

One auth, schema, and rate-limit layer across all of them. Persons and geography are live; the rest ships in demand order.

DatasetStatusEndpoints
001PersonsName, address, household, residency.live/v1/persons/*
002GeographyPostal codes, municipalities, counties, localities.live/v1/geo/*
003Real estateProperty + building polygons, vector tiles.live · private beta/v1/tiles/*
004CompaniesRegistry, beneficial owners, filings.planned
005ContactTelephone, household, contact lookup.planned
006Court recordsJudgments, registers, judicial filings.planned

on the shape of the request and the shape of the answer.

A schema you can read aloud.

The shape is consistent across every source. Errors are typed. Idempotency is implicit. The OpenAPI spec at mantal.eu/openapi.json is the source of truth — generate your client, or copy the curl into your terminal and ship.

§ 02·APOST · /v1/persons/lookup
// Look up a person by personnummer
curl -X POST https://mantal.eu/v1/persons/lookup \
  -H "Authorization: Bearer pk_live_…" \
  -H "Content-Type: application/json" \
  -d '{"pnr":"195704133106","shape":"flat"}'

// → 200 OK
{
  "pnr":         "195704133106",
  "name":        "Christina Birgitta Ulrika Thomeaus",
  "address":     "Gatan142 8, 11146 Stockholm",
  "municipality": "Stockholm",
  "county":       "Stockholms län"
}
auth · bearer pk_live_p50 · 80 ms

02·aTwo response shapes.

shape=rich returns the full Pelias-style context block — country, region, locality, borough. shape=flat returns a single line ready for UI rendering.

02·bSearch is cheap, retrieve is free.

A name+address search costs one billed call and returns a searchId. Re-fetching that id for 24 hours doesn’t bill again.

02·cTest keys are free.

pk_test_… hits a test environment with the same schema, against anonymised data. No bill, no rate cap.

on what we charge, by the call.

You pay what the registry charges,
on a usage graph you can audit.

The upstream registry has volume tiers that reset every day, per assignment. We pass them through. The invoice comes monthly with one row per billed call — dataset, assignment, tier, price. The same number you would compute yourself.

First call of the day · per persnr lookup

40.00SEK

Then it drops, fast. By the 200th call the marginal price is 0.10 SEK — a 400× difference. We pass through the upstream price list verbatim. Hit /v1/admin/billing any time to reconcile.

§ 03·B — All tiers, persnr lookup (per day)

Calls per dayPrice each
001 — 00540.00 SEK
006 — 0095.00 SEK
010 — 0191.00 SEK
020 — 0490.30 SEK
050 — 0990.20 SEK
100 — 1990.15 SEK
200+0.10 SEK
Other operations. Name search is flat 1.00 SEK per call. Cached retrieves (within 24h) are free. Geo lookups and tile bytes are included.

No minimum, no monthly platform fee.

on the obligations we’ve written down.

The boring promises,
in writing.

No US clouds. No third-party caches. The mTLS handshake stays on our side of the wire. Personnummer payloads expire from disk after 24 hours.

§ 04·A — Residency

EU only, by construction.

All traffic terminates in the EU. No cross-border processors, no US-side cache layer.

§ 04·B — Retention

24-hour PNR cache.

Every personnummer payload is garbage-collected hourly. No long-term store of civil-registry rows. No analytics replication.

§ 04·C — Authentication

mTLS upstream.

Organisation certificates terminate on our side of the wire and are rotated on the registry’s schedule. Health at /health.

on what teams actually build with it.

Boring infrastructure, useful results.

Mantal hides the legacy protocols, certificate rotation, and Swedish-enum quirks of each upstream. You write the part of the product that matters.

№ 001 · 2025—

Match tenants to listings in 80 ms.

A rental marketplace uses /v1/persons/lookup to fill the household pane on every application, then /v1/geo/postal-codes/:code to compute commute polygons against the listing.

№ 002

Skip the address-form dance.

One PNR turns into a verified residential address, county, municipality, and household composition. Stop asking users to type what the registry already knows.

№ 003

Geocode against the primary source.

Localities, property polygons, postal codes, streets, counties, neighbourhoods — typo-tolerant search, one schema, one billing row per query.