För utvecklare

Kvittia API – koppla Kvittia till era system

Hämta kvitton, leverantörsfakturor, kundfakturor och banktransaktioner, ladda upp kvitton och markera dem som bokförda – direkt från ert affärssystem, ert BI-verktyg eller egen kod.

Bas-adresshttps://kvittia.se/api/v1
FormatJSON · REST · UTF-8
AutentiseringBearer-nyckel per bolag
Versionv1

Översikt

Kvittia API ger ert bolag programmatisk åtkomst till samma uppgifter som finns i Kvittia. Vanliga användningsområden:

  • Bokföring: hämta kvitton och leverantörsfakturor med belopp, moms och BAS-konto till ert ekonomi- eller affärssystem – och markera dem som bokförda.
  • Uppladdning: skicka kvitton från egna appar, skannrar eller kortleverantörer. Kvittia läser av dem automatiskt.
  • Rapporter och BI: läs kvitton, fakturor och banktransaktioner till Power BI, Excel eller egen analys.
  • Avstämning: se vilka banktransaktioner som saknar underlag.

API:et följer REST: resurser har egna adresser, du använder GET för att läsa, POST för att skapa och PATCH för att ändra. Alla svar är JSON.

Kom igång

  1. Logga in i Kvittia som admin i bolaget ni vill koppla.
  2. Gå till Inställningar → API och klicka Skapa nyckel. Välj Läsa eller Läsa och skriva.
  3. Kopiera nyckeln – den visas bara en gång. Den börjar med kv_live_.
  4. Gör ert första anrop:
bash
curl https://kvittia.se/api/v1/bolag \
  -H "Authorization: Bearer kv_live_DIN_NYCKEL"

Svaret innehåller bolagets namn, abonnemang och vilken nyckel som användes.

Autentisering

Skicka nyckeln i headern Authorization i varje anrop:

http
GET /api/v1/kvitton HTTP/1.1
Host: kvittia.se
Authorization: Bearer kv_live_DIN_NYCKEL
Accept: application/json
  • Varje nyckel hör till ett bolag. Har ni flera bolag skapar ni en nyckel i varje.
  • Behörighet: Läsa ger tillgång till alla GET-anrop. Läsa och skriva ger även POST och PATCH.
  • Nyckeln gäller så länge personen som skapade den är admin i bolaget. Ni kan när som helst återkalla en nyckel under Inställningar → API.
  • Använd alltid HTTPS och lägg aldrig nyckeln i kod som körs i en webbläsare eller app hos slutanvändare.

Format

TypFormatExempel
DatumÅÅÅÅ-MM-DD2026-10-05
TidpunktISO 8601 med tidszon2026-10-05T12:41:09+02:00
BeloppDecimaltal med punkt, inklusive moms1249.50
IdKvitton och fakturor: UUID. Leverantörer och transaktioner: heltal.9b2f6c1e-…
Tomt värdenull

Skicka data som application/json eller, när du laddar upp filer, som multipart/form-data.

Paginering

Listor returneras sida för sida. Använd sida (från 1) och per_sida (1–100, standard 50).

json
{
  "data": [ … ],
  "meta": { "sida": 1, "per_sida": 50, "totalt": 213, "sidor": 5 }
}

Synka ändringar

För att bara hämta det som ändrats sedan förra körningen: spara tidpunkten när du startar en synk och skicka den som uppdaterad_efter nästa gång. Fungerar för kvitton, leverantörsfakturor och kundfakturor.

bash
curl "https://kvittia.se/api/v1/kvitton?uppdaterad_efter=2026-10-05T06:00:00%2B02:00&per_sida=100" \
  -H "Authorization: Bearer kv_live_DIN_NYCKEL"

Felkoder

Fel returneras med en HTTP-statuskod och ett JSON-objekt:

json
{
  "fel": {
    "kod": "valideringsfel",
    "meddelande": "Uppgifterna kunde inte valideras.",
    "falt": { "datum": ["Datumet måste ha formatet ÅÅÅÅ-MM-DD."] }
  }
}
StatusKodBetydelse
401saknar_nyckel, ogiltig_nyckelNyckeln saknas, är felstavad eller återkallad.
402abonnemang_sparratBolagets abonnemang är spärrat.
403endast_lasningNyckeln får bara läsa.
403tjansten_ingar_inteTjänsten (t.ex. leverantörsfakturor) ingår inte i abonnemanget.
403agaren_saknar_behorighet, bolaget_inaktivtPersonen som skapade nyckeln är inte längre admin, eller bolaget är inaktiverat.
404hittades_inte, okand_adressPosten eller adressen finns inte.
409dubblettKvittot finns redan. Svaret innehåller befintligt_id.
422valideringsfel, inte_ett_kvittoUppgifterna är felaktiga, eller filen var inte ett kvitto.
423perioden_lastMånaden är låst efter månadsavslut.
429for_manga_anropFör många anrop – vänta enligt Retry-After.

Begränsningar

Varje nyckel får göra 120 anrop per minut. Svaren innehåller X-RateLimit-Limit och X-RateLimit-Remaining. Vid 429 anger Retry-After hur många sekunder du ska vänta. Filer får vara högst 10 MB.

GET/bolag

Bolaget som nyckeln hör till, dess abonnemang och vilka tjänster som ingår.

json
{
    "data": {
        "id": 12,
        "namn": "Företaget AB",
        "orgnr": "556677-8899",
        "abonnemang": {
            "paket": "Företag",
            "tjanster": [
                "kvitton",
                "leverantorsfakturor",
                "avstamning",
                "kundfakturor",
                "revisorspaket",
                "sok_foretag"
            ]
        },
        "nyckel": {
            "namn": "Affärssystemet",
            "behorighet": "skriv",
            "prefix": "kv_live_Ab12Cd"
        }
    }
}

GET/referens

Tillåtna värden för kategorier, momssatser, betalsätt och statusar. Använd dem när du laddar upp eller ändrar kvitton.

GET/kvitton

Lista bolagets kvitton, nyast först.

ParameterTypBeskrivning
frandatumKvitton med datum från och med.
tilldatumKvitton med datum till och med.
statustextny, bokford eller avvisad.
kategoritextExakt kategori, se /referens.
uppdaterad_eftertidpunktBara kvitton som ändrats efter tidpunkten.
soktextSöker i butik och kvittonummer.
sida, per_sidaheltalSe Paginering.
bash
curl "https://kvittia.se/api/v1/kvitton?fran=2026-10-01&status=ny" \
  -H "Authorization: Bearer kv_live_DIN_NYCKEL"

GET/kvitton/{id}

Ett kvitto. Svaret innehåller kvittoobjektet:

json
{
  "data": {
      "id": "9b2f6c1e-4a8d-4f3b-9a51-2f0c7e6d1a44",
      "butik": "Restaurang Exempel",
      "orgnr": "556677-8899",
      "datum": "2026-10-05",
      "belopp": 330,
      "moms": 35.36,
      "netto": 294.64,
      "momssats": "12",
      "valuta": "SEK",
      "belopp_valuta": null,
      "kurs": null,
      "kategori": "Restaurang & lunch",
      "konto": "6071",
      "betalsatt": "Företagskort",
      "kvittonr": "10442",
      "notering": null,
      "status": "ny",
      "status_kommentar": null,
      "bokford_at": null,
      "avlases": false,
      "kalla": "app",
      "filtyp": "bild",
      "matchad_transaktion": 5512,
      "anvandare": {
          "namn": "Anna Andersson",
          "epost": "anna@foretaget.se"
      },
      "skapad": "2026-10-05T12:41:09+02:00",
      "uppdaterad": "2026-10-05T12:41:15+02:00",
      "fil_url": "https://kvittia.se/api/v1/kvitton/9b2f6c1e-4a8d-4f3b-9a51-2f0c7e6d1a44/fil"
  }
}

GET/kvitton/{id}/fil

Själva underlaget – bild, PDF eller sparat mejl – som filnedladdning.

bash
curl -o kvitto.jpg https://kvittia.se/api/v1/kvitton/9b2f6c1e-…/fil \
  -H "Authorization: Bearer kv_live_DIN_NYCKEL"

POST/kvitton

Ladda upp ett kvitto som multipart/form-data. Kräver nyckel med skrivbehörighet. Skickar du bara filen läser Kvittia av butik, datum, belopp, moms och kategori automatiskt.

FältTypBeskrivning
fil *filJPG, PNG, WebP eller PDF, högst 10 MB.
las_avtrue/falseLäs av kvittot automatiskt. Standard: true om belopp saknas.
butik, datum, belopptext, datum, talKrävs om las_av=false.
moms, momssatstal, textMomsbelopp och momssats (25, 12, 6, 0, blandad).
kategori, betalsatttextSe /referens.
orgnr, kvittonr, noteringtextValfritt.
tillat_dubbletttrue/falseSpara även om kvittot verkar finnas redan.
bash
# Låt Kvittia läsa av kvittot
curl -X POST https://kvittia.se/api/v1/kvitton \
  -H "Authorization: Bearer kv_live_DIN_NYCKEL" \
  -F "fil=@kvitto.jpg"

# Eller skicka uppgifterna själv
curl -X POST https://kvittia.se/api/v1/kvitton \
  -H "Authorization: Bearer kv_live_DIN_NYCKEL" \
  -F "fil=@kvitto.pdf" -F "las_av=false" \
  -F "butik=Restaurang Exempel" -F "datum=2026-10-05" \
  -F "belopp=330.00" -F "moms=35.36" -F "momssats=12" \
  -F "kategori=Restaurang & lunch"

Svar 201 Created med kvittoobjektet. Om avläsningen tar längre tid är avlases true – hämta kvittot igen om en stund. Finns kvittot redan svarar API:et 409 med befintligt_id.

PATCH/kvitton/{id}

Ändra kategori, konto, betalsätt, notering eller status – t.ex. markera kvittot som bokfört när det har förts över till ert ekonomisystem. Kräver skrivbehörighet.

FältTypBeskrivning
statustextny, bokford eller avvisad.
status_kommentartextOrsak vid avvisad.
kategori, betalsatttextSe /referens.
kontotextBAS-konto med fyra siffror.
noteringtextFritext, högst 1000 tecken.
bash
curl -X PATCH https://kvittia.se/api/v1/kvitton/9b2f6c1e-… \
  -H "Authorization: Bearer kv_live_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"status": "bokford"}'

GET/leverantorsfakturor

Leverantörsfakturor med attest- och betalstatus. Kräver tjänsten Leverantörsfakturor. Även /leverantorsfakturor/{id} och /leverantorsfakturor/{id}/fil.

ParameterTypBeskrivning
fran, tilldatumFakturadatum.
statustextgranska, godkand eller betald.
leverantor_idheltalBara en leverantör.
uppdaterad_efter, sida, per_sidaSom för kvitton.
json
{
  "data": {
      "id": "c41d0f7a-0b6e-4d1e-8f2a-7b9c3e5d2f10",
      "typ": "leverantor",
      "leverantor": "Kontorsvaror AB",
      "orgnr": "556123-4567",
      "leverantor_id": 87,
      "fakturanr": "2026-1182",
      "ocr": "4711082",
      "fakturadatum": "2026-10-05",
      "forfallodatum": "2026-11-04",
      "betaldatum": null,
      "belopp": 1249,
      "moms": 249.8,
      "momssats": "25",
      "valuta": "SEK",
      "belopp_sek": 1249,
      "bankgiro": "5050-1055",
      "plusgiro": null,
      "iban": null,
      "kategori": "Kontorsmaterial",
      "status": "godkand",
      "bokforing": "ny",
      "notering": null,
      "matchad_transaktion": null,
      "skapad": "2026-10-05T08:02:11+02:00",
      "uppdaterad": "2026-10-05T09:15:40+02:00",
      "fil_url": "https://kvittia.se/api/v1/leverantorsfakturor/c41d0f7a-0b6e-4d1e-8f2a-7b9c3e5d2f10/fil"
  }
}

GET/kundfakturor

Kundfakturor och om de är betalda (matchade mot en insättning). Kräver tjänsten Kundfakturor. Parametrar: fran, till, status (betald/obetald), uppdaterad_efter. Även /kundfakturor/{id} och /kundfakturor/{id}/fil.

GET/leverantorer

Leverantörsregistret med org.nr och betalningsuppgifter. Parameter: sok (namn eller org.nr).

GET/transaktioner

Rader från uppladdade kontoutdrag och vilket kvitto eller vilken faktura de är matchade mot. Kräver tjänsten Bankavstämning. Parametrar: fran, till och matchad (true/false) – matchad=false ger transaktioner som saknar underlag.

json
{
    "data": [
        {
            "id": 5512,
            "datum": "2026-10-05",
            "text": "RESTAURANG EXEMPEL",
            "belopp": -330,
            "saldo": 48211.5,
            "referens": null,
            "kvitto_id": "9b2f6c1e-4a8d-4f3b-9a51-2f0c7e6d1a44",
            "faktura_id": null
        }
    ],
    "meta": {
        "sida": 1,
        "per_sida": 50,
        "totalt": 1,
        "sidor": 1
    }
}

Objekt

Kvitto

FältBeskrivning
idKvittots id (UUID).
butik, orgnr, datum, kvittonrSäljare, säljarens org.nr, köpdatum och kvittonummer.
belopp, moms, netto, momssatsBelopp inklusive moms, momsbelopp, belopp utan moms och momssats.
valuta, belopp_valuta, kursFör kvitton i utländsk valuta: ursprungligt belopp och växelkurs. belopp är alltid i SEK.
kategori, konto, betalsattKategori, BAS-konto och hur kvittot betalades.
status, status_kommentar, bokford_atBokföringsstatus.
avlasestrue medan Kvittia läser av kvittot.
kalla, filtypHur kvittot kom in (app, email, api) och om underlaget är bild, PDF eller mejl.
matchad_transaktionId för banktransaktionen kvittot är matchat mot.
anvandarePersonen som laddade upp kvittot.
fil_urlAdress för att hämta underlaget.

Faktura

FältBeskrivning
id, typFakturans id (UUID) och leverantor eller kund.
leverantor / kund, orgnr, leverantor_idMotpart och, för leverantörsfakturor, id i leverantörsregistret.
fakturanr, ocr, fakturadatum, forfallodatum, betaldatumFakturauppgifter.
belopp, moms, momssats, valuta, belopp_sekBelopp i fakturans valuta och omräknat till SEK.
bankgiro, plusgiro, ibanBetalningsmottagare.
statusLeverantörsfaktura: granska, godkand, betald. Kundfaktura: obetald, betald.
bokforingny, bokford eller avvisad.

Kodexempel

javascript
const BAS = 'https://kvittia.se/api/v1';
const NYCKEL = process.env.KVITTIA_NYCKEL;

// Hämta alla nya kvitton, sida för sida
async function hamtaKvitton() {
  let sida = 1, alla = [];
  while (true) {
    const r = await fetch(`${BAS}/kvitton?status=ny&per_sida=100&sida=${sida}`, {
      headers: { Authorization: `Bearer ${NYCKEL}` }
    });
    if (!r.ok) throw new Error((await r.json()).fel.meddelande);
    const { data, meta } = await r.json();
    alla.push(...data);
    if (sida >= meta.sidor) return alla;
    sida++;
  }
}

// Markera ett kvitto som bokfört
await fetch(`${BAS}/kvitton/${id}`, {
  method: 'PATCH',
  headers: { Authorization: `Bearer ${NYCKEL}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({ status: 'bokford' })
});

Ändringslogg

v1 · 2026-10-08Första versionen: bolag, referensdata, kvitton (läsa, ladda upp, ändra), leverantörsfakturor, kundfakturor, leverantörer och banktransaktioner.

Vi gör aldrig ändringar som bryter befintliga integrationer i v1 – nya fält kan tillkomma i svaren, så ignorera fält ni inte känner igen.

Behöver ni hjälp med integrationen?

Vi hjälper gärna till att koppla Kvittia till ert system.

Kontakta oss