← Tillbaka till Debito

Fakturor

Skapa, hämta och hantera kundfakturor. Alla belopp i öre (1 kr = 100 öre).

GETinvoicesscope: read

Lista alla fakturor med pagination och filtrering.

Query parameters

status, customer_id, from_date, to_date, project_id, limit (max 200), offset

Request

{
  "endpoint": "invoices",
  "method": "GET",
  "params": {
    "status": "sent",
    "from_date": "2026-01-01",
    "limit": 25,
    "offset": 0
  }
}

Response

{
  "data": [
    {
      "id": "6ced0274-3988-...",
      "invoice_number": 10,
      "invoice_date": "2026-04-01",
      "due_date": "2026-05-01",
      "status": "sent",
      "currency": "SEK",
      "subtotal": 1000000,
      "vat_total": 250000,
      "total": 1250000,
      "ocr_number": "000010",
      "customer_id": "a1d26e4b-...",
      "customers": { "name": "Acme AB" },
      "invoice_lines": [
        {
          "description": "Konsulttjänst",
          "quantity": 10,
          "unit_price": 100000,
          "vat_rate": 25,
          "line_total": 1000000,
          "vat_amount": 250000,
          "account_number": 3010
        }
      ]
    }
  ],
  "meta": { "total": 42, "limit": 25, "offset": 0 }
}
GETinvoices/:idscope: read

Hämta en enskild faktura med alla rader.

Request

{
  "endpoint": "invoices",
  "method": "GET",
  "id": "6ced0274-3988-459e-8067-de4b475506ef"
}

Response

{
  "data": {
    "id": "6ced0274-...",
    "invoice_number": 10,
    "status": "sent",
    "total": 1250000,
    "invoice_lines": [...]
  }
}
POSTinvoicesscope: write

Skapa en ny faktura. Fakturanummer och OCR genereras automatiskt.

Fält

FältTypKravBeskrivning
customer_idUUIDNejKund-ID (om befintlig kund)
invoice_datestringJaFakturadatum (YYYY-MM-DD)
due_datestringJaFörfallodatum (YYYY-MM-DD)
payment_termsintegerNejBetalningsvillkor i dagar (default 30)
currencystringNejValutakod (default SEK)
our_referencestringNejVår referens
your_referencestringNejEr referens
notesstringNejAnteckningar (visas på faktura)
reverse_chargebooleanNejOmvänd skattskyldighet
bankgirostringNejBankgiro för betalning
plusgirostringNejPlusgiro för betalning
subtotalintegerJaNetto i öre
vat_totalintegerJaTotal moms i öre
totalintegerJaTotalbelopp i öre (netto + moms)
statusstringNej"draft" eller "sent" (default draft)
linesarrayJaFakturarader (se nedan)
external_idstringNejFakturans id i ert system. Unikt per bolag. Samma id igen returnerar den befintliga fakturan (already_exists: true) i stället för att skapa en till.
external_numberstringNejFakturanumret kunden fick, när ert system numrerar. Visas i verifikationstexten. Debitos eget invoice_number är då internt.

Request

{
  "endpoint": "invoices",
  "method": "POST",
  "params": {
    "customer_id": "a1d26e4b-...",
    "invoice_date": "2026-04-14",
    "due_date": "2026-05-14",
    "payment_terms": 30,
    "currency": "SEK",
    "subtotal": 1000000,
    "vat_total": 250000,
    "total": 1250000,
    "status": "draft",
    "lines": [
      {
        "description": "Konsulttjänst april",
        "quantity": 10,
        "unit": "tim",
        "unitPrice": 100000,
        "discountPercent": 0,
        "vatRate": 25,
        "accountNumber": 3010
      }
    ]
  }
}

Response

{
  "data": {
    "id": "new-uuid-...",
    "invoice_number": 12,
    "ocr_number": "0000127",
    "status": "draft",
    ...
  }
}
POSTinvoices/:id (action: book)scope: write

Bokför fakturan: skapar verifikationen (kundfordran, försäljning, utgående moms). Idempotent: en redan bokförd faktura returnerar samma verifikation (already_booked: true). Kontantmetoden bokför inget här utan först vid betalning.

Request

{
  "endpoint": "invoices",
  "method": "POST",
  "id": "6ced0274-...",
  "params": { "action": "book" }
}

Response

{ "data": { "id": "6ced0274-...", "status": "sent", "verification_id": "9b1c...", "total_sek": 1250000 } }
POSTinvoices/:id (action: send)scope: write

Markera fakturan som skickad utan att bokföra.

Request

{
  "endpoint": "invoices",
  "method": "POST",
  "id": "6ced0274-...",
  "params": { "action": "send" }
}
POSTinvoices/:id (action: pay)scope: write

Registrera betalningen: bank (1930) mot kundfordran (1510) på betaldatumet. Avvikande belopp bokförs som kursvinst/kursförlust. Kontantmetoden bokför intäkt och moms först nu. Idempotent: en redan betald faktura returnerar samma betalningsverifikation (already_paid: true). Fakturametoden kräver att fakturan är bokförd först.

Fält

FältTypKravBeskrivning
payment_datestringNejBetaldatum YYYY-MM-DD (default idag)
paid_amountintegerNejInbetalt belopp i öre (default fakturans total)

Request

{
  "endpoint": "invoices",
  "method": "POST",
  "id": "6ced0274-...",
  "params": { "action": "pay", "payment_date": "2026-05-02" }
}

Response

{ "data": { "id": "6ced0274-...", "status": "paid", "payment_verification_id": "c4e1...", "paid_amount": 1250000 } }
POSTinvoices/:id (action: credit)scope: write

Kreditera en utställd faktura. Skapar en kreditfaktura (samma rader negerade, credit_invoice_id pekar på originalet) och bokför originalets verifikation vänd. Originalet får status credited. Idempotent: en redan krediterad faktura returnerar samma kreditfaktura (already_credited: true). Ett utkast krediteras inte, det annulleras.

Fält

FältTypKravBeskrivning
credit_datestringNejKreditdatum YYYY-MM-DD (default idag)
reasonstringNejAnledning, hamnar som anteckning på kreditfakturan
external_idstringNejKreditfakturans id i ert system
external_numberstringNejKreditfakturans nummer i ert system

Request

{
  "endpoint": "invoices",
  "method": "POST",
  "id": "6ced0274-...",
  "params": { "action": "credit", "credit_date": "2026-05-10", "reason": "Felaktigt belopp" }
}

Response

{ "data": { "id": "6ced0274-...", "status": "credited", "credit_note_id": "7a2f...", "verification_id": "d0b9...", "booked": true } }
POSTinvoices/:id (action: cancel)scope: write

Annullera ett utkast. En utställd faktura går inte att annullera (409 CREDIT_REQUIRED), den ska krediteras.

Request

{
  "endpoint": "invoices",
  "method": "POST",
  "id": "6ced0274-...",
  "params": { "action": "cancel" }
}