LeadBase Logo

LeadBase API

Bedriftsoppslag API
v1.0

Oversikt

LeadBase API gir tilgang til detaljert informasjon om norske selskaper basert på organisasjonsnummer eller firmanavn. APIet returnerer strukturert data fra mange offentlige og private kilder, inkludert regnskapsdata, roller, og kontaktinformasjon.

Viktig informasjon:
  • Alle forespørsler krever gyldig API-nøkkel
  • API-nøkkelen sendes som del av request body
  • Tilgang til e-postadresser krever spesiell tillatelse
  • Du kan velge hvilke felt som skal returneres

Autentisering

APIet bruker API-nøkler for autentisering. Nøkkelen din er personlig og skal ikke deles med andre.

Skaffe API-nøkkel

For å få tildelt din unike API-nøkkel, kontakt LeadBase:

  • Nettside: www.leadbase.no
  • Nøkkelen starter typisk med sk_ og er 64 tegn lang
Eksempel API-nøkkel: (kan brukes til å teste APIet)
sk_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6a7b8c9d0e1f2

Bruk av API-nøkkel

Send API-nøkkelen som et felt i JSON request body:

{
  "apiKey": "din-api-nøkkel-her",
  "orgNumber": "810034882"
}
Sikkerhet: Du kan kun benytte APIet over SSL/HTTPS, og del aldri API-nøkkelen din offentlig.

API Endpoint

POST /api/index.php

Request Parametere

Send data som JSON i request body. Du må oppgi minst ett av følgende:

  • apiKey (required) - Din API-nøkkel
  • orgNumber - Organisasjonsnummer (9 siffer)
  • companyName - Firmanavn (prefix søk, case-insensitive). Eks: "SAND" finner "SANDNES ELEKTRISKE"
  • fields (optional) - Array med feltnavn du ønsker returnert
⚡ Performance: Company name search bruker optimalisert prefix matching med MongoDB indexes. Firmanavn konverteres automatisk til uppercase (siden alle navn er lagret i uppercase i databasen). Forventet responstid: <50ms for begge søketyper.
⚠️ Viktig: API-et aksepterer kun parameterne listet ovenfor. Hvis du sender med andre parametere (f.eks. organisasjonsform_kode, dagligLeder, telefon etc.), vil forespørselen bli avvist med feilkode 400.

Request Eksempler

Søk med organisasjonsnummer:

{
  "apiKey": "sk_a1b2c3d4...",
  "orgNumber": "810034882"
}

Søk med firmanavn:

{
  "apiKey": "sk_a1b2c3d4...",
  "companyName": "SANDNES ELEKTRISKE"
}

Søk med spesifikke felt:

{
  "apiKey": "sk_a1b2c3d4...",
  "orgNumber": "810034882",
  "fields": ["navn", "organisasjonsnummer", "antallAnsatte", "telefon"]
}

Tilgjengelige datafelter

Oversikt over feltene du kan hente fra APIet:

Feltnavn Beskrivelse Type
Grunnleggende informasjon
organisasjonsnummer 9-sifret organisasjonsnummer string
navn Selskapets navn string
organisasjonsform_kode Organisasjonsform (AS, ASA, NUF, etc.) string
stiftelsesdato Dato selskapet ble stiftet (YYYY-MM-DD) string
registreringsdatoEnhetsregisteret Registreringsdato i Enhetsregisteret string
registreringsdatoForetaksregisteret Registreringsdato i Foretaksregisteret string
maalform Målform (Bokmål/Nynorsk) string
Ansatte og aktivitet
antallAnsatte Antall registrerte ansatte integer
harRegistrertAntallAnsatte Om bedriften har registrert antall ansatte boolean
naeringskode1 Primær næringskode med beskrivelse object
naeringskode2 Sekundær næringskode (hvis aktuelt) object/null
aktivitet Beskrivelse av bedriftens aktivitet array
Adresser
forretningsadresse_adresse Forretningsadresse (gateadresse) array
forretningsadresse_postnummer Postnummer for forretningsadresse string
forretningsadresse_poststed Poststed for forretningsadresse string
forretningsadresse_kommune Kommune for forretningsadresse string
forretningsadresse_kommunenummer Kommunenummer for forretningsadresse string
postadresse_adresse Postadresse (hvis forskjellig fra forretningsadresse) array
postadresse_postnummer Postnummer for postadresse string
postadresse_poststed Poststed for postadresse string
postadresse_kommune Kommune for postadresse string
postadresse_kommunenummer Kommunenummer for postadresse string
Kontaktinformasjon
telefon Telefonnummer string
mobil Mobilnummer string
hjemmeside Hjemmeside URL string/null
epostadresse Offentlig e-postadresse string
epostadresseBrreg Indikator om e-post er fra Brønnøysundregistrene (1/0) integer
epostadresseLeadBase Indikator om e-post er fra LeadBase (1/0) integer
Registerstatus
registrertIForetaksregisteret Om selskapet er registrert i Foretaksregisteret boolean
registrertIMvaregisteret Om selskapet er registrert i Merverdiavgiftsregisteret boolean
registrertIStiftelsesregisteret Om selskapet er registrert i Stiftelsesregisteret boolean
registrertIFrivillighetsregisteret Om selskapet er registrert i Frivillighetsregisteret boolean
Status
underAvvikling Om selskapet er under avvikling boolean
underTvangsavviklingEllerTvangsopplosning Om selskapet er under tvangsavvikling/tvangsoppløsning boolean
konkurs Om selskapet er konkurs boolean
Vedtekter og formål
vedtektsdato Dato for siste vedtektsendring string
vedtektsfestetFormaal Vedtektsfestet formål (flere linjer) array
formaal Formål som sammenslått tekst string
Lederskap og roller
dagligLeder Informasjon om daglig leder (fornavn, etternavn, fødselsdato, erDoed) object
roller Liste over styremedlemmer, varamedlemmer, revisorer etc. array
Regnskap
sisteInnsendteAarsregnskap Årstall for siste innsendte årsregnskap string
regnskapsperiode Regnskapsperiode (fraDato, tilDato) object
valuta Valuta for regnskapet (NOK, USD, etc.) string
resultatregnskapResultat Resultatregnskap (driftsresultat, finansresultat, årsresultat) object
egenkapitalGjeld Egenkapital og gjeld (sum, innskutt/opptjent, kortsiktig/langsiktig) object
eiendeler Eiendeler (sum, anleggsmidler, omløpsmidler) object
Metadata
original_import_timestamp Tidspunkt for original import fra Brønnøysund object
_created_at Tidspunkt data ble opprettet i vår database object
_has_regnskap Indikator om regnskap er tilgjengelig boolean
_has_roller Indikator om roller er tilgjengelig boolean
Beskyttede felt (krever spesiell tilgang)
emails Liste med skrapede e-postadresser (krever tilgang) array
epostDagligLeder Daglig leders e-post (krever tilgang) string
Beskyttede felt: Feltene emails og epostDagligLeder returneres kun hvis din bruker har fått tildelt tilgang. Kontakt LeadBase for å få denne tilgangen.

Responser

Vellykket respons (200 OK)

{
  "success": true,
  "data": {
    "organisasjonsnummer": "810034882",
    "navn": "SANDNES ELEKTRISKE AS",
    "antallAnsatte": 8,
    "telefon": "51 68 57 00",
    "hjemmeside": "https://www.sandneselektriske.no",
    "forretningsadresse_adresse": ["Strandgata 21"],
    "forretningsadresse_postnummer": "4307",
    "forretningsadresse_poststed": "SANDNES",
    ...
  }
}
Feil og statuskoder: Se Feilhåndtering-seksjonen for komplett oversikt over alle HTTP-statuskoder, mulige feil og løsninger.

Kodeeksempler

cURL

curl -X POST https://api.leadbase.no/index.php \
  -H "Content-Type: application/json" \
  -d '{
    "apiKey": "sk_a1b2c3d4...",
    "orgNumber": "810034882"
  }'

PHP

$data = [
    'apiKey' => 'sk_a1b2c3d4...',
    'orgNumber' => '810034882'
];

$ch = curl_init('https://api.leadbase.no/index.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);

$response = curl_exec($ch);
$result = json_decode($response, true);

JavaScript

fetch('https://api.leadbase.no/index.php', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
        apiKey: 'sk_a1b2c3d4...',
        orgNumber: '810034882'
    })
})
.then(response => response.json())
.then(result => console.log(result));

Python

import requests

url = 'https://api.leadbase.no/index.php'
data = {
    'apiKey': 'sk_a1b2c3d4...',
    'orgNumber': '810034882'
}

response = requests.post(url, json=data)
result = response.json()

C# (.NET)

using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

class Program
{
    static async Task Main()
    {
        var client = new HttpClient();
        var data = new
        {
            apiKey = "sk_a1b2c3d4...",
            orgNumber = "810034882"
        };
        
        var json = JsonConvert.SerializeObject(data);
        var content = new StringContent(json, Encoding.UTF8, "application/json");
        
        var response = await client.PostAsync("https://api.leadbase.no/index.php", content);
        var result = await response.Content.ReadAsStringAsync();
        Console.WriteLine(result);
    }
}

Java

import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;

public class ApiClient {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClients.createDefault();
        HttpPost post = new HttpPost("https://api.leadbase.no/index.php");
        
        JSONObject data = new JSONObject();
        data.put("apiKey", "sk_a1b2c3d4...");
        data.put("orgNumber", "810034882");
        
        post.setEntity(new StringEntity(data.toString()));
        post.setHeader("Content-Type", "application/json");
        
        String response = EntityUtils.toString(client.execute(post).getEntity());
        System.out.println(response);
    }
}

TypeScript

interface CompanySearchRequest {
    apiKey: string;
    orgNumber?: string;
    companyName?: string;
    fields?: string[];
}

async function searchCompany(data: CompanySearchRequest): Promise {
    const response = await fetch('https://api.leadbase.no/index.php', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify(data)
    });
    
    const result = await response.json();
    console.log(result);
}

searchCompany({
    apiKey: 'sk_a1b2c3d4...',
    orgNumber: '810034882'
});

Go

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net/http"
)

func main() {
	data := map[string]interface{}{
		"apiKey":    "sk_a1b2c3d4...",
		"orgNumber": "810034882",
	}
	
	jsonData, _ := json.Marshal(data)
	resp, _ := http.Post(
		"https://api.leadbase.no/index.php",
		"application/json",
		bytes.NewBuffer(jsonData),
	)
	
	body, _ := ioutil.ReadAll(resp.Body)
	fmt.Println(string(body))
}

x86-64 Assembly (for de virkelig tøffe utviklerne 😎)

; LeadBase API Client - x86-64 Assembly (Linux syscalls)
; 
; Lagre denne koden som: leadbase.asm
; Kompiler med: nasm -f elf64 leadbase.asm && ld -o leadbase leadbase.o
; Kjør med: ./leadbase

section .data
    ; HTTP Request
    request db "POST /index.php HTTP/1.1", 0x0D, 0x0A
            db "Host: api.leadbase.no", 0x0D, 0x0A
            db "Content-Type: application/json", 0x0D, 0x0A
            db "Content-Length: 52", 0x0D, 0x0A
            db 0x0D, 0x0A
            db '{"apiKey":"sk_test","orgNumber":"810034882"}', 0x0D, 0x0A
    request_len equ $ - request
    
    ; Socket setup
    sockaddr:
        dw 2                ; AF_INET
        dw 0x5000          ; Port 80 (big-endian)
        dd 0x5f6da8c0      ; api.leadbase.no IP (fake for demo)
        times 8 db 0

section .bss
    sockfd resq 1
    buffer resb 4096

section .text
    global _start

_start:
    ; socket(AF_INET, SOCK_STREAM, 0)
    mov rax, 41        ; sys_socket
    mov rdi, 2         ; AF_INET
    mov rsi, 1         ; SOCK_STREAM
    xor rdx, rdx       ; protocol = 0
    syscall
    mov [sockfd], rax
    
    ; connect(sockfd, &sockaddr, 16)
    mov rax, 42        ; sys_connect
    mov rdi, [sockfd]
    lea rsi, [sockaddr]
    mov rdx, 16
    syscall
    
    ; send(sockfd, request, request_len, 0)
    mov rax, 44        ; sys_sendto
    mov rdi, [sockfd]
    lea rsi, [request]
    mov rdx, request_len
    xor r10, r10
    syscall
    
    ; recv(sockfd, buffer, 4096, 0)
    mov rax, 45        ; sys_recvfrom
    mov rdi, [sockfd]
    lea rsi, [buffer]
    mov rdx, 4096
    xor r10, r10
    syscall
    
    ; write(stdout, buffer, rax)
    mov rdx, rax       ; bytes received
    mov rax, 1         ; sys_write
    mov rdi, 1         ; stdout
    lea rsi, [buffer]
    syscall
    
    ; close(sockfd)
    mov rax, 3         ; sys_close
    mov rdi, [sockfd]
    syscall
    
    ; exit(0)
    mov rax, 60        ; sys_exit
    xor rdi, rdi
    syscall

; Disclaimer: Denne koden er ment som en spøk. 
; Vennligst bruk et høynivåspråk for produksjonskode! 🚀

Rate Limiting

For å sikre stabil ytelse for alle brukere har APIet følgende grenser:

  • Maks 20 forespørsler per sekund per API-nøkkel
  • Overskridelser returnerer HTTP 429 (Too Many Requests)
  • Vi anbefaler å implementere retry-logikk med eksponentiell backoff

Sikkerhet

SSL/TLS krav

  • Alle API-forespørsler brukes over HTTPS (TLS 1.2 eller høyere)
  • API-nøkkelen skal aldri sendes over usikker HTTP-tilkobling
  • Sikre API-nøkkelen din og lagre den sikkert i miljøvariabler

Feilhåndtering

APIet returnerer strukturerte feilmeldinger. Her er de vanligste:

Kode Feil Årsak Løsning
400 Ugyldig JSON format Request body er ikke gyldig JSON Sjekk JSON-syntaksen, bruk JSON-validator
400 Manglende required felt apiKey eller søkeparameter mangler Inkluder apiKey og minst ett av: orgNumber eller companyName
400 Ugyldige parametere Request inneholder parametere som ikke er tillatt Send kun tillatte parametere: apiKey, orgNumber, companyName, fields
401 Ugyldig API-nøkkel API-nøkkelen er feil eller utløpt Kontroller API-nøkkelen, kontakt support hvis den er korrekt
403 Forbidden API-nøkkelen er ikke gyldig eller har ikke tilgang Sjekk API-nøkkelen, kontakt LeadBase for hjelp
404 Selskap ikke funnet Organisasjonsnummer eller firmanavn finnes ikke Kontroller stavingen, prøv alternativt søk
413 Payload Too Large Request payload er for stor Reduser payload-størrelsen eller bruk en større API-nøkkel
429 Too Many Requests Du har overskredet rate limit (20 req/sek) Vent litt før du sender nye forespørsler
500 Server Error Intern server feil Prøv igjen senere, kontakt support hvis problemet vedvarer

Eksempel negativ respons

Når selskap ikke finnes:

{
  "success": false,
  "error": "Selskap ikke funnet",
  "statusCode": 404
}

Når API-nøkkel er ugyldig:

{
  "success": false,
  "error": "Ugyldig API-nøkkel",
  "statusCode": 401
}
IP-blokkering: For å forhindre brute force-angrep, kan APIet blokkere IP-adresser som gjør mange feilaktige autentiseringsforespørsler. Hvis du opplever feil 401 (Ugyldig API-nøkkel) flere ganger fra samme IP-adresse, kan dette være en indikasjon på at IP-adressen er blokkert. Kontakt LeadBase for å få hjelp med å fjerne blokkeringen.

Best Practices

Generelt

  • Caching: Cache resultater lokalt for å redusere antall API-kall
  • Spesifikke felt: Bruk fields-parameteren for å hente kun de feltene du trenger
  • Error handling: Implementer robust feilhåndtering med retry-logikk
  • Timeout: Sett rimelige timeouts (10-30 sekunder) på dine forespørsler

Retry-strategi

Ved midlertidig feil (5xx eller timeout), bruk eksponentiell backoff:

  • Første forsøk: umiddelbar
  • Andre forsøk: vent 1 sekund
  • Tredje forsøk: vent 2 sekunder
  • Max 3 forsøk per forespørsel

Logg og monitorering

  • Logg alle API-kall for feilsøking
  • Overvåk rate limit-svar for å justere belastning
  • Sett opp alarmer for mange feil i strekk

Andre funksjoner

LeadBase tilbyr mer enn standard API-integrasjon. Vi er opptatt av at våre kunder får data på den måten de ønsker.

Egendefinerte løsninger

  • Skreddersydd API: Tilpasset API med dine spesifikke behov
  • Prosessflyter: Automatisering av større dataprosesser
  • AI-integrasjon: Avansert dataanalyse og innsikter
  • Custom integrasjoner: Direkte integrering med dine systemer
Interessert i egendefinerte løsninger? Kontakt oss på support@leadbase.no for å diskutere dine behov.

Support & Kontakt

Har du spørsmål eller problemer?

Support

Dokumentasjon

  • Les dokumentasjonen nøye før du kontakter support
  • Sjekk feilmeldinger og Best Practices-seksjonen
  • Inkluder API-forespørselen og respons når du kontakter support

Test API