/v1/bulkBulkuppslag
Slå upp flera företag i en enda förfrågan.
Översikt
Bulkuppslag-endpointen låter dig slå upp flera företag på namn i en enda API-förfrågan. Detta är mer effektivt än att göra flera individuella förfrågningar när du behöver slå upp flera företag samtidigt.
Gränser & krediter
| Uppslag | Max per förfrågan | Kreditkostnad |
|---|---|---|
names |
10 (gäst) / 100 (autentiserad) | 1 kredit per lyckad matchning |
org_numbers |
50 (gäst) / 500 (Free) / 5 000 (Starter & Pro) | 10 företag för 1 kredit (rundas uppåt) |
org_numbers är den effektivare vägen — högre gräns och 10× billigare. Misslyckade uppslag debiteras aldrig.
Fuzzy-matchning
API:et returnerar alltid närmaste match. Bedöm kvaliteten via score: 1.0 = exakt, > 0.8 = mycket god, < 0.6 = tveksam (verifiera manuellt).
Förfrågan
Förfrågningskropp
Skicka ett JSON-objekt med en array av företagsnamn:
{
"names": ["Spotify AB", "Ericsson AB", "Skanska AB"]
}
Eller en array av organisationsnummer i stället. Det är den effektivare vägen (högre gräns, 10 företag för 1 kredit):
{
"org_numbers": ["5567037485", "5560042001", "5564831114"]
}
Ange names eller org_numbers
names eller org_numbers i samma förfrågan. Skickar du en tom kropp ({}) returneras 400 med felet Missing or invalid "names" array - det är backendens standardvalidering, men org_numbers är ett fullt giltigt alternativ (se exemplet ovan).Parametrar
| Parameter | Typ | Obligatorisk | Beskrivning |
|---|---|---|---|
| names | array | Obligatorisk | Array med företagsnamn att slå upp. Maximalt 100 namn per förfrågan. Använd antingen names eller org_numbers. |
| org_numbers | array | Valfri | Array med 10-siffriga organisationsnummer att slå upp. Alternativ till names och den effektivare vägen: högre gräns (upp till 5 000 för Starter/Pro) och 10 företag för 1 kredit. Bindestreck normaliseras automatiskt. |
| has_annual_report | boolean | Valfri | Filtrera namnuppslag på årsredovisning. true = enbart företag med digital årsredovisning, false = enbart företag utan. Utelämnas parametern filtreras inte (alla företag matchas). Gäller endast names-uppslag. |
| include | string[] | Valfri | Opt-in-väljare för berikad data. Stödjer för närvarande "trademarks", som lägger till fälten trademarks och trademarkCount per matchat företag. Fungerar för uppslag både på names och org_numbers. Okända värden ignoreras. |
| response_fields | string | Valfri | Begränsar vilka fält som returneras per företag (minimal, core). Projektionen tillämpas endast på org_numbers-uppslag. För names-uppslag och för /v1/search ignoreras parametern och hela företagsobjektet returneras. |
Lägg till include för att berika svaret med varumärkesdata:
{
"names": ["Spotify AB", "Ericsson AB"],
"include": ["trademarks"]
}
Varumärkesdata överlever response_fields
"include": ["trademarks"] berikar varje matchat företag med fälten trademarks och trademarkCount (PRV-data). När response_fields-projektion används (endast på org_numbers-vägen, se parametern nedan) behålls dessa två fält i alla lägen, även minimal och core. Utan include saknas varumärkesfälten helt. Företag utan registrerade varumärken får [] respektive 0.Kodexempel
Här är exempel på flera programmeringsspråk:
curl -X POST 'https://data.foretagsapi.se/v1/bulk' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{"names": ["Spotify AB", "Ericsson AB", "Skanska AB"]}'
Svar
Lyckat svar (200 OK)
Returnerar ett JSON-objekt som innehåller en results-array med lyckat/misslyckat-status för varje uppslag:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071{
"results": [
{
"searchTerm": "Spotify AB",
"success": true,
"company": {
"id": 521294,
"name": "Spotify AB",
"orgNumber": "5567037485",
"legalForm": "AB",
"postalAddress": {
"street": "Regeringsgatan 19",
"city": "STOCKHOLM",
"postalCode": "11153"
},
"registrationDate": "2006-05-10",
"score": 1.0,
"hasDigitalAnnualReport": false,
"financials": null,
"revenue_estimate": {
"value": 10000000000,
"type": "interval",
"interval_low": 10000000000,
"interval_high": null,
"reference_year": 2025,
"source": "scb",
"scb_class": "fin_21",
"label_sv": "≥ 10 mdkr"
},
"employees_estimate": {
"value": 1100,
"type": "interval",
"interval_low": 1000,
"interval_high": 1499,
"source": "scb",
"scb_class": "anst_10",
"label_sv": "1 000–1 499 anställda"
}
}
},
{
"searchTerm": "Ericsson AB",
"success": true,
"company": {
"id": 123456,
"name": "Telefonaktiebolaget LM Ericsson",
"orgNumber": "5560000000",
"legalForm": "AB",
"score": 0.85
}
},
{
"searchTerm": "Unknown Company XYZ",
"success": true,
"company": {
"id": 789012,
"name": "XYZ Company AB",
"orgNumber": "5560001234",
"legalForm": "AB",
"score": 0.51
}
}
],
"metadata": {
"totalSearches": 3,
"successfulSearches": 3,
"processingTimeMs": 150,
"timestamp": "2024-01-15T10:35:00Z",
"mode": "api"
}
}
Svarsfält
| Fält | Typ | Beskrivning |
|---|---|---|
| results | array | Array med resultatobjekt, ett för varje begärt namn |
| results[].searchTerm | string | Den ursprungliga söktermen från förfrågan |
| results[].success | boolean | Om en matchning hittades (alltid true med fuzzy-matchning) |
| results[].company | object | Företagsdata med närmaste matchning. Kontrollera score-fältet för matchningskvalitet. |
| results[].company.score | number | Matchningspoäng 0.0-1.0. Lågt värde (<0.6) indikerar osäker matchning. |
| results[].error | string | Felmeddelande (endast närvarande om success är false, sällsynt med fuzzy-matchning) |
| metadata.totalSearches | number | Totalt antal företagsnamn som begärdes i batchen |
| metadata.successfulSearches | number | Antal uppslag som returnerade ett matchande företag |
| metadata.processingTimeMs | number | Behandlingstid i millisekunder |
| metadata.timestamp | string | Tidsstämpel för förfrågan (ISO 8601-format) |
Hantera osäkra matchningar
score-fältet för varje resultat. Vid låga poäng (<0.6) bör du verifiera matchningen manuellt eller flagga den för granskning.Finansiell data i bulkuppslag
financials, hasDigitalAnnualReport, revenue_estimate och employees_estimate ingår i svaret för varje matchat företag. Att financials är null betyder inte att företaget saknar omsättning. Oftast har företaget lämnat in sin årsredovisning på papper i stället för digitalt, och då har vi ingen åtkomst till siffrorna. Finansiell data finns för cirka 60 % av aktiva aktiebolag som lämnat in digital årsredovisning. SCB-intervall ger storleksindikation för ytterligare bolag, totalt cirka 85 %.revenue_estimate och employees_estimate är källmedvetna envelope-objekt: type: "exact" = värdet kommer från årsredovisningen, type: "interval" = SCB-baserat storleksintervall med interval_low/interval_high och en svensk etikett i label_sv, type: "none" = ingen storleksuppgift. Se /docs/api/search-by-name för fullständig fältlista och envelope-shape. Saknas all finansiell data returneras "financials": null och "hasDigitalAnnualReport": false.Felsvar
400 Bad Request
Returneras när förfrågan överskrider batchgränsen:
{
"error": "Too many companies. Maximum allowed: 100. Received: 101"
}
Eller när kroppen saknar både names och org_numbers (en tom kropp valideras mot names):
{
"error": "Missing or invalid \"names\" array"
}