# getBolag: utvecklardokumentation > getBolag (getbolag.se) säljer svensk bolagsdata via REST-API och MCP till svenska företag för internt bruk: bolag, styrelser och roller, historik och bokslut. Datan levereras av Creditsafe i Sverige AB, och Bolagskällan AB (559555-5946) är återförsäljare; getBolag är ett varumärke i Bolagskällan AB. Live-data öppnas efter granskning; testnycklar (gb_test_…) fungerar mot en sandlåda med påhittade bolag. Genererad 2026-10-27T09:46:38.162Z. Senaste versionen: http://localhost:3020/llms-full.txt ## Kom igång på fem minuter Skapa konto, hämta en testnyckel och gör ditt första anrop mot sandlådan med curl, JavaScript eller Python. Källa: http://localhost:3020/docs getBolag ger dina egna system svensk bolagsdata: bolag, styrelser, historik och bokslut. Du hämtar den via ett REST-API eller via MCP i AI-verktyg som Claude och Cursor. Datan levereras av Creditsafe i Sverige AB, och Bolagskällan AB är återförsäljare. > **Live-data öppnas efter granskning.** Just nu fungerar testnycklar (`gb_test_…`) mot sandlådan, som har påhittade bolag. Live-nycklar svarar `blocked_by_phase` tills vi öppnar live-data. Allt du bygger mot sandlådan fungerar likadant mot live. Läs mer om [sandlådan](http://localhost:3020/docs/sandlada). ### 1. Skapa ett konto [Skapa ett konto](http://localhost:3020/registrera) med ditt företags organisationsnummer och din jobbmejl. Bekräfta e-postadressen via länken vi skickar. Testnycklar fungerar direkt, även medan vi granskar kontot. ### 2. Skapa en testnyckel Gå till [Konto → Nycklar](http://localhost:3020/konto) och välj **Skapa nyckel** med miljön **Test**. Nyckeln visas en gång. Spara den som en miljövariabel: ```bash export GETBOLAG_KEY="gb_test_…" ``` ### 3. Gör ditt första anrop Hämta Exempelbolaget i Norrland AB, `569900-0013`, ur sandlådan: curl: ```bash curl -s "http://localhost:3020/api/v1/companies/569900-0013" \ -H "Authorization: Bearer $GETBOLAG_KEY" ``` JavaScript: ```js const res = await fetch('http://localhost:3020/api/v1/companies/569900-0013', { headers: { Authorization: `Bearer ${process.env.GETBOLAG_KEY}` }, }) const body = await res.json() if (body.status !== 'ok') { throw new Error(`${body.error.code}: ${body.error.message}`) } console.log(body.data, body.meta.attribution) ``` Python: ```python import os import requests res = requests.get( "http://localhost:3020/api/v1/companies/569900-0013", headers={"Authorization": f"Bearer {os.environ['GETBOLAG_KEY']}"}, timeout=10, ) body = res.json() if body["status"] != "ok": raise RuntimeError(f"{body['error']['code']}: {body['error']['message']}") print(body["data"], body["meta"]["attribution"]) ``` Svaret har alltid `status`, `data` och `meta`. I `meta` står bland annat vad anropet kostade (`cost_sek`), varifrån datan kommer (`attribution`) och ett `request_id` som du anger om du kontaktar oss. Sandlådan kostar ingenting. > **Exemplen saknas just nu.** Svaren från sandlådan kunde inte genereras i den här miljön. Anropen fungerar som beskrivet. > Exemplet kunde inte genereras i den här miljön. ### 4. Nästa steg - [REST-API](http://localhost:3020/docs/api): Alla endpoints med parametrar, svar och felkoder. - [MCP](http://localhost:3020/docs/mcp): Anslut Claude, Claude Code eller Cursor till getBolag. - [Svarsformat](http://localhost:3020/docs/svarsformat): status, data, meta, täckningsstatus och attribution. - [Priser](http://localhost:3020/docs/priser): Pris per uppslag. Inte hittat debiteras inte. OpenAPI-specifikationen finns på [http://localhost:3020/openapi.json](http://localhost:3020/openapi.json). Hela dokumentationen som text för AI-verktyg finns på [/llms-full.txt](http://localhost:3020/llms-full.txt). ## Autentisering API-nycklar för live och test, scopes, en nyckel per användare, rotation och OAuth för MCP-klienter. Källa: http://localhost:3020/docs/autentisering Varje anrop skickar en nyckel eller en OAuth-token i headern `Authorization`. Skicka den aldrig i URL:en. ```http GET /api/v1/companies/569900-0013 HTTP/1.1 Host: localhost:3020 Authorization: Bearer gb_test_… ``` ### API-nycklar | Prefix | Miljö | Data | Kostnad | | --- | --- | --- | --- | | `gb_test_…` | Test | Sandlådan: påhittade bolag och personer | Gratis | | `gb_live_…` | Live | Registret, levererat av Creditsafe | Enligt [prislistan](http://localhost:3020/docs/priser) | - Du skapar nycklar under [Konto → Nycklar](http://localhost:3020/konto). Nyckeln visas **en gång**. Vi sparar bara en hash av den och kan inte visa den igen. - Varje nyckel hör till en namngiven användare. Vi har inga tjänstenycklar som delas av flera. Ska en kollega använda API:t bjuder du in kollegan, som skapar en egen nyckel. - När en användare tas bort från kontot slutar användarens nycklar och OAuth-anslutningar att fungera. - Testnycklar fungerar så fort e-postadressen är bekräftad, även medan kontot granskas. Live-nycklar kräver ett godkänt konto och att live-data är öppnad. - Prefixet `gb_` gör att en nyckel som hamnar i kod går att känna igen. Lägg nycklar i miljövariabler eller en hemlighetshanterare, aldrig i klientkod eller i ett repo. ### Scopes En nyckel har ett eller flera scopes. Som standard får en ny nyckel alla. Ge en nyckel bara de scopes systemet behöver. | Scope | Ger åtkomst till | Operationer | | --- | --- | --- | | `companies:read` | Sök och bolagsprofil | `search_companies`, `get_company`, `get_company_full` | | `roles:read` | Styrelse, roller och firmateckning | `get_company_roles` | | `history:read` | Historik och ändringar | `get_company_history` | | `financials:read` | Bokslut och nyckeltal (AB) | `get_financials` | | `persons:read` | Personers engagemang | `get_person_engagements` | Ett anrop utan rätt scope ger `403 insufficient_scope`. `GET /api/v1/account` kräver inget scope. ### Byta och återkalla nycklar 1. Skapa en ny nyckel med samma scopes. 2. Byt nyckeln i ditt system och kontrollera att anropen går igenom. 3. Återkalla den gamla nyckeln under Konto → Nycklar. Den slutar fungera direkt. Tror du att en nyckel har läckt: återkalla den först och skapa en ny sedan. Under Konto ser du när varje nyckel senast användes. ### Tak per nyckel Du kan ge en nyckel ett eget dygnstak i kronor. När taket är nått svarar nyckeln `402 key_daily_cap_reached` resten av dygnet. Det är ett bra skydd för nycklar som en AI-agent använder. Se [takt och tak](http://localhost:3020/docs/takt-och-tak). ### OAuth för MCP-klienter MCP-klienter som Claude och Cursor loggar in med OAuth 2.1 i stället för en nyckel. Du behöver inte göra något själv utom att logga in och godkänna åtkomsten. Det här är vad klienten gör: 1. Hämtar `http://localhost:3020/.well-known/oauth-protected-resource/mcp` och `http://localhost:3020/.well-known/oauth-authorization-server`. 2. Registrerar sig själv via `/oauth/register` (dynamisk klientregistrering). 3. Skickar dig till `/oauth/authorize`. Du loggar in på getBolag och ser kontot, klienten och vilka scopes den ber om. Du godkänner eller avböjer. 4. Hämtar token via `/oauth/token` med PKCE (S256). | Token | Prefix | Giltig | | --- | --- | --- | | Access token | `gbo_at_…` | 1 timme | | Refresh token | `gbo_rt_…` | 30 dagar. Byts vid varje användning; en gammal refresh token ger `invalid_grant`. | - Scopes för OAuth är desamma som för nycklar. - En OAuth-anslutning hör till användaren som godkände den, och räknas som live. Medan live-data inte är öppnad svarar den `blocked_by_phase`; använd då en testnyckel som header, se [MCP](http://localhost:3020/docs/mcp#nyckel). - Du ser och återkallar anslutna klienter under Konto. Klienten kan också återkalla sin token via `/oauth/revoke`. ## Sandlådan Påhittade bolag och personer för testnycklar. Live-data öppnas efter granskning. Källa: http://localhost:3020/docs/sandlada Sandlådan är en liten uppsättning påhittade bolag och personer. Alla anrop med en testnyckel (`gb_test_…`) går mot den. Den är gratis, svarar i samma format som live och fungerar alltid, även när live-data är stängd. > **Varför bara sandlådan just nu.** Live-data öppnas när granskningen av tjänsten är klar: villkoren, personuppgiftshanteringen och vårt utgivningsbevis. Tills dess svarar live-nycklar och OAuth-anslutningar `503 blocked_by_phase`. Bygg och testa mot sandlådan; när live öppnar byter du bara nyckel. ### Sandlådans bolag > **Exemplen saknas just nu.** Svaren från sandlådan kunde inte genereras i den här miljön. Anropen fungerar som beskrivet. | Organisationsnummer | Namn | Form | Status | Vad det visar | | --- | --- | --- | --- | --- | Sandlådan har också en enskild firma, Testfirman Tolvan. En enskild firmas organisationsnummer är innehavarens personnummer, så vi skriver inte ut det här. Den syns som `org_number_withheld: true` i innehavarens engagemang, se [personuppgifter](http://localhost:3020/docs/personuppgifter). `569900-0096` är ett giltigt nummer som inte finns i sandlådan. Använd det för att testa `404 not_found`. ### Sandlådans personer - **Testa Testsson**: VD och ledamot i Exempelbolaget i Norrland AB, tidigare ledamot i Fiktiva Konsult AB. - **Prov Provsdotter**: suppleant i Exempelbolaget i Norrland AB och VD i Provbyggarna Syd AB. - **Tolvan Tolvansson**: innehavare av Testfirman Tolvan. Personer har ingen egen sökning. Du hittar dem via bolagets [roller](http://localhost:3020/docs/api/roller) och följer deras `person_ref` till [engagemang](http://localhost:3020/docs/api/engagemang). ### Skillnader mot live - `meta.environment` är `test`, `meta.source` är `["sandbox"]` och `meta.cost_sek` är alltid 0. - `meta.attribution` säger att datan är påhittad. I live anger den Creditsafe som leverantör. - Takt, sökkvot och tak på antal bolag gäller även i sandlådan, så att du kan testa felhanteringen. - Statushistoriken är tom i sandlådan. ## REST-API Bas-URL, endpoints, operationer och priser i REST-API:t v1. Källa: http://localhost:3020/docs/api Bas-URL: `http://localhost:3020/api/v1`. Alla anrop är GET, tar en nyckel i `Authorization` och svarar med JSON. Versionen står i sökvägen; ändringar som bryter bakåtkompatibiliteten kommer bara i en ny version, se [changelog](http://localhost:3020/docs/changelog). | Endpoint | Operation | Scope | Pris | | --- | --- | --- | --- | | [`GET /api/v1/companies/search`](http://localhost:3020/docs/api/sok-bolag) | `search_companies` | `companies:read` | Gratis | | [`GET /api/v1/companies/{org_number}`](http://localhost:3020/docs/api/bolag) | `get_company` | `companies:read` | 0,05 kr | | [`GET /api/v1/companies/{org_number}`](http://localhost:3020/docs/api/bolag) | `get_company_full` | `companies:read` | 0,10 kr | | [`GET /api/v1/companies/{org_number}/roles`](http://localhost:3020/docs/api/roller) | `get_company_roles` | `roles:read` | 0,10 kr | | [`GET /api/v1/companies/{org_number}/history`](http://localhost:3020/docs/api/historik) | `get_company_history` | `history:read` | 0,50 kr | | [`GET /api/v1/companies/{org_number}/financials`](http://localhost:3020/docs/api/bokslut) | `get_financials` | `financials:read` | 0,10 kr | | [`GET /api/v1/persons/{person_ref}/engagements`](http://localhost:3020/docs/api/engagemang) | `get_person_engagements` | `persons:read` | 0,10 kr | | [`GET /api/v1/account`](http://localhost:3020/docs/api/konto) | – | – | Gratis | ### Gemensamt för alla anrop - Svaret är `{ "status": "ok", "data", "meta" }` eller `{ "status": "error", "error": { "code", "message" } }`. Se [svarsformat](http://localhost:3020/docs/svarsformat) och [felkoder](http://localhost:3020/docs/fel). - Organisationsnummer tas emot med eller utan bindestreck och returneras som `NNNNNN-NNNN`. - Skicka `Idempotency-Key` när du försöker igen efter ett nätverksfel, så debiteras samma uppslag inte två gånger. Se [takt och tak](http://localhost:3020/docs/takt-och-tak#idempotency-key). - Svaren cachas inte (`Cache-Control: no-store`). - OpenAPI 3: [http://localhost:3020/openapi.json](http://localhost:3020/openapi.json). ### Endpoints - [Sök bolag](http://localhost:3020/docs/api/sok-bolag): Hitta bolag på namn eller organisationsnummer. Högst tio träffar. Gratis, upp till 1 000 sökningar per dygn. - [Hämta bolag](http://localhost:3020/docs/api/bolag): Bolagsprofil: namn, form, status, säte och bransch. Med detail=full även adresser, F-skatt, moms, verksamhet, tidigare namn och aktiekapital. - [Styrelse och roller](http://localhost:3020/docs/api/roller): Styrelse, VD, suppleanter och revisor med person_ref, och bolagets firmateckning. - [Historik och ändringar](http://localhost:3020/docs/api/historik): Registrerade ändringar (styrelse, adress, årsredovisning med mera) sedan ett datum, och bolagets statushistorik. - [Bokslut och nyckeltal](http://localhost:3020/docs/api/bokslut): Resultat- och balansräkning i tusental kronor och nyckeltal för upp till fem år. Bara aktiebolag. - [Personers engagemang](http://localhost:3020/docs/api/engagemang): Alla bolag där en person har eller har haft ett uppdrag. Personen anges med person_ref från ett rollsvar. - [Konto och saldo](http://localhost:3020/docs/api/konto): Ditt konto, saldot, månadens förbrukning och nyckelns scopes och miljö. Gratis och mäts inte. ## Sök bolag Hitta bolag på namn eller organisationsnummer. Högst tio träffar. Gratis, upp till 1 000 sökningar per dygn. Källa: http://localhost:3020/docs/api/sok-bolag ```http GET /api/v1/companies/search ``` | Operation | Scope | Pris per uppslag | | --- | --- | --- | | `search_companies` (sök bolag) | `companies:read` | Gratis | ### Parametrar | Namn | Var | Typ | Standard | Beskrivning | | --- | --- | --- | --- | --- | | `q` (krävs) | query | string | – | Namn eller organisationsnummer. Ett namn behöver minst fyra bokstäver eller siffror. Ett nummer slås upp direkt och ger högst en träff. | | `limit` | query | integer 1–10 | `10` | Antal träffar. Mer än tio går inte; sökningen är till för att hitta rätt bolag, inte för att lista registret. | | `only_active` | query | boolean | `false` | `true` utesluter avregistrerade bolag. | Headers: `Authorization: Bearer …` (krävs) och `Idempotency-Key` (valfri). ### Exempel > **Exemplen saknas just nu.** Svaren från sandlådan kunde inte genereras i den här miljön. Anropen fungerar som beskrivet. #### Sök på namn curl: ```bash curl -s "http://localhost:3020/api/v1/companies/search?q=exempel&limit=10" \ -H "Authorization: Bearer $GETBOLAG_KEY" ``` JavaScript: ```js const res = await fetch('http://localhost:3020/api/v1/companies/search?q=exempel&limit=10', { headers: { Authorization: `Bearer ${process.env.GETBOLAG_KEY}` }, }) const body = await res.json() if (body.status !== 'ok') { throw new Error(`${body.error.code}: ${body.error.message}`) } console.log(body.data, body.meta.attribution) ``` Python: ```python import os import requests res = requests.get( "http://localhost:3020/api/v1/companies/search?q=exempel&limit=10", headers={"Authorization": f"Bearer {os.environ['GETBOLAG_KEY']}"}, timeout=10, ) body = res.json() if body["status"] != "ok": raise RuntimeError(f"{body['error']['code']}: {body['error']['message']}") print(body["data"], body["meta"]["attribution"]) ``` > Exemplet kunde inte genereras i den här miljön. #### Sök på organisationsnummer ```bash curl -s "http://localhost:3020/api/v1/companies/search?q=5699000021" \ -H "Authorization: Bearer $GETBOLAG_KEY" ``` > Exemplet kunde inte genereras i den här miljön. #### För kort sökning ```bash curl -s "http://localhost:3020/api/v1/companies/search?q=ab" \ -H "Authorization: Bearer $GETBOLAG_KEY" ``` > Exemplet kunde inte genereras i den här miljön. ### Om svaret - `match` är `exact` när du sökte på organisationsnummer, `normalized` när namnet börjar med det du skrev och `similar` för övriga träffar. - Sökningen ger aldrig fler än tio träffar och går inte att bläddra i. Den är till för att hitta rätt bolag, inte för att lista registret. - En enskild firma hittas bara om du söker på dess nummer. Det finns ingen personsökning; ett personnummer som inte är en firma ger inga träffar. - Sökningen är gratis men har en kvot på 1 000 per konto och dygn. En sökning på organisationsnummer räknas också mot taket för antal olika bolag per dygn. ### Felkoder | Kod | HTTP | Vad du gör | | --- | --- | --- | | `invalid_query` | 400 | Skicka `q` med ett namn eller ett organisationsnummer. | | `query_too_short` | 400 | Skriv mer av namnet. | | `invalid_parameter` | 400 | Kontrollera parametrarna mot endpointens tabell. Okända parametrar avvisas i stället för att ignoreras. | | `search_quota_exceeded` | 429 | Vänta till nästa dygn, eller slå upp bolag direkt på organisationsnummer. | | `entity_cap_exceeded` | 429 | Bolag och personer du redan hämtat i dag går att hämta igen. Behöver du ett högre tak, kontakta support. | | `unauthorized` | 401 | Skicka `Authorization: Bearer gb_test_…` eller `gb_live_…`. Kontrollera att hela nyckeln kom med. En OAuth-token gäller en timme; förnya den med refresh-token. | | `insufficient_scope` | 403 | Skapa en nyckel med rätt scope under Konto → Nycklar. Se [scopes](http://localhost:3020/docs/autentisering#scopes). | | `email_not_verified` | 403 | Klicka på länken i bekräftelsemejlet, eller skicka ett nytt från Konto. | | `user_disabled` | 403 | Be kontots ägare att aktivera användaren, eller använd en egen nyckel. | | `account_not_active` | 403 | Använd en testnyckel tills kontot är godkänt. Status syns under Konto. | | `blocked_by_phase` | 503 | Använd en testnyckel mot sandlådan. Vi meddelar när live-data öppnar. Se [sandlådan](http://localhost:3020/docs/sandlada). | | `suspended` | 503 | Kontakta support@getbolag.se. | | `rate_limited` | 429 | Vänta så många sekunder som `Retry-After` anger och försök igen. Se [takt och tak](http://localhost:3020/docs/takt-och-tak). | | `insufficient_credits` | 402 | Fyll på under Konto → Krediter. | | `monthly_cap_reached` | 402 | Höj taket under Konto, eller vänta till nästa månad. | | `key_daily_cap_reached` | 402 | Höj nyckelns tak under Konto → Nycklar, eller vänta till nästa dygn. | | `invalid_idempotency_key` | 400 | Skicka ett kort, unikt värde per uppslag, till exempel ett UUID. | | `idempotency_key_reused` | 422 | Använd en ny nyckel för varje nytt uppslag. Samma nyckel gäller bara när exakt samma anrop görs om. Se [Idempotency-Key](http://localhost:3020/docs/takt-och-tak#idempotency-key). | | `internal_error` | 500 | Försök igen med samma `Idempotency-Key`. Ange `request_id` om du kontaktar support. | Samma uppslag i MCP: verktyget `gb_search_companies`. Se [MCP](http://localhost:3020/docs/mcp#verktyg). ## Hämta bolag Bolagsprofil: namn, form, status, säte och bransch. Med detail=full även adresser, F-skatt, moms, verksamhet, tidigare namn och aktiekapital. Källa: http://localhost:3020/docs/api/bolag ```http GET /api/v1/companies/{org_number} ``` | Operation | Scope | Pris per uppslag | | --- | --- | --- | | `get_company` (bolag, kort profil) | `companies:read` | 0,05 kr | | `get_company_full` (bolag, hela profilen (detail=full)) | `companies:read` | 0,10 kr | ### Parametrar | Namn | Var | Typ | Standard | Beskrivning | | --- | --- | --- | --- | --- | | `org_number` (krävs) | path | string | – | Organisationsnummer, tio siffror med eller utan bindestreck (`569900-0013` eller `5699000013`). Tolv siffror med sekel går också. | | `detail` | query | "concise" \| "full" | `concise` | `concise` ger en kort profil (cirka 300 tokens). `full` ger hela profilen och kostar mer. | Headers: `Authorization: Bearer …` (krävs) och `Idempotency-Key` (valfri). ### Exempel > **Exemplen saknas just nu.** Svaren från sandlådan kunde inte genereras i den här miljön. Anropen fungerar som beskrivet. #### Kort profil curl: ```bash curl -s "http://localhost:3020/api/v1/companies/569900-0013" \ -H "Authorization: Bearer $GETBOLAG_KEY" ``` JavaScript: ```js const res = await fetch('http://localhost:3020/api/v1/companies/569900-0013', { headers: { Authorization: `Bearer ${process.env.GETBOLAG_KEY}` }, }) const body = await res.json() if (body.status !== 'ok') { throw new Error(`${body.error.code}: ${body.error.message}`) } console.log(body.data, body.meta.attribution) ``` Python: ```python import os import requests res = requests.get( "http://localhost:3020/api/v1/companies/569900-0013", headers={"Authorization": f"Bearer {os.environ['GETBOLAG_KEY']}"}, timeout=10, ) body = res.json() if body["status"] != "ok": raise RuntimeError(f"{body['error']['code']}: {body['error']['message']}") print(body["data"], body["meta"]["attribution"]) ``` > Exemplet kunde inte genereras i den här miljön. #### Hela profilen ```bash curl -s "http://localhost:3020/api/v1/companies/569900-0013?detail=full" \ -H "Authorization: Bearer $GETBOLAG_KEY" ``` > Exemplet kunde inte genereras i den här miljön. #### Bolaget finns inte ```bash curl -s "http://localhost:3020/api/v1/companies/569900-0096" \ -H "Authorization: Bearer $GETBOLAG_KEY" ``` > Exemplet kunde inte genereras i den här miljön. #### Felaktigt organisationsnummer ```bash curl -s "http://localhost:3020/api/v1/companies/569900-0014" \ -H "Authorization: Bearer $GETBOLAG_KEY" ``` > Exemplet kunde inte genereras i den här miljön. ### Om svaret - `status.active` är `true` för bolag som inte är avregistrerade eller upplösta. - `is_sole_trader` är `true` för enskilda firmor. - `industry.sni_code` är SNI 2007 med fem siffror. - Med `detail=full` tillkommer bland annat `addresses`, `f_tax`, `vat`, `business_activity`, `previous_names` och `share_capital`. `coverage` säger för varje sektion om något fanns. - Fält som saknas i registret är `null`. `null` betyder okänt, inte noll eller nej. ### Felkoder | Kod | HTTP | Vad du gör | | --- | --- | --- | | `invalid_org_number` | 400 | Skicka tio siffror, med eller utan bindestreck, till exempel `569900-0013`. | | `invalid_parameter` | 400 | Kontrollera parametrarna mot endpointens tabell. Okända parametrar avvisas i stället för att ignoreras. | | `not_found` | 404 | Kontrollera numret. Inte hittat debiteras inte. | | `entity_cap_exceeded` | 429 | Bolag och personer du redan hämtat i dag går att hämta igen. Behöver du ett högre tak, kontakta support. | | `unauthorized` | 401 | Skicka `Authorization: Bearer gb_test_…` eller `gb_live_…`. Kontrollera att hela nyckeln kom med. En OAuth-token gäller en timme; förnya den med refresh-token. | | `insufficient_scope` | 403 | Skapa en nyckel med rätt scope under Konto → Nycklar. Se [scopes](http://localhost:3020/docs/autentisering#scopes). | | `email_not_verified` | 403 | Klicka på länken i bekräftelsemejlet, eller skicka ett nytt från Konto. | | `user_disabled` | 403 | Be kontots ägare att aktivera användaren, eller använd en egen nyckel. | | `account_not_active` | 403 | Använd en testnyckel tills kontot är godkänt. Status syns under Konto. | | `blocked_by_phase` | 503 | Använd en testnyckel mot sandlådan. Vi meddelar när live-data öppnar. Se [sandlådan](http://localhost:3020/docs/sandlada). | | `suspended` | 503 | Kontakta support@getbolag.se. | | `rate_limited` | 429 | Vänta så många sekunder som `Retry-After` anger och försök igen. Se [takt och tak](http://localhost:3020/docs/takt-och-tak). | | `insufficient_credits` | 402 | Fyll på under Konto → Krediter. | | `monthly_cap_reached` | 402 | Höj taket under Konto, eller vänta till nästa månad. | | `key_daily_cap_reached` | 402 | Höj nyckelns tak under Konto → Nycklar, eller vänta till nästa dygn. | | `invalid_idempotency_key` | 400 | Skicka ett kort, unikt värde per uppslag, till exempel ett UUID. | | `idempotency_key_reused` | 422 | Använd en ny nyckel för varje nytt uppslag. Samma nyckel gäller bara när exakt samma anrop görs om. Se [Idempotency-Key](http://localhost:3020/docs/takt-och-tak#idempotency-key). | | `internal_error` | 500 | Försök igen med samma `Idempotency-Key`. Ange `request_id` om du kontaktar support. | Samma uppslag i MCP: verktyget `gb_get_company`. Se [MCP](http://localhost:3020/docs/mcp#verktyg). ## Styrelse och roller Styrelse, VD, suppleanter och revisor med person_ref, och bolagets firmateckning. Källa: http://localhost:3020/docs/api/roller ```http GET /api/v1/companies/{org_number}/roles ``` | Operation | Scope | Pris per uppslag | | --- | --- | --- | | `get_company_roles` (styrelse och roller) | `roles:read` | 0,10 kr | ### Parametrar | Namn | Var | Typ | Standard | Beskrivning | | --- | --- | --- | --- | --- | | `org_number` (krävs) | path | string | – | Organisationsnummer, tio siffror med eller utan bindestreck (`569900-0013` eller `5699000013`). Tolv siffror med sekel går också. | | `include_former` | query | boolean | `false` | `true` tar med personer som har lämnat sina uppdrag. | Headers: `Authorization: Bearer …` (krävs) och `Idempotency-Key` (valfri). ### Exempel > **Exemplen saknas just nu.** Svaren från sandlådan kunde inte genereras i den här miljön. Anropen fungerar som beskrivet. #### Nuvarande roller curl: ```bash curl -s "http://localhost:3020/api/v1/companies/569900-0013/roles" \ -H "Authorization: Bearer $GETBOLAG_KEY" ``` JavaScript: ```js const res = await fetch('http://localhost:3020/api/v1/companies/569900-0013/roles', { headers: { Authorization: `Bearer ${process.env.GETBOLAG_KEY}` }, }) const body = await res.json() if (body.status !== 'ok') { throw new Error(`${body.error.code}: ${body.error.message}`) } console.log(body.data, body.meta.attribution) ``` Python: ```python import os import requests res = requests.get( "http://localhost:3020/api/v1/companies/569900-0013/roles", headers={"Authorization": f"Bearer {os.environ['GETBOLAG_KEY']}"}, timeout=10, ) body = res.json() if body["status"] != "ok": raise RuntimeError(f"{body['error']['code']}: {body['error']['message']}") print(body["data"], body["meta"]["attribution"]) ``` > Exemplet kunde inte genereras i den här miljön. #### Avregistrerat bolag, med tidigare roller ```bash curl -s "http://localhost:3020/api/v1/companies/569900-0039/roles?include_former=true" \ -H "Authorization: Bearer $GETBOLAG_KEY" ``` > Exemplet kunde inte genereras i den här miljön. ### Om svaret - Varje fysisk person har en `person_ref` som du använder för [engagemang](http://localhost:3020/docs/api/engagemang). Den är krypterad, bunden till ditt konto och stabil: samma person får samma ref i alla dina svar. - Vi lämnar aldrig ut personnummer. Se [personuppgifter](http://localhost:3020/docs/personuppgifter). - Revisorer och andra juridiska personer har `person_ref: null` och i stället `legal_entity.org_number`. - `signatory_rights` är firmateckningen som text, rad för rad. ### Felkoder | Kod | HTTP | Vad du gör | | --- | --- | --- | | `invalid_org_number` | 400 | Skicka tio siffror, med eller utan bindestreck, till exempel `569900-0013`. | | `invalid_parameter` | 400 | Kontrollera parametrarna mot endpointens tabell. Okända parametrar avvisas i stället för att ignoreras. | | `not_found` | 404 | Kontrollera numret. Inte hittat debiteras inte. | | `entity_cap_exceeded` | 429 | Bolag och personer du redan hämtat i dag går att hämta igen. Behöver du ett högre tak, kontakta support. | | `unauthorized` | 401 | Skicka `Authorization: Bearer gb_test_…` eller `gb_live_…`. Kontrollera att hela nyckeln kom med. En OAuth-token gäller en timme; förnya den med refresh-token. | | `insufficient_scope` | 403 | Skapa en nyckel med rätt scope under Konto → Nycklar. Se [scopes](http://localhost:3020/docs/autentisering#scopes). | | `email_not_verified` | 403 | Klicka på länken i bekräftelsemejlet, eller skicka ett nytt från Konto. | | `user_disabled` | 403 | Be kontots ägare att aktivera användaren, eller använd en egen nyckel. | | `account_not_active` | 403 | Använd en testnyckel tills kontot är godkänt. Status syns under Konto. | | `blocked_by_phase` | 503 | Använd en testnyckel mot sandlådan. Vi meddelar när live-data öppnar. Se [sandlådan](http://localhost:3020/docs/sandlada). | | `suspended` | 503 | Kontakta support@getbolag.se. | | `rate_limited` | 429 | Vänta så många sekunder som `Retry-After` anger och försök igen. Se [takt och tak](http://localhost:3020/docs/takt-och-tak). | | `insufficient_credits` | 402 | Fyll på under Konto → Krediter. | | `monthly_cap_reached` | 402 | Höj taket under Konto, eller vänta till nästa månad. | | `key_daily_cap_reached` | 402 | Höj nyckelns tak under Konto → Nycklar, eller vänta till nästa dygn. | | `invalid_idempotency_key` | 400 | Skicka ett kort, unikt värde per uppslag, till exempel ett UUID. | | `idempotency_key_reused` | 422 | Använd en ny nyckel för varje nytt uppslag. Samma nyckel gäller bara när exakt samma anrop görs om. Se [Idempotency-Key](http://localhost:3020/docs/takt-och-tak#idempotency-key). | | `internal_error` | 500 | Försök igen med samma `Idempotency-Key`. Ange `request_id` om du kontaktar support. | Samma uppslag i MCP: verktyget `gb_get_company_roles`. Se [MCP](http://localhost:3020/docs/mcp#verktyg). ## Historik och ändringar Registrerade ändringar (styrelse, adress, årsredovisning med mera) sedan ett datum, och bolagets statushistorik. Källa: http://localhost:3020/docs/api/historik ```http GET /api/v1/companies/{org_number}/history ``` | Operation | Scope | Pris per uppslag | | --- | --- | --- | | `get_company_history` (historik och ändringar) | `history:read` | 0,50 kr | ### Parametrar | Namn | Var | Typ | Standard | Beskrivning | | --- | --- | --- | --- | --- | | `org_number` (krävs) | path | string | – | Organisationsnummer, tio siffror med eller utan bindestreck (`569900-0013` eller `5699000013`). Tolv siffror med sekel går också. | | `since` | query | date (ÅÅÅÅ-MM-DD) | – | Bara ändringar från och med datumet. Utan `since` kommer de senaste ändringarna. | | `limit` | query | integer 1–200 | `50` | Högst så många ändringar, nyast först. | Headers: `Authorization: Bearer …` (krävs) och `Idempotency-Key` (valfri). ### Exempel > **Exemplen saknas just nu.** Svaren från sandlådan kunde inte genereras i den här miljön. Anropen fungerar som beskrivet. #### Ändringar sedan 1 januari 2026 curl: ```bash curl -s "http://localhost:3020/api/v1/companies/569900-0013/history?since=2026-01-01" \ -H "Authorization: Bearer $GETBOLAG_KEY" ``` JavaScript: ```js const res = await fetch('http://localhost:3020/api/v1/companies/569900-0013/history?since=2026-01-01', { headers: { Authorization: `Bearer ${process.env.GETBOLAG_KEY}` }, }) const body = await res.json() if (body.status !== 'ok') { throw new Error(`${body.error.code}: ${body.error.message}`) } console.log(body.data, body.meta.attribution) ``` Python: ```python import os import requests res = requests.get( "http://localhost:3020/api/v1/companies/569900-0013/history?since=2026-01-01", headers={"Authorization": f"Bearer {os.environ['GETBOLAG_KEY']}"}, timeout=10, ) body = res.json() if body["status"] != "ok": raise RuntimeError(f"{body['error']['code']}: {body['error']['message']}") print(body["data"], body["meta"]["attribution"]) ``` > Exemplet kunde inte genereras i den här miljön. #### Felaktigt datum ```bash curl -s "http://localhost:3020/api/v1/companies/569900-0013/history?since=1%20januari" \ -H "Authorization: Bearer $GETBOLAG_KEY" ``` > Exemplet kunde inte genereras i den här miljön. ### Om svaret - `events` är registrerade ändringar, nyast först, med `code` och en svensk text. - `events_coverage` anger perioden vi har ändringar för. Ändringar före `from` finns inte i tjänsten, och ett tomt svar betyder att inget ändrats inom perioden. - `status_history` visar bolagets status och form över tid, med `valid_from` och `valid_to`. ### Felkoder | Kod | HTTP | Vad du gör | | --- | --- | --- | | `invalid_org_number` | 400 | Skicka tio siffror, med eller utan bindestreck, till exempel `569900-0013`. | | `invalid_since` | 400 | Skicka datumet som ÅÅÅÅ-MM-DD, till exempel `2026-01-01`. | | `invalid_parameter` | 400 | Kontrollera parametrarna mot endpointens tabell. Okända parametrar avvisas i stället för att ignoreras. | | `not_found` | 404 | Kontrollera numret. Inte hittat debiteras inte. | | `entity_cap_exceeded` | 429 | Bolag och personer du redan hämtat i dag går att hämta igen. Behöver du ett högre tak, kontakta support. | | `unauthorized` | 401 | Skicka `Authorization: Bearer gb_test_…` eller `gb_live_…`. Kontrollera att hela nyckeln kom med. En OAuth-token gäller en timme; förnya den med refresh-token. | | `insufficient_scope` | 403 | Skapa en nyckel med rätt scope under Konto → Nycklar. Se [scopes](http://localhost:3020/docs/autentisering#scopes). | | `email_not_verified` | 403 | Klicka på länken i bekräftelsemejlet, eller skicka ett nytt från Konto. | | `user_disabled` | 403 | Be kontots ägare att aktivera användaren, eller använd en egen nyckel. | | `account_not_active` | 403 | Använd en testnyckel tills kontot är godkänt. Status syns under Konto. | | `blocked_by_phase` | 503 | Använd en testnyckel mot sandlådan. Vi meddelar när live-data öppnar. Se [sandlådan](http://localhost:3020/docs/sandlada). | | `suspended` | 503 | Kontakta support@getbolag.se. | | `rate_limited` | 429 | Vänta så många sekunder som `Retry-After` anger och försök igen. Se [takt och tak](http://localhost:3020/docs/takt-och-tak). | | `insufficient_credits` | 402 | Fyll på under Konto → Krediter. | | `monthly_cap_reached` | 402 | Höj taket under Konto, eller vänta till nästa månad. | | `key_daily_cap_reached` | 402 | Höj nyckelns tak under Konto → Nycklar, eller vänta till nästa dygn. | | `invalid_idempotency_key` | 400 | Skicka ett kort, unikt värde per uppslag, till exempel ett UUID. | | `idempotency_key_reused` | 422 | Använd en ny nyckel för varje nytt uppslag. Samma nyckel gäller bara när exakt samma anrop görs om. Se [Idempotency-Key](http://localhost:3020/docs/takt-och-tak#idempotency-key). | | `internal_error` | 500 | Försök igen med samma `Idempotency-Key`. Ange `request_id` om du kontaktar support. | Samma uppslag i MCP: verktyget `gb_get_company_history`. Se [MCP](http://localhost:3020/docs/mcp#verktyg). ## Bokslut och nyckeltal Resultat- och balansräkning i tusental kronor och nyckeltal för upp till fem år. Bara aktiebolag. Källa: http://localhost:3020/docs/api/bokslut ```http GET /api/v1/companies/{org_number}/financials ``` | Operation | Scope | Pris per uppslag | | --- | --- | --- | | `get_financials` (bokslut och nyckeltal) | `financials:read` | 0,10 kr | ### Parametrar | Namn | Var | Typ | Standard | Beskrivning | | --- | --- | --- | --- | --- | | `org_number` (krävs) | path | string | – | Organisationsnummer, tio siffror med eller utan bindestreck (`569900-0013` eller `5699000013`). Tolv siffror med sekel går också. | | `years` | query | integer 1–5 | `5` | Antal räkenskapsår, senaste först. | Headers: `Authorization: Bearer …` (krävs) och `Idempotency-Key` (valfri). ### Exempel > **Exemplen saknas just nu.** Svaren från sandlådan kunde inte genereras i den här miljön. Anropen fungerar som beskrivet. #### Tre år för ett aktiebolag curl: ```bash curl -s "http://localhost:3020/api/v1/companies/569900-0013/financials?years=3" \ -H "Authorization: Bearer $GETBOLAG_KEY" ``` JavaScript: ```js const res = await fetch('http://localhost:3020/api/v1/companies/569900-0013/financials?years=3', { headers: { Authorization: `Bearer ${process.env.GETBOLAG_KEY}` }, }) const body = await res.json() if (body.status !== 'ok') { throw new Error(`${body.error.code}: ${body.error.message}`) } console.log(body.data, body.meta.attribution) ``` Python: ```python import os import requests res = requests.get( "http://localhost:3020/api/v1/companies/569900-0013/financials?years=3", headers={"Authorization": f"Bearer {os.environ['GETBOLAG_KEY']}"}, timeout=10, ) body = res.json() if body["status"] != "ok": raise RuntimeError(f"{body['error']['code']}: {body['error']['message']}") print(body["data"], body["meta"]["attribution"]) ``` > Exemplet kunde inte genereras i den här miljön. #### Handelsbolag: inga bokslut (restricted, debiteras inte) ```bash curl -s "http://localhost:3020/api/v1/companies/969900-0049/financials" \ -H "Authorization: Bearer $GETBOLAG_KEY" ``` > Exemplet kunde inte genereras i den här miljön. ### Om svaret - Belopp i `amounts_tsek` är i tusental kronor (`currency_unit: "tsek"`). Nyckeltal i `ratios` är procent eller kvoter enligt fältnamnet. - Bokslut finns bara för aktiebolag. För andra bolagsformer är `coverage.financials` `restricted`, `statements` tom och anropet debiteras inte. - Ett fält som är `null` saknas i bokslutet. Det betyder inte noll. - Bokslut och nyckeltal är underlag för ditt eget arbete. De är ingen kreditupplysning eller kreditbedömning. ### Felkoder | Kod | HTTP | Vad du gör | | --- | --- | --- | | `invalid_org_number` | 400 | Skicka tio siffror, med eller utan bindestreck, till exempel `569900-0013`. | | `invalid_parameter` | 400 | Kontrollera parametrarna mot endpointens tabell. Okända parametrar avvisas i stället för att ignoreras. | | `not_found` | 404 | Kontrollera numret. Inte hittat debiteras inte. | | `entity_cap_exceeded` | 429 | Bolag och personer du redan hämtat i dag går att hämta igen. Behöver du ett högre tak, kontakta support. | | `unauthorized` | 401 | Skicka `Authorization: Bearer gb_test_…` eller `gb_live_…`. Kontrollera att hela nyckeln kom med. En OAuth-token gäller en timme; förnya den med refresh-token. | | `insufficient_scope` | 403 | Skapa en nyckel med rätt scope under Konto → Nycklar. Se [scopes](http://localhost:3020/docs/autentisering#scopes). | | `email_not_verified` | 403 | Klicka på länken i bekräftelsemejlet, eller skicka ett nytt från Konto. | | `user_disabled` | 403 | Be kontots ägare att aktivera användaren, eller använd en egen nyckel. | | `account_not_active` | 403 | Använd en testnyckel tills kontot är godkänt. Status syns under Konto. | | `blocked_by_phase` | 503 | Använd en testnyckel mot sandlådan. Vi meddelar när live-data öppnar. Se [sandlådan](http://localhost:3020/docs/sandlada). | | `suspended` | 503 | Kontakta support@getbolag.se. | | `rate_limited` | 429 | Vänta så många sekunder som `Retry-After` anger och försök igen. Se [takt och tak](http://localhost:3020/docs/takt-och-tak). | | `insufficient_credits` | 402 | Fyll på under Konto → Krediter. | | `monthly_cap_reached` | 402 | Höj taket under Konto, eller vänta till nästa månad. | | `key_daily_cap_reached` | 402 | Höj nyckelns tak under Konto → Nycklar, eller vänta till nästa dygn. | | `invalid_idempotency_key` | 400 | Skicka ett kort, unikt värde per uppslag, till exempel ett UUID. | | `idempotency_key_reused` | 422 | Använd en ny nyckel för varje nytt uppslag. Samma nyckel gäller bara när exakt samma anrop görs om. Se [Idempotency-Key](http://localhost:3020/docs/takt-och-tak#idempotency-key). | | `internal_error` | 500 | Försök igen med samma `Idempotency-Key`. Ange `request_id` om du kontaktar support. | Samma uppslag i MCP: verktyget `gb_get_financials`. Se [MCP](http://localhost:3020/docs/mcp#verktyg). ## Personers engagemang Alla bolag där en person har eller har haft ett uppdrag. Personen anges med person_ref från ett rollsvar. Källa: http://localhost:3020/docs/api/engagemang ```http GET /api/v1/persons/{person_ref}/engagements ``` | Operation | Scope | Pris per uppslag | | --- | --- | --- | | `get_person_engagements` (personers engagemang) | `persons:read` | 0,10 kr | ### Parametrar | Namn | Var | Typ | Standard | Beskrivning | | --- | --- | --- | --- | --- | | `person_ref` (krävs) | path | string | – | Handtaget `pr_…` från ett svar på [roller](http://localhost:3020/docs/api/roller). Det är bundet till ditt konto. | | `include_former` | query | boolean | `false` | `true` tar med avslutade uppdrag. | Headers: `Authorization: Bearer …` (krävs) och `Idempotency-Key` (valfri). ### Exempel > **Exemplen saknas just nu.** Svaren från sandlådan kunde inte genereras i den här miljön. Anropen fungerar som beskrivet. #### Engagemang, även tidigare curl: ```bash curl -s "http://localhost:3020/api/v1/persons/$PERSON_REF/engagements?include_former=true" \ -H "Authorization: Bearer $GETBOLAG_KEY" ``` JavaScript: ```js const personRef = 'pr_…' // från ett svar på /roles const res = await fetch(`http://localhost:3020/api/v1/persons/${personRef}/engagements?include_former=true`, { headers: { Authorization: `Bearer ${process.env.GETBOLAG_KEY}` }, }) const body = await res.json() if (body.status !== 'ok') { throw new Error(`${body.error.code}: ${body.error.message}`) } console.log(body.data, body.meta.attribution) ``` Python: ```python import os import requests person_ref = "pr_…" # från ett svar på /roles res = requests.get( f"http://localhost:3020/api/v1/persons/{person_ref}/engagements?include_former=true", headers={"Authorization": f"Bearer {os.environ['GETBOLAG_KEY']}"}, timeout=10, ) body = res.json() if body["status"] != "ok": raise RuntimeError(f"{body['error']['code']}: {body['error']['message']}") print(body["data"], body["meta"]["attribution"]) ``` > Exemplet kunde inte genereras i den här miljön. #### Okänd person_ref ```bash curl -s "http://localhost:3020/api/v1/persons/pr_finnsinte/engagements" \ -H "Authorization: Bearer $GETBOLAG_KEY" ``` > Exemplet kunde inte genereras i den här miljön. ### Om svaret - Engagemangen är personens uppdrag i alla bolag, med roll och datum. - En enskild firmas organisationsnummer är innehavarens personnummer. Därför är `company.org_number` `null` och `org_number_withheld` `true` för enskilda firmor i den här listan. - En `person_ref` från ett annat konto, eller ett påhittat värde, ger `400 invalid_person_ref`. - Varje person räknas mot taket för antal olika bolag och personer per dygn, se [takt och tak](http://localhost:3020/docs/takt-och-tak). ### Felkoder | Kod | HTTP | Vad du gör | | --- | --- | --- | | `invalid_person_ref` | 400 | Hämta personens person_ref på nytt via bolagets [roller](http://localhost:3020/docs/api/roller). | | `invalid_parameter` | 400 | Kontrollera parametrarna mot endpointens tabell. Okända parametrar avvisas i stället för att ignoreras. | | `entity_cap_exceeded` | 429 | Bolag och personer du redan hämtat i dag går att hämta igen. Behöver du ett högre tak, kontakta support. | | `unauthorized` | 401 | Skicka `Authorization: Bearer gb_test_…` eller `gb_live_…`. Kontrollera att hela nyckeln kom med. En OAuth-token gäller en timme; förnya den med refresh-token. | | `insufficient_scope` | 403 | Skapa en nyckel med rätt scope under Konto → Nycklar. Se [scopes](http://localhost:3020/docs/autentisering#scopes). | | `email_not_verified` | 403 | Klicka på länken i bekräftelsemejlet, eller skicka ett nytt från Konto. | | `user_disabled` | 403 | Be kontots ägare att aktivera användaren, eller använd en egen nyckel. | | `account_not_active` | 403 | Använd en testnyckel tills kontot är godkänt. Status syns under Konto. | | `blocked_by_phase` | 503 | Använd en testnyckel mot sandlådan. Vi meddelar när live-data öppnar. Se [sandlådan](http://localhost:3020/docs/sandlada). | | `suspended` | 503 | Kontakta support@getbolag.se. | | `rate_limited` | 429 | Vänta så många sekunder som `Retry-After` anger och försök igen. Se [takt och tak](http://localhost:3020/docs/takt-och-tak). | | `insufficient_credits` | 402 | Fyll på under Konto → Krediter. | | `monthly_cap_reached` | 402 | Höj taket under Konto, eller vänta till nästa månad. | | `key_daily_cap_reached` | 402 | Höj nyckelns tak under Konto → Nycklar, eller vänta till nästa dygn. | | `invalid_idempotency_key` | 400 | Skicka ett kort, unikt värde per uppslag, till exempel ett UUID. | | `idempotency_key_reused` | 422 | Använd en ny nyckel för varje nytt uppslag. Samma nyckel gäller bara när exakt samma anrop görs om. Se [Idempotency-Key](http://localhost:3020/docs/takt-och-tak#idempotency-key). | | `internal_error` | 500 | Försök igen med samma `Idempotency-Key`. Ange `request_id` om du kontaktar support. | Samma uppslag i MCP: verktyget `gb_get_person_engagements`. Se [MCP](http://localhost:3020/docs/mcp#verktyg). ## Konto och saldo Ditt konto, saldot, månadens förbrukning och nyckelns scopes och miljö. Gratis och mäts inte. Källa: http://localhost:3020/docs/api/konto ```http GET /api/v1/account ``` Headers: `Authorization: Bearer …` (krävs) och `Idempotency-Key` (valfri). Anropet är gratis, mäts inte och räknas inte mot någon kvot utom takten per minut. Det fungerar också när live-data är stängd, så det passar som hälsokontroll av en nyckel. ### Exempel curl: ```bash curl -s "http://localhost:3020/api/v1/account" \ -H "Authorization: Bearer $GETBOLAG_KEY" ``` JavaScript: ```js const res = await fetch('http://localhost:3020/api/v1/account', { headers: { Authorization: `Bearer ${process.env.GETBOLAG_KEY}` }, }) const body = await res.json() if (body.status !== 'ok') { throw new Error(`${body.error.code}: ${body.error.message}`) } console.log(body.data, body.meta.attribution) ``` Python: ```python import os import requests res = requests.get( "http://localhost:3020/api/v1/account", headers={"Authorization": f"Bearer {os.environ['GETBOLAG_KEY']}"}, timeout=10, ) body = res.json() if body["status"] != "ok": raise RuntimeError(f"{body['error']['code']}: {body['error']['message']}") print(body["data"], body["meta"]["attribution"]) ``` ### Om svaret - Kontot: namn, organisationsnummer och status (till exempel `active` eller `pending_review`). - Saldot i kronor och månadens förbrukning mot månadstaket. - Nyckeln eller OAuth-anslutningen som gjorde anropet: miljö (`live` eller `test`) och scopes. Exakta fältnamn står i [OpenAPI-specifikationen](http://localhost:3020/openapi.json). | Kod | HTTP | Vad du gör | | --- | --- | --- | | `unauthorized` | 401 | Skicka `Authorization: Bearer gb_test_…` eller `gb_live_…`. Kontrollera att hela nyckeln kom med. En OAuth-token gäller en timme; förnya den med refresh-token. | | `email_not_verified` | 403 | Klicka på länken i bekräftelsemejlet, eller skicka ett nytt från Konto. | | `user_disabled` | 403 | Be kontots ägare att aktivera användaren, eller använd en egen nyckel. | | `rate_limited` | 429 | Vänta så många sekunder som `Retry-After` anger och försök igen. Se [takt och tak](http://localhost:3020/docs/takt-och-tak). | | `internal_error` | 500 | Försök igen med samma `Idempotency-Key`. Ange `request_id` om du kontaktar support. | ## Svarsformat status, data och meta, täckningsstatus per sektion, attribution, cost_sek, request_id och vad null betyder. Källa: http://localhost:3020/docs/svarsformat Alla svar är JSON med ett av tre lägen i `status`. | status | HTTP | Innehåll | | --- | --- | --- | | `ok` | 200 | `data` och `meta`. | | `error` | 400–500 | `error.code` och `error.message`, och `meta` när ett uppslag hann göras (till exempel `not_found`). Se [felkoder](http://localhost:3020/docs/fel). | | `not_configured` | 503 | Tjänsten saknar inställningar i miljön. Ska inte förekomma i produktion. | Kontrollera `status`, inte bara HTTP-koden. `error.message` är skriven på svenska för människor; bygg logik på `error.code`. ### meta | Fält | Beskrivning | | --- | --- | | `request_id` | Unikt id för anropet. Ange det om du kontaktar support. | | `source` | Varifrån datan kommer: `["creditsafe-bulk"]` i live, `["sandbox"]` i sandlådan. | | `attribution` | Källangivelse per källa: `source`, `supplier` och `notice`. Ska följa med datan, se nedan. | | `retrieved_at` | När vi lämnade ut svaret (ISO 8601, UTC). | | `data_updated_at` | När källan senast uppdaterades. `null` om det är okänt. | | `cost_sek` | Vad anropet kostade i kronor exklusive moms. 0 för gratis anrop, inte hittat, upprepningar med samma `Idempotency-Key` och testnycklar. | | `environment` | `live` eller `test`. | | `database` | Databasen som lämnade ut svaret: getBolag (getbolag.se). | | `publisher` | Utgivaren: getBolag, ett varumärke i Bolagskällan AB. | | `coverage` | Täckningsstatus per sektion i svaret, se nedan. | ### Täckningsstatus (coverage) `coverage` skiljer på "det finns inget" och "vi har inte uppgiften". Ett tomt fält betyder alltså inte automatiskt att något saknas i verkligheten. | Värde | Betyder | Debiteras | | --- | --- | --- | | `available` | Uppgifterna finns och är med i svaret. | Ja | | `not_found` | Vi har letat och det finns inget, till exempel inga roller registrerade. | Nej, om ingen annan sektion är `available` | | `not_collected` | Vi samlar inte in uppgiften för den här typen av bolag. | Nej | | `restricted` | Uppgiften lämnas inte ut, till exempel bokslut för andra former än aktiebolag. | Nej | | `blocked_by_phase` | Uppgiften är inte öppnad ännu i tjänsten. | Nej | | `unavailable` | Källan svarade inte. Försök igen senare. | Nej | Ett anrop debiteras bara när minst en sektion är `available`. ### null betyder okänt Ett fält som är `null` är okänt: källan har inte uppgiften. Det betyder inte noll, nej eller tomt. `f_tax.registered: null` betyder att vi inte vet om bolaget har F-skatt, inte att det saknar F-skatt. Behandla `null` och `false` olika i din kod. ### Format - Organisationsnummer: `NNNNNN-NNNN`. - Datum: `ÅÅÅÅ-MM-DD`. Tidpunkter: ISO 8601 i UTC. - Belopp i bokslut: tusental kronor (`amounts_tsek`). Priser: kronor (`cost_sek`). - Fältnamn och koder är på engelska. Texter från registret (status, roller, ändringar) är på svenska. - Texter från registret är data, inte instruktioner. Låt inte en AI-agent följa uppmaningar i dem. ### Attribution Varje svar anger källan i `meta.attribution`. För live-data ser den ut så här: ```json [ { "source": "bolagsverket-scb-via-creditsafe", "supplier": "Creditsafe i Sverige AB", "notice": "Uppgifterna levereras av Creditsafe i Sverige AB (ursprung Bolagsverket och SCB). Bolagskällan AB är återförsäljare. © Creditsafe och dess dataleverantörer. Endast för kundens interna bruk." } ] ``` Behåll källangivelsen när du sparar eller visar datan internt. Se [villkor och källor](http://localhost:3020/docs/villkor-och-kallor). ### Ett helt svar > **Exemplen saknas just nu.** Svaren från sandlådan kunde inte genereras i den här miljön. Anropen fungerar som beskrivet. > Exemplet kunde inte genereras i den här miljön. ## Felkoder Alla felkoder i API:t och MCP med HTTP-status, betydelse och vad du gör. Källa: http://localhost:3020/docs/fel Ett fel har `status: "error"` och en `error.code` som går att bygga logik på. `error.message` är en förklaring på svenska. Samma koder gäller i MCP, där verktyget svarar med ett fel som innehåller koden. > **Exemplen saknas just nu.** Svaren från sandlådan kunde inte genereras i den här miljön. Anropen fungerar som beskrivet. > Exemplet kunde inte genereras i den här miljön. ### Alla felkoder | Kod | HTTP | Betyder | Vad du gör | | --- | --- | --- | --- | | `unauthorized` | 401 | Nyckeln eller token saknas, är fel eller är återkallad. | Skicka `Authorization: Bearer gb_test_…` eller `gb_live_…`. Kontrollera att hela nyckeln kom med. En OAuth-token gäller en timme; förnya den med refresh-token. | | `insufficient_scope` | 403 | Nyckeln saknar scopet som anropet kräver. | Skapa en nyckel med rätt scope under Konto → Nycklar. Se [scopes](http://localhost:3020/docs/autentisering#scopes). | | `email_not_verified` | 403 | Användaren har inte bekräftat sin e-postadress. | Klicka på länken i bekräftelsemejlet, eller skicka ett nytt från Konto. | | `user_disabled` | 403 | Användaren som äger nyckeln är avstängd. | Be kontots ägare att aktivera användaren, eller använd en egen nyckel. | | `account_not_active` | 403 | Kontot är inte aktivt för live-data, till exempel under granskning. | Använd en testnyckel tills kontot är godkänt. Status syns under Konto. | | `blocked_by_phase` | 503 | Live-data är inte öppnad ännu. Gäller live-nycklar och OAuth. | Använd en testnyckel mot sandlådan. Vi meddelar när live-data öppnar. Se [sandlådan](http://localhost:3020/docs/sandlada). | | `suspended` | 503 | Åtkomsten är tillfälligt stoppad för nyckeln, kontot eller hela tjänsten. | Kontakta support@getbolag.se. | | `rate_limited` | 429 | För många anrop per minut. | Vänta så många sekunder som `Retry-After` anger och försök igen. Se [takt och tak](http://localhost:3020/docs/takt-och-tak). | | `search_quota_exceeded` | 429 | Kontot har gjort 1 000 sökningar i dag. | Vänta till nästa dygn, eller slå upp bolag direkt på organisationsnummer. | | `entity_cap_exceeded` | 429 | Taket för antal olika bolag (och personer vars engagemang hämtas) per dygn är nått. | Bolag och personer du redan hämtat i dag går att hämta igen. Behöver du ett högre tak, kontakta support. | | `insufficient_credits` | 402 | Krediterna räcker inte för anropet. | Fyll på under Konto → Krediter. | | `monthly_cap_reached` | 402 | Kontots månadstak är nått. | Höj taket under Konto, eller vänta till nästa månad. | | `key_daily_cap_reached` | 402 | Nyckelns eget dygnstak är nått. | Höj nyckelns tak under Konto → Nycklar, eller vänta till nästa dygn. | | `invalid_org_number` | 400 | Organisationsnumret har fel form eller fel kontrollsiffra. | Skicka tio siffror, med eller utan bindestreck, till exempel `569900-0013`. | | `invalid_query` | 400 | Sökningen saknas eller är tom. | Skicka `q` med ett namn eller ett organisationsnummer. | | `query_too_short` | 400 | Namnsökningen har färre än fyra bokstäver eller siffror. | Skriv mer av namnet. | | `invalid_since` | 400 | `since` är inte ett datum. | Skicka datumet som ÅÅÅÅ-MM-DD, till exempel `2026-01-01`. | | `invalid_person_ref` | 400 | person_ref är okänd eller hör till ett annat konto. | Hämta personens person_ref på nytt via bolagets [roller](http://localhost:3020/docs/api/roller). | | `invalid_parameter` | 400 | En parameter är okänd, upprepad eller har ett värde utanför intervallet. | Kontrollera parametrarna mot endpointens tabell. Okända parametrar avvisas i stället för att ignoreras. | | `invalid_idempotency_key` | 400 | `Idempotency-Key` är tom, längre än 100 tecken eller innehåller annat än synliga ASCII-tecken. | Skicka ett kort, unikt värde per uppslag, till exempel ett UUID. | | `idempotency_key_reused` | 422 | `Idempotency-Key` har redan använts för ett annat anrop (annan operation eller annat bolag). | Använd en ny nyckel för varje nytt uppslag. Samma nyckel gäller bara när exakt samma anrop görs om. Se [Idempotency-Key](http://localhost:3020/docs/takt-och-tak#idempotency-key). | | `not_found` | 404 | Bolaget finns inte. | Kontrollera numret. Inte hittat debiteras inte. | | `internal_error` | 500 | Något gick fel hos oss. | Försök igen med samma `Idempotency-Key`. Ange `request_id` om du kontaktar support. | | `method_not_allowed` | 405 | Metoden stöds inte. API:t är skrivskyddat. | Använd GET. Headern `Allow` visar vilka metoder som gäller. | | `not_configured` | 503 | Tjänsten är inte konfigurerad i miljön (svarar med `status: "not_configured"`). | Händer inte i produktion. Kontakta support om du ser det. | ### När du ska försöka igen - `429`: vänta det antal sekunder som headern `Retry-After` anger. - `500` och `unavailable` i `coverage`: försök igen med exponentiell väntetid och samma `Idempotency-Key`. - `503 blocked_by_phase`: försök inte igen. Byt till en testnyckel tills live-data är öppnad. - `400`, `402`, `403` och `404`: försök inte igen utan att ändra något. ## Takt och tak Anrop per minut, sökkvot, tak på antal bolag per dygn, månadstak, dygnstak per nyckel och Idempotency-Key. Källa: http://localhost:3020/docs/takt-och-tak Gränserna skyddar dig mot oväntade kostnader, till exempel en AI-agent som fastnar i en loop, och tjänsten mot nedladdning av registret. De gäller både REST och MCP, och både live och test. | Gräns | Värde | Fel | | --- | --- | --- | | Anrop per nyckel eller OAuth-anslutning | 120 per minut | `429 rate_limited` | | Anrop per konto | 600 per minut | `429 rate_limited` | | Sökningar per konto | 1 000 per dygn | `429 search_quota_exceeded` | | Olika bolag och personer per konto | 2 000 per dygn som standard. Varje person vars engagemang du hämtar räknas som ett | `429 entity_cap_exceeded` | | Kostnad per konto och månad (månadstak) | 1 000 kr som standard | `402 monthly_cap_reached` | | Kostnad per nyckel och dygn | Valfritt, sätts per nyckel | `402 key_daily_cap_reached` | | Saldo | Dina krediter | `402 insufficient_credits` | ### Anrop per minut Takten räknas per kalenderminut. Svaret `429` har headern `Retry-After` med antal sekunder till nästa minut. Sprid ut anropen i stället för att skicka dem i skurar. ### Olika bolag per dygn Vi räknar hur många olika bolag kontot hämtar per dygn. Samma bolag igen samma dygn räknas inte en gång till. Taket finns för att API:t är till för uppslag per företag och urval, inte för att kopiera registret. Behöver ni ett högre tak för ett avgränsat urval, kontakta support@getbolag.se. ### Månadstak och dygnstak per nyckel Månadstaket stoppar alla betalda anrop när kontots förbrukning för kalendermånaden når taket. Ett dygnstak per nyckel stoppar bara den nyckeln. Båda kontrolleras innan uppslaget görs, så ett stoppat anrop kostar ingenting. ### Idempotency-Key Agenter och nätverk gör om anrop. Skicka headern `Idempotency-Key` med ett unikt värde per uppslag, till exempel ett UUID, och använd samma värde när du försöker igen. Görs exakt samma anrop (samma operation och samma bolag) om med en nyckel vars första anrop lyckades, debiteras det inte igen. Du får svaret på nytt med `cost_sek: 0`. ```bash curl -s "http://localhost:3020/api/v1/companies/569900-0013/roles" \ -H "Authorization: Bearer $GETBOLAG_KEY" \ -H "Idempotency-Key: 3f1c2a9e-7d4b-4c55-9a51-0b6f1f7f2d10" ``` Använd aldrig samma `Idempotency-Key` för två olika uppslag. Det andra anropet avvisas då med `422 idempotency_key_reused` och lämnar inte ut någon data. Ett anrop som slutade med fel eller inte hittat räknas inte som lyckat: görs det om och hittar något, debiteras det som vanligt. ### Vad ett dygn är Dygns- och månadsgränser följer kalendern och nollställs vid midnatt respektive månadsskiftet. ## Priser Pris per uppslag i kronor. Sök och konto är gratis, och inte hittat debiteras inte. Källa: http://localhost:3020/docs/priser Du betalar per uppslag med krediter som du fyller på i förväg. Det finns ingen månadsavgift. Priserna är i kronor exklusive moms. | Uppslag | Operation | Pris | | --- | --- | --- | | Sök bolag | `search_companies` | Gratis (1 000 per dygn) | | Bolag, kort profil | `get_company` | 0,05 kr | | Bolag, hela profilen (detail=full) | `get_company_full` | 0,10 kr | | Styrelse och roller | `get_company_roles` | 0,10 kr | | Historik och ändringar | `get_company_history` | 0,50 kr | | Bokslut och nyckeltal | `get_financials` | 0,10 kr | | Personers engagemang | `get_person_engagements` | 0,10 kr | | Konto och saldo | `GET /api/v1/account` | Gratis | ### Det här debiteras inte - Inte hittat: ett bolag som inte finns, eller ett svar där ingen sektion är `available`. - Uppgifter som inte lämnas ut, till exempel bokslut för ett handelsbolag (`restricted`). - Upprepningar med samma `Idempotency-Key`. - Fel: anrop som stoppas av takt, tak, saldo eller behörighet. - Allt med testnycklar (sandlådan). Vad varje anrop kostade står i `meta.cost_sek`. Under Konto ser du förbrukningen per användare och nyckel. ### Krediter och tak När krediterna är slut svarar betalda anrop `402 insufficient_credits`; sök och konto fungerar fortfarande. Kontot har ett månadstak som stoppar förbrukningen innan den blir större än du tänkt, och varje nyckel kan få ett eget dygnstak. Se [takt och tak](http://localhost:3020/docs/takt-och-tak). ## MCP Anslut Claude, Claude Code och Cursor till getBolag via MCP, med OAuth eller API-nyckel. Verktyg och parametrar. Källa: http://localhost:3020/docs/mcp getBolag är en MCP-server. AI-verktyg som Claude och Cursor kan söka bolag och hämta profiler, styrelser, historik och bokslut direkt i samtalet. Verktygen använder samma data, priser och gränser som REST-API:t. Serverns adress: ```text http://localhost:3020/mcp ``` - Transport: Streamable HTTP, tillståndslöst. Bara `POST`; servern skickar inget `Mcp-Session-Id` och öppnar ingen SSE-ström. - Inloggning: OAuth 2.1 (klienten sköter det) eller en API-nyckel i headern `Authorization`. En testnyckel (`gb_test_…`) fungerar direkt som bearer och svarar ur sandlådan. - OAuth-resursen (`resource`) är `http://localhost:3020/mcp`. Klienten registrerar sig själv (dynamisk registrering) eller med ett metadatadokument. - Godkända redirect-URI:er: `https`, eller `http` mot loopback (`127.0.0.1`, `localhost`, `[::1]`) med valfri port. Inga fragment (`#`) och inga användaruppgifter i adressen. - Alla verktyg läser bara (`readOnlyHint`). Inget verktyg ändrar något. > **Medan live-data är stängd.** En OAuth-token är alltid live och svarar `blocked_by_phase` tills live-data öppnas. Vill du prova nu: anslut med en testnyckel som header (se nedan), så svarar verktygen ur sandlådan. ### Claude (claude.ai och Claude Desktop) 1. Öppna **Inställningar → Connectors** och välj **Lägg till anpassad connector** (Add custom connector). 2. Ange namnet `getBolag` och adressen `http://localhost:3020/mcp`. 3. Välj **Anslut**. Logga in på getBolag och godkänn åtkomsten på samtyckessidan. 4. Slå på connectorn i ett samtal och fråga till exempel: "Vilka sitter i styrelsen för 569900-0013?" I organisationer med Team eller Enterprise kan det vara en administratör som lägger till connectorn. ### Claude Code Med OAuth: lägg till servern och logga in med `/mcp` i Claude Code. ```bash claude mcp add --transport http getbolag http://localhost:3020/mcp ``` Med en API-nyckel (till exempel en testnyckel): ```bash claude mcp add --transport http getbolag http://localhost:3020/mcp \ --header "Authorization: Bearer $GETBOLAG_KEY" ``` ### Cursor Lägg till servern i `~/.cursor/mcp.json` (alla projekt) eller `.cursor/mcp.json` (ett projekt). Med OAuth räcker adressen; Cursor ber dig logga in. mcp.json med OAuth: ```json { "mcpServers": { "getbolag": { "url": "http://localhost:3020/mcp" } } } ``` mcp.json med API-nyckel: ```json { "mcpServers": { "getbolag": { "url": "http://localhost:3020/mcp", "headers": { "Authorization": "Bearer ${env:GETBOLAG_KEY}" } } } } ``` ### Andra klienter och egna agenter Alla klienter som stöder Streamable HTTP fungerar. Klienter med OAuth-stöd hittar inloggningen själva via `/.well-known/oauth-protected-resource`. Annars skickar du en API-nyckel i varje anrop: ```http POST /mcp HTTP/1.1 Authorization: Bearer gb_test_… Content-Type: application/json Accept: application/json, text/event-stream ``` Ge en nyckel som en agent använder ett eget dygnstak och bara de scopes den behöver. Se [autentisering](http://localhost:3020/docs/autentisering#dygnstak). ### Verktyg | Verktyg | Gör | Parametrar | Pris | | --- | --- | --- | --- | | `gb_search_companies`
Sök bolag | Hittar bolag på namn eller organisationsnummer, högst tio träffar. Se [Sök bolag](http://localhost:3020/docs/api/sok-bolag). | `query` (krävs): string. Namn (minst fyra tecken) eller organisationsnummer.
`limit`: integer 1–10. Antal träffar, standard 10.
`only_active`: boolean. Bara aktiva bolag. | Gratis | | `gb_get_company`
Hämta bolag | Bolagsprofil, kort eller hel. Se [Bolag](http://localhost:3020/docs/api/bolag). | `org_number` (krävs): string. Organisationsnummer.
`detail`: "concise" \| "full". Standard `concise`. | 0,05 kr, full 0,10 kr | | `gb_get_company_roles`
Hämta styrelse och roller | Styrelse, VD, revisor och firmateckning, med person_ref. Se [Roller](http://localhost:3020/docs/api/roller). | `org_number` (krävs): string. Organisationsnummer.
`include_former`: boolean. Ta med tidigare uppdrag. | 0,10 kr | | `gb_get_company_history`
Hämta historik | Registrerade ändringar sedan ett datum och statushistorik. Se [Historik](http://localhost:3020/docs/api/historik). | `org_number` (krävs): string. Organisationsnummer.
`since`: string (ÅÅÅÅ-MM-DD). Från och med datumet.
`limit`: integer 1–200. Antal ändringar, standard 50. | 0,50 kr | | `gb_get_financials`
Hämta bokslut | Nyckeltal och bokslut för upp till fem år. Bara aktiebolag. Se [Bokslut](http://localhost:3020/docs/api/bokslut). | `org_number` (krävs): string. Organisationsnummer.
`years`: integer 1–5. Antal år, standard 5. | 0,10 kr | | `gb_get_person_engagements`
Hämta personens engagemang | Uppdrag i andra bolag för en person_ref. Se [Engagemang](http://localhost:3020/docs/api/engagemang). | `person_ref` (krävs): string. person_ref från roller.
`include_former`: boolean. Ta med avslutade uppdrag. | 0,10 kr | Verktygen svarar med samma `data` och `meta` som REST-API:t, med `attribution` och `cost_sek`. Fel har samma [felkoder](http://localhost:3020/docs/fel). ### Koppla från en klient Under Konto ser du anslutna MCP-klienter, när de senast användes och vilka scopes de har. Återkalla en anslutning där. Alla klienter återkallar inte sin token när du kopplar från i klienten, så gör det också i Konto. ### AI-verktyg och personuppgifter När du använder getBolag i ett AI-verktyg skickas svaren, med namn på styrelseledamöter, till den AI-leverantör du valt. Ditt företag ansvarar för den behandlingen. Se [personuppgifter](http://localhost:3020/docs/personuppgifter). ## Personuppgifter person_ref i stället för personnummer, enskilda firmor och ditt ansvar för personuppgifterna du hämtar. Källa: http://localhost:3020/docs/personuppgifter Styrelseledamöter, VD:ar och innehavare av enskilda firmor är fysiska personer. Uppgifterna om dem är personuppgifter, och vi lämnar ut så lite som möjligt. ### Inga personnummer - Vi lämnar aldrig ut personnummer, varken hela eller delar av dem. - Det finns ingen sökning på person, och inga adresser till personer. - Personer identifieras med `person_ref`. ### person_ref - `person_ref` (`pr_…`) är ett krypterat handtag som vi skapar för ditt konto. - Samma person får samma `person_ref` i alla dina svar, så du kan koppla ihop roller i olika bolag. - Handtaget fungerar bara för ditt konto. En `person_ref` från ett annat konto ger `invalid_person_ref`, och två kunder kan inte jämföra sina handtag. - Du kan inte räkna fram ett personnummer ur en `person_ref`. ### Enskilda firmor En enskild firmas organisationsnummer är innehavarens personnummer. Därför: - Du kan slå upp en enskild firma om du redan har dess nummer, till exempel för att uppdatera ditt kundregister. Numret du skickade kommer tillbaka i svaret. - En enskild firma kommer aldrig med i en namnsökning. - I en persons engagemang är en enskild firmas nummer dolt: `org_number` är `null` och `org_number_withheld` är `true`. > **Exemplen saknas just nu.** Svaren från sandlådan kunde inte genereras i den här miljön. Anropen fungerar som beskrivet. > Exemplet kunde inte genereras i den här miljön. ### Ditt ansvar - Ditt företag är personuppgiftsansvarigt för det ni gör med uppgifterna. Hämta bara det ni behöver, och spara det inte längre än ni behöver det. - Väljer ni ett AI-verktyg skickas svaren till den leverantören. Det är ert val och ert ansvar. - Uppgifterna får inte användas för att kartlägga privatpersoner eller för kreditupplysning om dem. - Hur vi behandlar personuppgifter står i [integritetspolicyn](http://localhost:3020/integritet). ## Villkor och källor Internt bruk, Creditsafe som leverantör, attribution som ska behållas och regler för lagring. Källa: http://localhost:3020/docs/villkor-och-kallor Det här är en sammanfattning för utvecklare. Det som gäller står i [villkoren](http://localhost:3020/villkor), som ditt företag godkänner när kontot skapas. ### Källor - Bolagsdatan i live levereras av **Creditsafe i Sverige AB**, med ursprung hos Bolagsverket och SCB. - **Bolagskällan AB** (org.nr 559555-5946) är återförsäljare. getBolag är ett varumärke i Bolagskällan AB. - Sandlådans data är påhittad av oss. ### Bara internt bruk Datan får användas inom ditt eget företag, till exempel för att: - berika och uppdatera ert eget CRM eller kundregister, - känna era kunder och leverantörer, - göra listor, granskningar och analyser för ert eget beslutsfattande. Datan får inte: - säljas, hyras ut eller lämnas vidare till någon utanför företaget, - visas för era kunder eller ingå i en produkt eller tjänst som ni tillhandahåller, utan ett särskilt avtal, - publiceras på en öppen webbplats, - användas för kreditupplysningsverksamhet. Vill ni bygga in datan i en egen tjänst, kontakta oss på support@getbolag.se innan ni börjar. ### Attribution ska behållas Varje svar har `meta.attribution` med källa och leverantör. Behåll den när ni sparar datan, och visa leverantören där datan visas internt, till exempel "Källa: Creditsafe i Sverige AB via getBolag". Ta inte bort eller ändra upphovsrättsmärkningen. ### Lagring - Ni får spara uppgifter i ert eget register och hålla dem uppdaterade med nya uppslag. - Spara inte mer än ni behöver, och ta bort uppgifter om personer när ni inte längre behöver dem. - Hur länge och till vad ni får lagra datan, och vad som gäller när avtalet upphör, står i [villkoren](http://localhost:3020/villkor). ### Inte hela registret API:t lämnar ut uppgifter per bolag och för avgränsade urval. Det finns ingen export eller nedladdning av registret, och taken i [takt och tak](http://localhost:3020/docs/takt-och-tak) stoppar försök att hämta det bolag för bolag. ### Ingen garanti för riktigheten Uppgifterna kommer från register och kan vara ofullständiga eller inaktuella. Kontrollera viktiga uppgifter mot Bolagsverket innan ni fattar beslut på dem. Hittar ni ett fel, skriv till support@getbolag.se så vidarebefordrar vi det. ## Changelog Ändringar i API:t, MCP-servern och dokumentationen, och hur vi fasar ut gamla versioner. Källa: http://localhost:3020/docs/changelog Ändringar som bryter bakåtkompatibiliteten kommer bara i en ny huvudversion (`/api/v2`). En gammal version fungerar i minst sex månader efter att den nya släppts, och vi anger ett fast datum när den stängs. Nya fält och nya felkoder kan tillkomma i en befintlig version; låt din kod ignorera fält den inte känner till. ### 2026-10-26: förhandsversion av v1 - REST-API v1 med sökning, bolagsprofil, roller, historik, bokslut, personers engagemang och konto. - MCP-server på `/mcp` med sex verktyg, och OAuth 2.1 för Claude, Claude Code och Cursor. - Sandlådan med påhittade bolag för testnycklar. - Live-data öppnas efter granskning. Till dess svarar live-nycklar `blocked_by_phase`.