# Registrera en betalning (/api/guider/registrera-betalning)

> Matcha en inbetalning mot en kundfaktura, registrera hel- eller delbetalning och återför den vid behov.

Den här guiden registrerar en inbetalning mot en bokförd kundfaktura, först som delbetalning och sedan resten, och visar hur en felregistrerad betalning återförs. Alla namn, nummer och belopp är påhittade exempel.

Du behöver en access token med scope `invoice`. Det täcker både fakturor och inbetalningar.

<Callout title="Betalningen bokförs direkt">
I Klirr finns ingen obokförd betalning. `POST /3/invoicepayments` bokför verifikatet direkt, och `PUT /3/invoicepayments/{Number}/bookkeep` gör ingenting. Endpointen finns bara för att Fortnox-integrationer som anropar den ska fungera.
</Callout>

<Steps>
<Step>
### Hitta fakturan [#hitta-fakturan]

Sök bland obetalda fakturor, till exempel på OCR-numret från bankfilen. `filter=unpaid` ger bokförda, obetalda fakturor, inklusive förfallna och delbetalda.

<Tabs groupId="lang" persist items={['curl','TypeScript']}>
<Tab value="curl">
```bash
curl "https://app.klirr.ai/api/v1/3/invoices?filter=unpaid&ocr=5700003" \
  -H "Authorization: Bearer <access_token>"
```
</Tab>
<Tab value="TypeScript">
```ts
const BASE = 'https://app.klirr.ai/api/v1';
const headers = {
  Authorization: 'Bearer <access_token>',
  'Content-Type': 'application/json',
};

const res = await fetch(`${BASE}/3/invoices?filter=unpaid&ocr=5700003`, { headers });
const { Invoices } = await res.json();
const invoice = Invoices[0];
const balance = Number(invoice.Balance); // strängar i listformen
```
</Tab>
</Tabs>

```json
{
  "Invoices": [
    {
      "@url": "https://app.klirr.ai/api/v1/3/invoices/57",
      "DocumentNumber": "57",
      "CustomerName": "Lundgrens Måleri AB",
      "CustomerNumber": "1002",
      "Balance": "23500",
      "Total": "23500",
      "Booked": true,
      "OCR": "5700003",
      "DueDate": "2026-11-17"
    }
  ],
  "MetaInformation": { "@TotalResources": 1, "@TotalPages": 1, "@CurrentPage": 1 }
}
```

I listformen är `Balance` och `Total` **strängar**. Se [Fortnox-kompatibilitet](/api/fortnox-kompatibilitet).
</Step>

<Step>
### Registrera en delbetalning [#registrera-en-delbetalning]

`InvoiceNumber` är fakturans `DocumentNumber`, men här som ett **tal**. `Amount` är i kronor. Utelämnar du beloppet regleras hela det öppna beloppet. `PaymentDate` får inte ligga i framtiden. Utelämnat `ModeOfPaymentAccount` ger standardkontot.

<Tabs groupId="lang" persist items={['curl','TypeScript']}>
<Tab value="curl">
```bash
curl -X POST https://app.klirr.ai/api/v1/3/invoicepayments \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"InvoicePayment":{"InvoiceNumber":57,"Amount":10000,"PaymentDate":"2026-10-28","ModeOfPayment":"BG"}}'
```
</Tab>
<Tab value="TypeScript">
```ts
const pay = await fetch(`${BASE}/3/invoicepayments`, {
  method: 'POST',
  headers,
  body: JSON.stringify({
    InvoicePayment: {
      InvoiceNumber: Number(invoice.DocumentNumber),
      Amount: 10000,
      PaymentDate: '2026-10-28',
      ModeOfPayment: 'BG',
    },
  }),
});
if (pay.status !== 201) throw new Error(`Betalningen avvisades: ${pay.status}`);
const { InvoicePayment } = await pay.json();
```
</Tab>
</Tabs>

Svar (`201`, förkortat):

```json
{
  "InvoicePayment": {
    "@url": "https://app.klirr.ai/api/v1/3/invoicepayments/12",
    "Number": "12",
    "InvoiceNumber": 57,
    "Amount": 10000,
    "AmountCurrency": 10000,
    "PaymentDate": "2026-10-28",
    "ModeOfPaymentAccount": 1930,
    "ModeOfPayment": "BG",
    "Booked": true,
    "InvoiceTotal": 23500,
    "Currency": "SEK",
    "VoucherNumber": 31,
    "VoucherSeries": "C",
    "VoucherYear": 3
  }
}
```
</Step>

<Step>
### Kontrollera saldot [#kontrollera-saldot]

Efter en delbetalning står fakturan kvar som obetald och `Balance` visar återstoden.

<Tabs groupId="lang" persist items={['curl','TypeScript']}>
<Tab value="curl">
```bash
curl https://app.klirr.ai/api/v1/3/invoices/57 \
  -H "Authorization: Bearer <access_token>"
```
</Tab>
<Tab value="TypeScript">
```ts
const inv = await fetch(`${BASE}/3/invoices/57`, { headers });
const { Invoice } = await inv.json();
console.log(Invoice.Balance); // 13500 (tal i den fullständiga formen)
```
</Tab>
</Tabs>
</Step>

<Step>
### Registrera resten [#registrera-resten]

Utelämna `Amount` så regleras hela det öppna beloppet. Fakturan blir då betald.

<Tabs groupId="lang" persist items={['curl','TypeScript']}>
<Tab value="curl">
```bash
curl -X POST https://app.klirr.ai/api/v1/3/invoicepayments \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"InvoicePayment":{"InvoiceNumber":57,"PaymentDate":"2026-11-12"}}'
```
</Tab>
<Tab value="TypeScript">
```ts
await fetch(`${BASE}/3/invoicepayments`, {
  method: 'POST',
  headers,
  body: JSON.stringify({ InvoicePayment: { InvoiceNumber: 57, PaymentDate: '2026-11-12' } }),
});
```
</Tab>
</Tabs>

Ett belopp som överstiger det öppna beloppet ger `400`. Klirr har ingen modell för överbetalning. Är det öppna beloppet redan noll blir svaret `409`.
</Step>

<Step>
### Återför en felregistrerad betalning [#återför-en-felregistrerad-betalning]

Belopp, datum och konto kan inte ändras med `PUT` (ändrade värden ger `409`). Återför i stället betalningen med `DELETE` och registrera en ny. Klirr bokför ett rättelseverifikat och öppnar fakturans saldo igen. Svaret är `204`.

<Tabs groupId="lang" persist items={['curl','TypeScript']}>
<Tab value="curl">
```bash
curl -X DELETE https://app.klirr.ai/api/v1/3/invoicepayments/12 \
  -H "Authorization: Bearer <access_token>"
```
</Tab>
<Tab value="TypeScript">
```ts
const del = await fetch(`${BASE}/3/invoicepayments/12`, { method: 'DELETE', headers });
// del.status === 204
```
</Tab>
</Tabs>

Betalningen försvinner sedan ur `GET /3/invoicepayments`, och `GET` på numret ger `404`.
</Step>
</Steps>

## Att tänka på [#att-tänka-på]

- **Utländsk valuta:** för en faktura i annan valuta än SEK är `AmountCurrency` obligatoriskt. Se [belopp och valuta](/api/referens/invoicepayments#belopp-och-valuta).
- **Kontantmetoden:** organisationer med kontantmetoden kan inte delbetala ännu (`400`).
- **Fakturan måste vara bokförd:** ett utkast kan inte betalas (`400`). Bokför den först, se [Skapa och skicka en faktura](/api/guider/skapa-och-skicka-faktura).

Se [Inbetalningar](/api/referens/invoicepayments) för alla fält och fel.
