Utforska offentliga aktörer, leverantörer, fakturor och ekonomiska poster. Posttyp, källreferenser och täckning visas där uppgifterna finns; saknad information markeras.
Laddar offentliga pengar…
Hämtar källan. Inga gamla eller påhittade siffror visas under tiden.
Public Money API
Samma data som sajten — med källa, täckning och kornighet bevarad. Bas-URL: https://offentia.se
Status idag
Det finns 14 publika datarutter under /api/public-money/: CSV-exporten och JSON-rutter med kuvertet { data, meta }. Alla är dokumenterade nedan och kontrolleras mot koden.
JSON-fel har formen { error: { code, message } }: 400 invalid_query för en okänd eller ogiltig parameter (inget filter ignoreras tyst), 404 not_found och 503 source_unavailable när datakällan inte svarar — aldrig en tom lista i stället för ett driftfel.
Ingen API-nyckel krävs och ingen finns. Nyckelhantering är planerad.
Semantik du måste respektera
En konteringsrad är aldrig en faktura — exporten tar alltid exakt en posttyp (scope).
Ett saknat fält är en tom cell i CSV:n och null i JSON — aldrig 0. Saknad valuta (currency) betyder att källan inte anger valuta: beloppet är då inte kronor.
Okänt datum är tomt — aldrig 0, och räknas aldrig in i ett år.
Exporten är avkortad vid 10 000 rader. Läs x-export-truncated innan du drar slutsatser om hela urvalet.
Rutter som finns idag
Live
GET /api/public-money/export
CSV-export av konteringsrader eller fakturor
Exporterar upp till 10 000 rader för ett urval, med samma filter som postutforskaren. Exporten börjar alltid från urvalets början — sidmarkören i postutforskaren ignoreras.
Parametrar
scope
valfri — Posttyp: ACCOUNTING_ROW (standard) eller INVOICE. De två blandas aldrig i en export. Exempel: INVOICE
fakturor
valfri — Äldre alias: fakturor=1 betyder scope=INVOICE (scope har företräde). Exempel: 1
valfri — Fyra siffror. Poster med okänt datum ingår aldrig i ett år. Exempel: 2023
min
valfri — Minsta belopp: ett ändligt tal med punkt som decimaltecken. Kreditposter är negativa. Exempel: -1000
max
valfri — Största belopp, samma format som min. min får inte överstiga max. Exempel: 50000
Svar
200text/csv; charset=utf-8 — UTF-8 med BOM, semikolonseparerad, alla fält citerade, CRLF-radslut, formelskyddad (celler som kan tolkas som formler neutraliseras).
400application/json — {"error":"Ogiltiga exportfilter."} — okänd posttyp, ogiltigt år eller ogiltigt belopp.
503application/json — {"error":"Exportens datakälla är inte tillgänglig. Försök igen senare."} — datakällan svarade inte; inget gammalt eller påhittat innehåll skickas.
Svarsrubriker
x-export-rows
Antal rader i filen.
x-export-scope
Posttypen som exporterades.
x-export-truncated
true om urvalet har fler rader än de 10 000 som ryms — filen är då ett avkortat urval, inte hela urvalet.
Totaler per år, stödtyp och månad samt källtillstånd per år enligt Arbetsförmedlingens utlämnande, med topplista över juridiska personer. Enskilda näringsidkare och dödsbon ingår bara som antal och summa per år. Per arbetsgivare finns rutten nedan.
503application/json — {"error":{"code":"source_unavailable",…}} — sammanställningen kunde inte läsas eller bryter mot sitt kontrakt. Aldrig ett tomt aggregat.
Svarsrubriker
cache-control
public, max-age=3600 — uppgifterna ändras bara när ett nytt utlämnande publiceras.
Anställningsstöd till en arbetsgivare (juridisk person)
Utbetalt anställningsstöd till en juridisk person enligt Arbetsförmedlingens utlämnande (2023–2025): per år, stödtyp och månad, med källa och täckning. Samma uppgifter som profilsidan. Enskilda näringsidkare (personnummer) och dödsbon har ingen profil; månadsbelopp utelämnas för år där någon månad har färre än tre utbetalningar.
Parametrar
orgnr
obligatorisk — Sökvägsparameter: organisationsnummer NNNNNN-NNNN eller tio siffror. Tredje siffran måste vara 2–9 (juridisk person). Exempel: 212000-1355
Svar
200application/json — {"data":{orgnr, name, entityId, totalSek, payments, years[], types[], months[], source, coverage},"meta":{…}}. entityId är Public Money-entiteten med exakt samma organisationsnummer, annars null.
404application/json — Ingen profil: numret är ett personnummer, ett dödsbo, inte ett organisationsnummer, eller har ingen utbetalning under de utlämnade åren. Svaret är detsamma i alla fallen.
503application/json — HTTP 503 betyder att datakällan inte kan lämna uppgifter för tillfället. Det säger inget om huruvida stöd finns.
Svarsrubriker
cache-control
public, max-age=3600 — uppgifterna ändras bara när ett nytt utlämnande publiceras.
Fält i svarets data
orgnr · name · entityId · totalSek · payments · years · types · months · source · coverage
Sidindelad katalog med samma läsning som sidan /data/public-money/aktorer. Raderna bär id, namn och de identiteter källan själv lämnar; ett organisationsnummer som källan inte bär är null, aldrig gissat. Profilen per id ligger på /api/public-money/aktorer/[id].
Parametrar
q
valfri — Fritextsökning i hela katalogen (högst 200 tecken). Exempel: Gävle
limit
valfri — Rader per sida, 1–100 (standard 50). Exempel: 20
cursor
valfri — Sidmarkör: meta.nextCursor från föregående svar. Saknas när sista sidan är nådd.
Svar
200application/json — {"data":[…],"meta":{capability, version, count, limit, nextCursor, search}}. En tom lista betyder att källan svarade utan träffar.
400application/json — {"error":{"code":"invalid_query",…}} — okänd eller upprepad parameter, limit utanför 1–100, ogiltig sidmarkör eller för lång sökning. Inget filter ignoreras tyst.
503application/json — {"error":{"code":"source_unavailable",…}} — datakällan svarade inte. Aldrig en tom lista i stället för ett driftfel.
Svarsrubriker
cache-control
public, max-age=300 vid 200; no-store vid fel.
Fält i svarets data
id · name · actorType · unresolvedSourceType · orgnr · evidence
En entitets profil med samma uppgifter som profilsidan: identitet, årsbelopp, relationer, SNI (versionsmedvetet) och registerstatus. Sektioner som källan inte kunde lämna listas i unavailableSections i stället för att visas som tomma.
Parametrar
id
obligatorisk — Sökvägsparameter: entitets-id ur katalogen (URL-kodat). Exempel: legacy:actor:gavle
Sidindelad katalog med samma läsning som sidan /data/public-money/leverantorer. Raderna bär id, namn och de identiteter källan själv lämnar; ett organisationsnummer som källan inte bär är null, aldrig gissat. Profilen per id ligger på /api/public-money/leverantorer/[id].
Parametrar
q
valfri — Fritextsökning i hela katalogen (högst 200 tecken). Exempel: Atea
limit
valfri — Rader per sida, 1–100 (standard 50). Exempel: 20
sni
valfri — SNI-kod: prefix mot leverantörens gällande klassning (t.ex. 62 eller 62010). Exempel: 62
cursor
valfri — Sidmarkör: meta.nextCursor från föregående svar. Saknas när sista sidan är nådd.
Svar
200application/json — {"data":[…],"meta":{capability, version, count, limit, nextCursor, search}}. En tom lista betyder att källan svarade utan träffar.
400application/json — {"error":{"code":"invalid_query",…}} — okänd eller upprepad parameter, limit utanför 1–100, ogiltig sidmarkör eller för lång sökning. Inget filter ignoreras tyst.
503application/json — {"error":{"code":"source_unavailable",…}} — datakällan svarade inte. Aldrig en tom lista i stället för ett driftfel.
Svarsrubriker
cache-control
public, max-age=300 vid 200; no-store vid fel.
Fält i svarets data
id · name · orgnr · buyerCount · classifications · evidence
En entitets profil med samma uppgifter som profilsidan: identitet, årsbelopp, relationer, SNI (versionsmedvetet) och registerstatus. Sektioner som källan inte kunde lämna listas i unavailableSections i stället för att visas som tomma.
Parametrar
id
obligatorisk — Sökvägsparameter: entitets-id ur katalogen (URL-kodat). Exempel: legacy:vendor:atea-sverige-ab-42380
Sidindelade poster med samma filter som postutforskaren och CSV-exporten. Konteringsrader och fakturor blandas aldrig; okänt datum eller belopp är null, aldrig 0. possibleDuplicate är en maskinsignal, aldrig ett fynd.
Parametrar
scope
valfri — ACCOUNTING_ROW (standard) eller INVOICE. Exempel: INVOICE
fakturor
valfri — Äldre alias: fakturor=1 betyder scope=INVOICE. Exempel: 1
400application/json — {"error":{"code":"invalid_query",…}} — okänd eller upprepad parameter, ogiltigt år, belopp, nummer, limit eller sidmarkör.
503application/json — {"error":{"code":"source_unavailable",…}} — datakällan svarade inte eller lämnade ett ogiltigt svar (blandade posttyper, trasig sidindelning).
Huvudräknarna från översikten (konteringsrader, fakturor, organisationer, leverantörsrelationer, offentliga aktörer) och datasetets version. Täckningen är källans deklaration (basis DECLARED), inte en mätning.
Parametrar
Svar
200application/json — {"data":{accountingRows, accountingRowsApproximate, invoices, organizations, supplierRelationships, publicActors, coverage},"meta":{…, dataset:{datasetVersion, frozenAt, state}}}. dataset.state UNAVAILABLE betyder att versionen inte kunde läsas, inte att den saknas.
400application/json — Rutten tar inga parametrar.
503application/json — {"error":{"code":"source_unavailable",…}} — nyckeltalen kunde inte läsas.
Antal och belopp grupperat på år, leverantör, köpare eller upptäckta dimensioner (dim1–dim4), beräknat över hela mängden i datatjänstens kuber. Svaret kontrolleras mot frågan; orimliga år läggs i karantän i stället för att visas.
Parametrar
group
obligatorisk — year, supplier, buyer (eller köpare), dim1, dim2, dim3 eller dim4. Exempel: year
scope
valfri — ACCOUNTING_ROW eller INVOICE. Exempel: INVOICE
SNI 2007 eller SNI 2025, versionsmedvetet: varje rad bär sitt eget system och rader från ett annat system än det begärda sorteras bort. Ingen tyst omvandling mellan versionerna.
Parametrar
system
valfri — SNI2007 (standard) eller SNI2025. Exempel: SNI2025
parent
valfri — Föräldrakod; utelämnad ger översta nivån. Exempel: J
Källans täckningsceller (köpare × datafamilj × period) med både deklarerat och uppmätt tillstånd. En sida är ett urval: källan lämnar ingen sammanfattande räkning, så svaret påstår aldrig täckning för hela populationen (meta.population = NOT_SUMMARIZED). En deklarerad fullständighet utan mätning är inte uppmätt.
Koppling offentlig aktör (entitets-id) → kommunkod ur källans egen geografi: en exakt id-koppling, ingen namnheuristik. Aktörer utan kommun (regioner, myndigheter, bolag) finns inte i listan. Kommungränserna ligger som statisk GeoJSON på /data/kommun-boundaries.geojson.
Parametrar
Svar
200application/json — {"data":[{entityId, code, name}],"meta":{…, count, boundaries}}, sorterad på kommunkod.
400application/json — Rutten tar inga parametrar.
503application/json — {"error":{"code":"source_unavailable",…}} — geografin kunde inte läsas eller var tom (källan har alltid kommuner; tomt är ett fel).