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 - actor
- valfri — Köparens exakta entitets-id (inte namn). Exempel:
legacy:actor:gavle - supplier
- valfri — Leverantörens exakta entitets-id (inte namn). Exempel:
legacy:vendor:atea-sverige-ab-42380 - year
- 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
- 200 text/csv; charset=utf-8 — UTF-8 med BOM, semikolonseparerad, alla fält citerade, CRLF-radslut, formelskyddad (celler som kan tolkas som formler neutraliseras).
- 400 application/json — {"error":"Ogiltiga exportfilter."} — okänd posttyp, ogiltigt år eller ogiltigt belopp.
- 503 application/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.
- content-disposition
- Filnamn: press0-<posttyp>-<datum>.csv.
- cache-control
- no-store — varje anrop läser källan på nytt.
Kolumner i CSV:n
record_id · record_scope · date · invoice_number · voucher · amount · currency · supplier · supplier_orgnr · source_refs · evidence_refs · dataset_vintage
Exempel
curl -sS -o fakturor-2023.csv 'https://press0.xyz/api/public-money/export?scope=INVOICE&year=2023'
Live
GET /api/public-money/anstallningsstod
Anställningsstöd (aggregat)
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.
Svar
- 200 application/json — {"data":{generated_at, source, years, stateByYear, notPublicBefore, notDelivered, typeCodes, totals, byType, byMonth, legalPersonEmployers, top},"meta":{…}}.
- 400 application/json — Rutten tar inga parametrar.
- 503 application/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.
Fält i svarets data
generated_at · source · years · stateByYear · notPublicBefore · notPublicReason · notDelivered · typeCodes · totals · byType · byMonth · legalPersonEmployers · top
Exempel
curl -sS 'https://press0.xyz/api/public-money/anstallningsstod'
Live
GET /api/public-money/anstallningsstod/[orgnr]
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
- 200 application/json — {"data":{orgnr, name, entityId, totalSek, payments, years[], types[], months[], source, coverage},"meta":{…}}. entityId är Public Money-entiteten med exakt samma organisationsnummer, annars null.
- 404 application/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.
- 503 application/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
Exempel
curl -sS 'https://press0.xyz/api/public-money/anstallningsstod/212000-1355'
Live
GET /api/public-money/aktorer
Aktörskatalog (JSON)
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
- 200 application/json — {"data":[…],"meta":{capability, version, count, limit, nextCursor, search}}. En tom lista betyder att källan svarade utan träffar.
- 400 application/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.
- 503 application/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
Exempel
curl -sS 'https://press0.xyz/api/public-money/aktorer?q=Gävle&limit=20'
Live
GET /api/public-money/aktorer/[id]
Aktörsprofil (JSON)
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
Svar
- 200 application/json — {"data":{…},"meta":{capability, version, sourceStatus}}.
- 404 application/json — {"error":{"code":"not_found",…}} — ingen entitet med det id:t.
- 503 application/json — {"error":{"code":"source_unavailable",…}} — datakällan svarade inte.
Svarsrubriker
- cache-control
- public, max-age=300 vid 200; no-store vid fel.
Fält i svarets data
id · name · actorType · orgnr · suppliers · measurements · classifications · registry · unavailableSections
Exempel
curl -sS 'https://press0.xyz/api/public-money/aktorer/legacy%3Aactor%3Agavle'
Live
GET /api/public-money/leverantorer
Leverantörskatalog (JSON)
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
- 200 application/json — {"data":[…],"meta":{capability, version, count, limit, nextCursor, search}}. En tom lista betyder att källan svarade utan träffar.
- 400 application/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.
- 503 application/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
Exempel
curl -sS 'https://press0.xyz/api/public-money/leverantorer?q=Atea&limit=20'
Live
GET /api/public-money/leverantorer/[id]
Leverantörsprofil (JSON)
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
Svar
- 200 application/json — {"data":{…},"meta":{capability, version, sourceStatus}}.
- 404 application/json — {"error":{"code":"not_found",…}} — ingen entitet med det id:t.
- 503 application/json — {"error":{"code":"source_unavailable",…}} — datakällan svarade inte.
Svarsrubriker
- cache-control
- public, max-age=300 vid 200; no-store vid fel.
Fält i svarets data
id · name · orgnr · yearlyAmounts · buyers · classifications · registry · unavailableSections
Exempel
curl -sS 'https://press0.xyz/api/public-money/leverantorer/legacy%3Avendor%3Aatea-sverige-ab-42380'
Live
GET /api/public-money/poster
Konteringsrader eller fakturor (JSON)
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 - actor
- valfri — Köparens exakta entitets-id. Exempel:
legacy:actor:gavle - supplier
- valfri — Leverantörens exakta entitets-id. Exempel:
legacy:vendor:atea-sverige-ab-42380 - year
- valfri — Fyra siffror. Poster med okänt datum ingår aldrig i ett år. Exempel:
2023 - min
- valfri — Minsta belopp, punkt som decimaltecken. Exempel:
-1000 - max
- valfri — Största belopp, samma format. Exempel:
50000 - invoice
- valfri — Exakt fakturanummer. Exempel:
F-2023-0042 - voucher
- valfri — Exakt verifikationsnummer. Exempel:
V12345 - limit
- valfri — Rader per sida, 1–200 (standard 50). Exempel:
100 - cursor
- valfri — Sidmarkör: meta.nextCursor från föregående svar.
Svar
- 200 application/json — {"data":[…],"meta":{capability, version, scope, filters, count, limit, nextCursor}}.
- 400 application/json — {"error":{"code":"invalid_query",…}} — okänd eller upprepad parameter, ogiltigt år, belopp, nummer, limit eller sidmarkör.
- 503 application/json — {"error":{"code":"source_unavailable",…}} — datakällan svarade inte eller lämnade ett ogiltigt svar (blandade posttyper, trasig sidindelning).
Svarsrubriker
- cache-control
- no-store — varje anrop läser källan på nytt.
Fält i svarets data
recordId · recordScope · date · invoiceNumber · voucher · amount · currency · supplier · supplierOrgnr · supplierId · possibleDuplicate · dimensions · evidence
Exempel
curl -sS 'https://press0.xyz/api/public-money/poster?scope=INVOICE&year=2023&limit=100'
Live
GET /api/public-money/nyckeltal
Nyckeltal och datasetstatus (JSON)
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.
Svar
- 200 application/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.
- 400 application/json — Rutten tar inga parametrar.
- 503 application/json — {"error":{"code":"source_unavailable",…}} — nyckeltalen kunde inte läsas.
Svarsrubriker
- cache-control
- public, max-age=300 vid 200; no-store vid fel.
Fält i svarets data
accountingRows · accountingRowsApproximate · invoices · organizations · supplierRelationships · publicActors · coverage
Exempel
curl -sS 'https://press0.xyz/api/public-money/nyckeltal'
Live
GET /api/public-money/rattelser
Rättelselogg (JSON)
Publik, append-only logg över rättelser i datan, med ursprung (äldre källa eller PRESS0) och källhänvisning.
Svar
- 200 application/json — {"data":[{id, date, actor, origin, category, description, legacyLocator}],"meta":{…, count}}.
- 400 application/json — Rutten tar inga parametrar.
- 503 application/json — {"error":{"code":"source_unavailable",…}} — loggen kunde inte läsas. Aldrig en tom logg 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 · date · actor · origin · category · description · legacyLocator
Exempel
curl -sS 'https://press0.xyz/api/public-money/rattelser'
Live
GET /api/public-money/analys
Aggregat och gruppering (JSON)
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 - actor
- valfri — Köparens exakta entitets-id. Exempel:
legacy:actor:gavle - supplier
- valfri — Leverantörens exakta entitets-id. Exempel:
legacy:vendor:atea-sverige-ab-42380 - limit
- valfri — Antal grupper, 1–200 (standard 50). Exempel:
20
Svar
- 200 application/json — {"data":{group_by, groups[], sampled, scope, cube},"meta":{…}}. sampled null betyder att källan inte uppger det.
- 400 application/json — {"error":{"code":"invalid_query",…}} — saknad eller okänd group, okänd parameter, ogiltig posttyp eller limit.
- 503 application/json — {"error":{"code":"source_unavailable",…}} — aggregeringen svarade inte eller gav ett svar som inte motsvarar frågan.
Svarsrubriker
- cache-control
- public, max-age=300 vid 200; no-store vid fel.
Fält i svarets data
group_by · groups · sampled · scope · cube
Exempel
curl -sS 'https://press0.xyz/api/public-money/analys?group=year&scope=INVOICE&actor=legacy:actor:gavle'
Live
GET /api/public-money/sni
SNI-katalog (JSON)
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
Svar
- 200 application/json — {"data":[…],"meta":{…, system, parent, count}}.
- 400 application/json — {"error":{"code":"invalid_query",…}} — okänt system, ogiltig kod eller okänd parameter.
- 503 application/json — {"error":{"code":"source_unavailable",…}} — katalogen kunde inte läsas.
Svarsrubriker
- cache-control
- public, max-age=300 vid 200; no-store vid fel.
Fält i svarets data
classificationSystem · classificationVersion · code · label · level · parent
Exempel
curl -sS 'https://press0.xyz/api/public-money/sni?system=SNI2025&parent=J'
Live
GET /api/public-money/tackning
Täckning per datafamilj (JSON)
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.
Parametrar
- family
- valfri — Datafamilj, källans kod (t.ex. ACCOUNTING, INVOICE_HEADER, PAYMENT). Exempel:
INVOICE_HEADER - period
- valfri — År (fyra siffror) eller UNKNOWN. Exempel:
2023 - state
- valfri — Tillstånd, källans kod. Exempel:
PARTIAL - buyer
- valfri — Köparens exakta entitets-id. Exempel:
legacy:actor:gavle - limit
- valfri — Celler per sida, 1–500 (standard 500). Exempel:
100 - cursor
- valfri — Sidmarkör: meta.nextCursor från föregående svar.
Svar
- 200 application/json — {"data":[{subjectId, buyerId, family, period, state, declaredState, measurementState, completenessBasis, stateReason, coverageRatio, measuredMonths, declaredMonths, sourceRef}],"meta":{…, filters, count, limit, nextCursor, population}}.
- 400 application/json — {"error":{"code":"invalid_query",…}} — okänd parameter, ogiltig kod, period, limit eller sidmarkör.
- 503 application/json — {"error":{"code":"source_unavailable",…}} — täckningen kunde inte läsas. Aldrig "inget att visa" 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
subjectId · buyerId · family · period · state · declaredState · measurementState · completenessBasis · stateReason · coverageRatio · measuredMonths · declaredMonths · sourceRef
Exempel
curl -sS 'https://press0.xyz/api/public-money/tackning?family=INVOICE_HEADER&period=2023&limit=100'
Live
GET /api/public-money/geografi
Kommungeografi (JSON)
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.
Svar
- 200 application/json — {"data":[{entityId, code, name}],"meta":{…, count, boundaries}}, sorterad på kommunkod.
- 400 application/json — Rutten tar inga parametrar.
- 503 application/json — {"error":{"code":"source_unavailable",…}} — geografin kunde inte läsas eller var tom (källan har alltid kommuner; tomt är ett fel).
Svarsrubriker
- cache-control
- public, max-age=300 vid 200; no-store vid fel.
Fält i svarets data
entityId · code · name
Exempel
curl -sS 'https://press0.xyz/api/public-money/geografi'
Live
GET /api/v1/press0/openapi.json
OpenAPI 3.1 för PRESS0 API v1 (artiklar, ämnen, moduler, entiteter, datasets, dokument, källor, rättelser). Innehåller inga offentliga pengar-rutter.
Exempel: curl -sS https://press0.xyz/api/v1/press0/openapi.json