Autentisering

En rad i ett huvud

Ingen växling, ingen andra rutt, ingen OAuth-dans. Du skickar nyckeln som en bearer-token på varje anrop, och det är hela autentiseringen.

Debet & Kredit kör på din egen server, så bas-URL:en är din — inte vår. Skriv in den här, så byts den ut i varje kodexempel i dokumentationen.

Authorization: Bearer dk_live_DIN_NYCKEL

Nyckeln börjar alltid med dk_live_ följt av 43 tecken. Prefixet gör den igenkännbar i en logg eller ett supportärende utan att hela nyckeln behöver skickas någonstans.

Nyckelns liv

Skapas i appen

Under Inställningar → API-nycklar, av en administratör i din egen installation. Aldrig i en miljövariabel, aldrig i en terminal, aldrig genom en omdriftsättning.

Visas exakt en gång

Databasen bär bara en SHA-256 av nyckeln och de fjorton första tecknen. Vi kan inte visa den igen, och vi kan inte läsa den ur din databas heller — tappas den bort återkallar du raden och skapar en ny.

Syns när den används

Listan visar när nyckeln senast användes och varifrån, plus hur många anrop den gjort mot sin kvot. En nyckel som används från en adress du inte känner igen syns där innan den syns i bokföringen.

Återkallas med ett klick

Och återkallelsen biter i samma sekund — inte när någon timeout löper ut. Behörigheten slås upp på nytt i varje databasfråga, så en nyckel som just dragits in öppnar ingenting ens mitt i ett pågående anrop.

Behörigheter

Behörigheten ligger i nyckelns rad i din databas, inte i token. Ändrar du vad en nyckel får göra gäller det vid nästa anrop — även för en nyckel som redan är utfärdad och används just nu.

BehörighetKodVad den ger
Läsadata:readHämtar fakturor, kunder, verifikat och nyckeltal. Ändrar ingenting.
Ta emot underlagintake:writeLämnar in ordrar och e-fakturor till inkorgen. Ser inget som redan finns.
Bokföraledger:writeSkapar och bokför fakturor genom samma spärrar som programmet självt: momslås, låsta perioder och avslutade räkenskapsår gäller lika.

Saknar nyckeln behörigheten en rutt kräver svarar den 403 med felkoden insufficient_scope och skriver ut vilken behörighet som behövdes.

Förvara nyckeln som ett lösenord

  • Aldrig i klientkod. Allt som körs i en webbläsare eller en app kan läsas av den som använder den. Anropen ska gå från din server.
  • Aldrig i ett kodarkiv. En nyckel som checkats in finns kvar i historiken även efter att den tagits bort ur filen.
  • Aldrig i en frågesträng. API:et accepterar nyckeln enbart i Authorization-huvudet. En nyckel i en URL hamnar i varje proxylogg på vägen, i webbläsarens historik och i hänvisningshuvudet till nästa sida.
  • HTTPS krävs. Kör din installation bakom ett giltigt certifikat. Över HTTP skickas nyckeln i klartext.
  • En nyckel per integration. Då kan du återkalla en utan att stoppa de andra, och du ser i listan vem som faktiskt anropar.

Varför inte OAuth?

OAuth löser ett problem vi inte har: att en tredjepartsapp ska få begränsad åtkomst till någon annans konto hos en central molntjänst. Din installation är din egen. Det finns ingen central tjänst att gå via, ingen tredje part som behöver ett medgivande från dig, och ingen leverantör som ska godkänna appen däremellan.

En bearer-token du utfärdar själv och kan dra in själv ger samma kontroll med en bråkdel av arbetet. Det som OAuth hade gett — begränsad räckvidd och omedelbar återkallelse — finns ändå: behörigheterna ovan, och en återkallningsknapp som biter direkt.

Takt

Varje nyckel har en kvot per timme — 600 anrop som förval, ställbart per nyckel. Är kvoten slut svarar API:et 429 med huvudet Retry-After som säger hur många sekunder som återstår. Kvoten räknas per nyckel, så en integration som skenar tystar inte de andra. Talet står också vid varje endpoint i referensen.

Testa att nyckeln lever

curl https://din-installation.se/api/v1/meta \
  -H "Authorization: Bearer dk_live_DIN_NYCKEL"

Ett 200 betyder att nyckeln fungerar, och svaret räknar upp exakt vad den får göra. Rutten kräver ingen särskild behörighet, så den fungerar för varje nyckel.

Vad ingen nyckel någonsin når

Lönespecifikationer, personaluppgifter, dina företagsuppgifter, autogiromedgivanden och dina sparade nycklar ligger utanför API:ets räckvidd — oavsett vilka behörigheter nyckeln har. Gränsen sitter i databasen och inte i gränssnittet, så den gäller även om ett anrop skulle be om något annat.