# Konton (/api/referens/accounts)

> Kontoplanen – lista, skapa, hämta, uppdatera och inaktivera konton via /3/accounts.

Kontoresursen speglar Fortnox `/3/accounts`. Kontot adresseras på sitt kontonummer (`Number`), fyra siffror enligt BAS. Saldona räknas fram ur bokföringen för ett visst räkenskapsår och lagras inte på kontot.

**Scope:** `bookkeeping` · <Plan min="ai_pro" />

## Endpoints [#endpoints]

| Metod och sökväg | Beskrivning |
|---|---|
| <Endpoint method="GET" path="/api/v1/3/accounts" /> | Lista konton (reducerad listform) |
| <Endpoint method="POST" path="/api/v1/3/accounts" /> | Skapa ett konto. Svarar `201`. |
| <Endpoint method="GET" path="/api/v1/3/accounts/{Number}" /> | Hämta ett konto (fullständig form) |
| <Endpoint method="PUT" path="/api/v1/3/accounts/{Number}" /> | Uppdatera ett konto (partiellt) |
| <Endpoint method="DELETE" path="/api/v1/3/accounts/{Number}" /> | Inaktivera ett konto. Svarar `204`. |

Bas-URL: `https://app.klirr.ai/api/v1`. Skrivningar kuverteras i `Account`.

## Räkenskapsår [#räkenskapsår]

Alla fem anrop läser `?financialyear=`. Det styr `Year` och vilket år `BalanceBroughtForward`/`BalanceCarriedForward` räknas för. Värdet är räkenskapsårets `Id` från [`/3/financialyears`](/api/referens/financialyears), **inte** ett årtal. Utelämnat gäller det räkenskapsår som innehåller dagens datum, annars det senaste.

- Ett värde som inte bara består av siffror ger `400`.
- Ett okänt `Id` ger `404`.
- Saknar organisationen räkenskapsår svarar alla anrop `404`. Vid `POST`/`PUT` görs kontrollen före skrivningen, så inget sparas.

## Listparametrar [#listparametrar]

Utöver [paginering](/api/paginering) (`page`, `limit`, `offset`) och `sortorder` (`asc`/`desc`, även `ascending`/`descending`):

| Parameter | Värden | Beskrivning |
|---|---|---|
| `sortby` | `number` | Enda värdet. Standard är kontonummer. |
| `number` | text | Exakt kontonummer. Klirr-tillägg, inte en Fortnox-parameter. |
| `financialyear` | heltal | Se ovan. |

Det finns inget `filter`. Listan innehåller alla konton, både aktiva och inaktiva (`Active: false`). Fortnox-parametrarna `sru` och `lastmodified` stöds inte och ger `400`.

## Fält [#fält]

Fullständig form (`GET /3/accounts/{Number}`, och svaret på `POST`/`PUT`).

| Fält | Typ | Skrivskyddat | Beskrivning |
|---|---|---|---|
| `@url` | string | ja | Resursens URL i Klirr. |
| `Number` | number | efter skapande | Kontonummer, fyra siffror (t.ex. `1930`). **Obligatoriskt vid `POST`.** Ignoreras vid `PUT`. |
| `Description` | string | nej | Kontots namn. **Obligatoriskt vid `POST`.** |
| `Active` | boolean | nej | `false` för inaktiverat konto. Tolkas strikt; `""` räknas som ej angivet. |
| `VATCode` | string | nej | Momskod. Måste vara text; tömmes med `API_BLANK`. |
| `BalanceBroughtForward` | number | ja | Ingående balans, beräknad ur bokföringen. Att skicka fältet ger `400`. |
| `BalanceCarriedForward` | number | ja | Utgående balans, beräknad. Ignoreras om det skickas. |
| `Year` | number | ja | Räkenskapsårets `Id`, inte ett årtal. |
| `SRU` | number | nej | SRU-kod. Bärs vidare, standard `0`. |
| `CostCenter` | string | nej | Bärs vidare. |
| `CostCenterSettings` | `ALLOWED` \| `MANDATORY` \| `NOTALLOWED` | nej | Bärs vidare, standard `NOTALLOWED`. |
| `Project` | string | nej | Bärs vidare. |
| `ProjectSettings` | `ALLOWED` \| `MANDATORY` \| `NOTALLOWED` | nej | Bärs vidare, standard `NOTALLOWED`. |
| `TransactionInformation` | string | nej | Bärs vidare. |
| `TransactionInformationSettings` | `ALLOWED` \| `MANDATORY` \| `NOTALLOWED` | nej | Bärs vidare, standard `NOTALLOWED`. |
| `QuantitySettings` | `ALLOWED` \| `MANDATORY` \| `NOTALLOWED` | ja | Standard `NOTALLOWED`. |
| `QuantityUnit` | string | ja | Standard `""`. |
| `OpeningQuantities` | array | nej | `[{ Balance, Project }]`. Bärs vidare, standard `[]`. |

"Bärs vidare" betyder att Klirr sparar värdet och returnerar det oförändrat, men det påverkar inte bokföringen. Kontotyp och normalsida härleds ur kontonumret.

### Listform [#listform]

`GET /3/accounts` returnerar exakt dessa tolv fält: `@url`, `Active`, `BalanceBroughtForward`, `CostCenter`, `CostCenterSettings`, `Description`, `Number`, `Project`, `ProjectSettings`, `SRU`, `Year`, `VATCode`. `BalanceCarriedForward` ingår inte i listan. Belopp och nummer är tal (JSON-nummer) även i listformen.

## Skapa ett konto [#skapa-ett-konto]

<Tabs groupId="lang" persist items={['curl','TypeScript']}>
<Tab value="curl">
```bash
curl -X POST https://app.klirr.ai/api/v1/3/accounts \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"Account":{"Number":6991,"Description":"Övriga externa kostnader, ej avdragsgilla"}}'
```
</Tab>
<Tab value="TypeScript">
```ts
const res = await fetch('https://app.klirr.ai/api/v1/3/accounts', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer <access_token>',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    Account: { Number: 6991, Description: 'Övriga externa kostnader, ej avdragsgilla' },
  }),
});
const { Account } = await res.json(); // 201 Created
```
</Tab>
</Tabs>

Svar (`201`):

```json
{
  "Account": {
    "@url": "https://app.klirr.ai/api/v1/3/accounts/6991",
    "Number": 6991,
    "Description": "Övriga externa kostnader, ej avdragsgilla",
    "Active": true,
    "VATCode": "",
    "BalanceBroughtForward": 0,
    "BalanceCarriedForward": 0,
    "Year": 3,
    "SRU": 0,
    "CostCenter": "",
    "CostCenterSettings": "NOTALLOWED",
    "Project": "",
    "ProjectSettings": "NOTALLOWED",
    "TransactionInformation": "",
    "TransactionInformationSettings": "NOTALLOWED",
    "QuantitySettings": "NOTALLOWED",
    "QuantityUnit": "",
    "OpeningQuantities": []
  }
}
```

## Lista konton [#lista-konton]

<Tabs groupId="lang" persist items={['curl','TypeScript']}>
<Tab value="curl">
```bash
curl "https://app.klirr.ai/api/v1/3/accounts?financialyear=3&limit=100" \
  -H "Authorization: Bearer <access_token>"
```
</Tab>
<Tab value="TypeScript">
```ts
const res = await fetch(
  'https://app.klirr.ai/api/v1/3/accounts?financialyear=3&limit=100',
  { headers: { Authorization: 'Bearer <access_token>' } },
);
const { Accounts, MetaInformation } = await res.json();
```
</Tab>
</Tabs>

```json
{
  "Accounts": [
    {
      "@url": "https://app.klirr.ai/api/v1/3/accounts/1930",
      "Number": 1930,
      "Description": "Företagskonto",
      "Active": true,
      "VATCode": "",
      "BalanceBroughtForward": 125000.5,
      "Year": 3,
      "SRU": 0,
      "CostCenter": "",
      "CostCenterSettings": "NOTALLOWED",
      "Project": "",
      "ProjectSettings": "NOTALLOWED"
    }
  ],
  "MetaInformation": { "@TotalResources": 1, "@TotalPages": 1, "@CurrentPage": 1 }
}
```

## Uppdatera ett konto [#uppdatera-ett-konto]

`PUT` ändrar bara de fält du skickar. Omodellerade fält slås ihop med de redan sparade i stället för att ersätta dem. Se [Fortnox-kompatibilitet](/api/fortnox-kompatibilitet).

<Tabs groupId="lang" persist items={['curl','TypeScript']}>
<Tab value="curl">
```bash
curl -X PUT https://app.klirr.ai/api/v1/3/accounts/6991 \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"Account":{"Description":"Ej avdragsgilla kostnader"}}'
```
</Tab>
<Tab value="TypeScript">
```ts
await fetch('https://app.klirr.ai/api/v1/3/accounts/6991', {
  method: 'PUT',
  headers: {
    Authorization: 'Bearer <access_token>',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ Account: { Description: 'Ej avdragsgilla kostnader' } }),
});
```
</Tab>
</Tabs>

## Inaktivera ett konto [#inaktivera-ett-konto]

`DELETE` raderar inte kontot. Det inaktiveras (`Active: false`), eftersom bokförda rader refererar till det. Svaret är `204`, och kontot finns kvar på sin URL. Systemkonton i BAS-kontoplanen (t.ex. `1930`) kan varken inaktiveras eller få ändrad momskod, varken via `PUT` eller `DELETE`. Det ger `409`.

## Fel [#fel]

| Status | `Code` | När |
|---|---|---|
| 400 | 9000400 | `Number` eller `Description` saknas, numret är inte fyra siffror, `BalanceBroughtForward` skickas, `API_BLANK` på `Number`/`Description`/`Active`, ogiltigt `VATCode` eller `Active`, ostödd sökparameter, eller ogiltigt `financialyear`. |
| 404 | 9000404 | `Kan inte hitta kontot`, okänt räkenskapsår, eller organisationen saknar räkenskapsår. |
| 409 | 9000409 | Kontonumret finns redan, eller försök att inaktivera ett systemkonto eller ändra dess momskod. |

Allmänna fel (401, 403, 429) beskrivs under [Felkoder](/api/felkoder).
