mantalest. MMXXVIGet a key

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

A modern register of Sweden,
behind one API.

Mantal is the single interface over SPAR, SCB, Lantmäteriet, and the rest of the country’s primary registries. One bearer token, one bill, one URL — no SOAP, 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 which registers we wrap.

Six Swedish registries,
one bearer token.

Each source sits behind the same auth, schema, and rate-limiting layer. Today, persons and geography are live. The rest is on the roadmap, in the order our customers ask for it.

SourceStatusEndpoints
001SPARStatens personadressregister · Skatteverket.live · 8.0M persons/v1/persons/*
002SCB + GeoNamesAdministrative geography, postal codes, localities.live · 93,603 codes/v1/geo/*
003LantmäterietProperty + building polygons, vector tiles.live · private beta/v1/tiles/*
004BolagsverketCompany registry, beneficial owners.planned · Q3 2026
005Eniro · HittaTelephone, contact, household lookup.planned
006DomstolsverketCourt records, judgments, registers.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 SPAR’s kundtestmiljö with the same schema, against anonymised data. No bill, no rate cap.

on what we charge, by the call.

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

SPAR has volume tiers that reset every day, per assignment. We pass them through. The invoice comes monthly with one row per billed call — source, 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 bill the SPAR prislista 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 on OVH in Strasbourg. Postgres on Hetzner. 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 to SPAR.

DEVDASH AB’s organisation certificate, rotated every 24 months. Audited per SPAR’s anslutningsvillkor. Health at /health.

on what teams actually build with it.

Boring infrastructure, useful results.

Mantal hides the SOAP, the certificate rotation, the Swedish-enum quirks, and the per-source rate ceilings. You write the part of the product that matters.

№ 001 · 2025—

Match tenants to listings in 80 ms.

Bofrid 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.

SCB’s tätorter, Lantmäteriet’s property polygons, postnummer streets, regions, RegSO — typo-tolerant search, one schema, one billing row per query.