Felkatalog
Varje fel från API:t har en stabil kod i fältet error. Förgrena på koden, inte på texterna.
Felsvaret ser alltid ut så här:
{
"error": "invalid_orgnr",
"message": "Organisationsnumret har fel kontrollsiffra.",
"hint": "Kontrollera numret eller använd GET /v1/validate/{orgnr}.",
"docs_url": "https://api.registry.gothiaai.se/docs/errors#invalid_orgnr",
"request_id": "req_5c2d90a1e7b34f68a10d"
}
messageochhintär till för människor och kan ändras utan varsel.errorändras inte inom en version.- Nya koder kan tillkomma utan ny version. Hantera en okänd kod som ett vanligt fel utifrån HTTP-statusen.
- Fel kostar aldrig enheter. De räknas däremot mot gränsen per minut, utom 401 och 429.
- Bara det första problemet i ett anrop rapporteras. Parametrarna kontrolleras i ordningen land,
limit,q,sni,legal_form,city, filterkravet. Medfilterkontrolleras land, att inga andra sökparametrar används,limitoch sedan själva uttrycket. - I ett batch-anrop blir ett enskilt nummer som inte går att slå upp ett
error-objekt i resultatet, med HTTP-status200för anropet. Då gäller felkoderna för organisationsnummer nedan.
Nyckel och gränser
missing_api_key
- HTTP-status
- 401
- Orsak
- Headern
Authorizationsaknas, eller börjar inte medBearer. - Åtgärd
- Skicka
Authorization: Bearer rg_live_...på varje anrop under/v1.
invalid_api_key
- HTTP-status
- 401
- Orsak
- Nyckeln är okänd, har fel format (ska börja med
rg_live_ellerrg_test_och vara 20 till 80 tecken), är återkallad, har gått ut eller hör till ett avstängt konto. Det går medvetet inte att se skillnad, så att ingen kan pröva sig fram till vilka nycklar som finns. - Åtgärd
- Kontrollera att hela nyckeln är kopierad utan mellanslag eller radbrytningar. Skapa en ny nyckel i utvecklarportalen om du har återkallat den eller tappat den. Är kontot avstängt, kontakta oss.
rate_limited
- HTTP-status
- 429
- Orsak
- Nyckeln har gjort fler anrop än planen tillåter under den här minuten (UTC-klockminut). Planen
freetillåter 10. Vissa planer har dessutom en gräns per slutanvändare bakom en delad nyckel; den ger samma fel. - Åtgärd
- Vänta det antal sekunder som står i
Retry-After(och iX-RateLimit-Reset) och försök igen. Sprid anropen över tid. Behöver du högre gräns, byt plan. - Rubriker
Retry-After,X-RateLimit-Limit,X-RateLimit-Remaining(0),X-RateLimit-Reset
quota_exceeded
- HTTP-status
- 429
- Orsak
- Kontot har förbrukat månadens enheter. Kvoten delas av alla nycklar på kontot. Gäller anrop som kostar enheter:
GET /v1/companies/{orgnr},GET /v1/companiesochPOST /v1/companies/batch. Kvoten kontrolleras före anropet, så ett batch-anrop som startade under gränsen kan ha tagit förbrukningen över den. - Åtgärd
- Vänta inte i sekunder: kvoten nollställs den 1:a i nästa månad klockan 00:00 UTC (meddelandet anger datumet). Byt plan för fler enheter.
GET /v1/validate/{orgnr}ochGET /v1/usagefungerar fortfarande och kostar inget. - Rubriker
Retry-After(sekunder till periodens slut)
Organisationsnummer
invalid_orgnr
- HTTP-status
- 400 (i batch: ett
error-objekt i resultatet) - Orsak
- Numret är inte tio siffror (efter att mellanslag, ett bindestreck och SCB:s prefix
16på tolvsiffriga nummer tagits bort), är längre än 20 tecken, innehåller mer än ett bindestreck eller bokstäver, eller har fel kontrollsiffra (Luhn). Meddelandet säger vilket. - Åtgärd
- Rätta numret. Du kan fråga
GET /v1/validate/{orgnr}först: det kostar ingenting och talar om om det är formatet eller kontrollsiffran som är fel. - Kostnad
- 0 enheter
not_a_company
- HTTP-status
- 404 (i batch: ett
error-objekt i resultatet) - Orsak
- Numret har formen av ett personnummer (tredje siffran är 0 eller 1) och slås därför aldrig upp. Det är avsiktligt: tjänsten ska inte kunna användas för att ta reda på om en person driver verksamhet. Kontrollsiffran spelar ingen roll för det här.
- Åtgärd
- Det går inte att slå upp numret. Enskilda firmor ingår inte i registret.
- Kostnad
- 0 enheter
company_not_found
- HTTP-status
- 404 (i batch: ett
error-objekt i resultatet) - Orsak
- Numret är giltigt men finns inte i registret. Vanliga skäl: numret är nytt och registret laddas bara om veckovis, bolaget är en enskild firma (ingår inte), eller numret är felaktigt men råkar ha rätt kontrollsiffra.
- Åtgärd
- Kontrollera numret med
GET /v1/validate/{orgnr}. Försök igen efter nästa veckoladdning om bolaget är nytt (meta.data_as_ofvisar senaste laddningen på andra anrop). - Kostnad
- 0 enheter
unsupported_country
- HTTP-status
- 400
- Orsak
- Parametern
country(ellercountryi batch-kroppen) har något annat värde änSE. - Åtgärd
- Utelämna parametern eller använd
SE. Version 1 täcker bara Sverige.
Sökning
invalid_limit
- HTTP-status
- 400
- Orsak
limitär inte ett heltal mellan 1 och 100, eller är över 10 närq(namnsökning) används.- Åtgärd
- Använd ett värde från 1 till 100, eller från 1 till 10 med
q. Utelämnadlimitger 20 (10 medq). Vill du ha fler träffar per anrop: sök utanqmed filter, där varje bolag kostar en enhet.
invalid_query
- HTTP-status
- 400
- Orsak
qär kortare än 2 eller längre än 100 tecken efter rengöring. Tecknen%,_och\ersätts med mellanslag, flera mellanslag blir ett och kanterna trimmas. En sökning på%%blir alltså tom.- Åtgärd
- Skriv minst två bokstäver av bolagsnamnet.
invalid_sni
- HTTP-status
- 400
- Orsak
sniär inte 2 till 5 siffror.- Åtgärd
- Exempel:
sni=62(alla bolag vars primära SNI-kod börjar med 62) ellersni=62100.
invalid_legal_form
- HTTP-status
- 400
- Orsak
legal_formhar fel format. Tillåtet är 1 till 6 bokstäver, eventuellt följt av bindestreck och 1 till 10 bokstäver.- Åtgärd
- Exempel:
legal_form=ABellerlegal_form=AB-ORGFO(Bolagsverkets kod). Versaler och gemener fungerar.
invalid_city
- HTTP-status
- 400
- Orsak
cityär längre än 60 tecken.- Åtgärd
- Ange bara ortnamnet, till exempel
city=Göteborg. En ort som inte finns ger en tom lista, inte det här felet.
invalid_filter
- HTTP-status
- 400
- Orsak
- Uttrycket i
filtergår inte att tolka eller använder något som inte finns: ett okänt fält, en operator som fältet inte stöder, ett värde av fel typ eller form, ett tecken som inte ingår i språket, eller en kombination medq,sni,cityellerlegal_form. Meddelandet anger positionen (tecken räknat från 1) och vad som förväntades. - Åtgärd
- Rätta uttrycket enligt meddelandet. Fälten, operatorerna och exemplen står i guiden. Skriv villkoren som en del av
filteri stället för att kombinera dem med de andra parametrarna. - Kostnad
- 0 enheter
filter_too_complex
- HTTP-status
- 400
- Orsak
- Uttrycket överskrider en gräns: högst 1 000 tecken, 20 villkor, 5 nivåer av parenteser och NOT, och 100 värden i en
IN-lista. - Åtgärd
- Förenkla uttrycket eller dela upp sökningen i flera anrop.
- Kostnad
- 0 enheter
filter_too_broad
- HTTP-status
- 400
- Orsak
- Uttrycket matchar nästan hela registret (över 500 000 bolag enligt vår uppskattning, till exempel bara
legal_form = 'AB'). En lista över hela registret kan inte hämtas. - Åtgärd
- Lägg till villkor som avgränsar urvalet: bransch (
sni), ort (city), storlek (employee_class) eller registreringsdatum. - Kostnad
- 0 enheter
server_busy
- HTTP-status
- 503
- Orsak
- Tjänsten har många sökningar igång samtidigt och din fick inte plats inom två sekunder, eller så svarade databasen inte i tid (en fråga som tog över åtta sekunder avbryts). Det är inget fel i ditt anrop.
- Åtgärd
- Försök igen efter
Retry-Aftersekunder. Fördröj gärna omförsöket och skicka inte flera sökningar parallellt. - Rubriker
Retry-After- Kostnad
- 0 enheter
page_limit_exceeded
- HTTP-status
- 400
- Orsak
- Kontots plan begränsar hur många sidor en sökning får bläddra, och din
cursorleder förbi gränsen. Gäller bara planer med sidgräns. - Åtgärd
- Avgränsa sökningen med fler villkor i stället för att bläddra djupare, eller använd ett konto med en större plan.
- Kostnad
- 0 enheter
batch_not_allowed
- HTTP-status
- 403
- Orsak
- Kontots plan får inte använda
POST /v1/companies/batch. Gäller bara vissa särskilda planer. - Åtgärd
- Hämta ett bolag i taget med
GET /v1/companies/{orgnr}, eller använd ett konto med en plan som tillåter batch. - Kostnad
- 0 enheter
missing_filter
- HTTP-status
- 400
- Orsak
- Sökningen har varken
qeller något avsni,cityochlegal_form. En lista över hela registret kan inte hämtas. - Åtgärd
- Lägg till minst ett villkor, till exempel
/v1/companies?sni=62&city=Göteborg.
invalid_cursor
- HTTP-status
- 400
- Orsak
cursorgår inte att tolka: den är ändrad, avkortad, längre än 400 tecken, eller hör till en annan sorts sökning (en cursor från en sökning medqfungerar inte utanq, och tvärtom).- Åtgärd
- Skicka
next_cursoroförändrad, med exakt samma övriga parametrar som i anropet som gav den. Starta annars om utancursor.
cursor_expired
- HTTP-status
- 410
- Orsak
- Registret har laddats om sedan sökningen startade. Gäller sökningar med
q: en cursor är bara giltig inom en dataladdning. Sökningar utanqpåverkas inte. - Åtgärd
- Starta om sökningen utan
cursor. Bolag som du redan har hämtat kan komma igen, så ta bort dubbletter påorgnr.
Batch
missing_orgnrs
- HTTP-status
- 400
- Orsak
- Kroppen saknar
orgnrs, eller listan är tom. - Åtgärd
- Skicka
{"orgnrs": ["556123-4567"]}med 1 till 100 nummer ochContent-Type: application/json.
too_many_orgnrs
- HTTP-status
- 400
- Orsak
- Listan har fler än 100 nummer.
- Åtgärd
- Dela upp anropet i omgångar om högst 100. Tänk på gränsen per minut när du skickar många omgångar.
Övrigt
internal_error
- HTTP-status
- 500
- Orsak
- Något gick fel hos oss.
- Åtgärd
- Försök igen med växande väntetid. Fortsätter det, kontakta oss och ange
request_id. - Kostnad
- 0 enheter
Svar utan felkod
Fyra situationer ger ett tomt svar utan JSON-kropp, eftersom de avvisas av webbramverket innan API:ts egen felhantering. Nyckeln kontrolleras alltid först, så de kräver giltig nyckel och räknas mot gränsen per minut. De kostar inga enheter.
404: sökvägen finns inte under/v1.405: fel HTTP-metod för sökvägen, till exempelPOSTmot/v1/usage.400: kroppen iPOST /v1/companies/batchär inte giltig JSON. Skiljs frånmissing_orgnrs, som är ett svar med felkod och gäller giltig JSON utanorgnrs.415:POST /v1/companies/batchskickades utanContent-Type: application/json.
Behandla ett svar utan JSON-kropp som ett vanligt fel utifrån HTTP-statusen, och kontrollera Content-Type på svaret innan du läser det som JSON.