# Leverantörer (/api/referens/suppliers)

> Leverantörsregistret – lista, skapa, hämta, uppdatera och inaktivera leverantörer via /3/suppliers.

Leverantörsresursen speglar Fortnox `/3/suppliers`. Leverantören adresseras på sitt leverantörsnummer (`SupplierNumber`), och numret kan inte ändras när det väl är satt.

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

## Endpoints [#endpoints]

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

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

## Listparametrar [#listparametrar]

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

| Parameter | Värden | Beskrivning |
|---|---|---|
| `sortby` | `suppliernumber`, `name` | Standard är `suppliernumber`. |
| `suppliernumber` | text | Exakt leverantörsnummer. |
| `name` | text | Sökning i namnet. |
| `organisationnumber` | text | Sökning i organisationsnumret. |
| `email` | text | Sökning i e-postadressen. |
| `phone` | text | Sökning i telefonnumret. |
| `zipcode` | text | Sökning i postnumret. |
| `city` | text | Sökning i orten. |

Det finns **inget** `filter`: listan innehåller både aktiva och inaktiva leverantörer, med `Active` satt. Skickar du `filter` eller `lastmodified`, eller fler än en av fritextsökningarna (`name`, `organisationnumber`, `email`, `phone`, `zipcode`, `city`), svarar API:t `400` i stället för att tyst returnera ett ofiltrerat svar.

## Fält [#fält]

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

| Fält | Typ | Skrivskyddat | Beskrivning |
|---|---|---|---|
| `@url` | string | ja | Resursens URL i Klirr. |
| `SupplierNumber` | string | efter skapande | Leverantörsnummer. Utelämnas det vid `POST` tilldelas nästa lediga nummer. Kan inte ändras. |
| `Name` | string | nej | **Obligatoriskt vid `POST`.** |
| `OrganisationNumber` | string | nej | Organisationsnummer. `POST` med ett nummer som redan finns hos en annan leverantör avvisas med `409`. |
| `VATNumber` | string | nej | Momsregistreringsnummer. |
| `Email` | string | nej | E-post. |
| `Phone1` | string | nej | Telefon. |
| `Address1` | string | nej | Adress. |
| `ZipCode` | string | nej | Postnummer. |
| `City` | string | nej | Ort. |
| `Country` | string | nej | Landsnamn. Standard `Sverige`. Bärs vidare oförändrat. |
| `CountryCode` | string | nej | Landskod. Standard `SE`. Bärs vidare. |
| `Currency` | string | nej | Standard `SEK`. Bärs vidare. |
| `BG` | string | nej | Bankgironummer. |
| `PG` | string | nej | Plusgironummer. |
| `Active` | boolean | nej | `false` för inaktiverad leverantör. |
| `Comments` | string | nej | Anteckning. |
| `VATType` | `25` \| `12` \| `6` \| `0` \| `REVERSE` \| `NORMAL` \| `UIF` | nej | Standard `25`. Bärs vidare; momsbehandlingen i Klirr sätts per rad på leverantörsfakturan. Okända värden returneras som `25`. |
| `TermsOfPayment` | string | nej | Betalningsvillkor i dagar, t.ex. `"30"`. Ett värde som inte går att tolka som antal dagar ignoreras. |
| `PreDefinedAccount` | string | nej | Förvalt kostnadskonto (BAS-konto). |

Fält som Klirr inte modellerar (till exempel `IBAN`, `BIC`, `BankAccountNumber`, `ClearingNumber`, `Phone2`, `OurReference`) sparas och returneras oförändrade. Vid `PUT` slås de ihop med de redan sparade, så en smal uppdatering raderar inte `IBAN`.

### Listform [#listform]

`GET /3/suppliers` returnerar en reducerad rad med exakt dessa fält: `@url`, `Active`, `Address1`, `Address2`, `BankAccountNumber`, `BG`, `BIC`, `City`, `CostCenter`, `CountryCode`, `Currency`, `DisablePaymentFile`, `Email`, `IBAN`, `Name`, `OrganisationNumber`, `PG`, `Phone`, `PreDefinedAccount`, `Project`, `SupplierNumber`, `TermsOfPayment`, `ZipCode`. Telefon heter `Phone` i listan men `Phone1` i den fullständiga formen, och listan har landskoden (`CountryCode`) men inte landsnamnet.

## Skapa en leverantör [#skapa-en-leverantör]

<Tabs groupId="lang" persist items={['curl','TypeScript']}>
<Tab value="curl">
```bash
curl -X POST https://app.klirr.ai/api/v1/3/suppliers \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"Supplier":{"Name":"Lindqvist Grossist AB","OrganisationNumber":"556000-0001","BG":"000-0000","TermsOfPayment":"30"}}'
```
</Tab>
<Tab value="TypeScript">
```ts
const res = await fetch('https://app.klirr.ai/api/v1/3/suppliers', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer <access_token>',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    Supplier: {
      Name: 'Lindqvist Grossist AB',
      OrganisationNumber: '556000-0001',
      BG: '000-0000',
      TermsOfPayment: '30',
    },
  }),
});
const { Supplier } = await res.json(); // 201 Created
```
</Tab>
</Tabs>

Svar (`201`):

```json
{
  "Supplier": {
    "@url": "https://app.klirr.ai/api/v1/3/suppliers/1",
    "SupplierNumber": "1",
    "Name": "Lindqvist Grossist AB",
    "OrganisationNumber": "556000-0001",
    "VATNumber": "",
    "Email": "",
    "Phone1": "",
    "Address1": "",
    "ZipCode": "",
    "City": "",
    "Country": "Sverige",
    "CountryCode": "SE",
    "Currency": "SEK",
    "BG": "000-0000",
    "PG": "",
    "Active": true,
    "Comments": "",
    "VATType": "25",
    "TermsOfPayment": "30",
    "PreDefinedAccount": ""
  }
}
```

## Lista leverantörer [#lista-leverantörer]

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

```json
{
  "Suppliers": [
    {
      "@url": "https://app.klirr.ai/api/v1/3/suppliers/1",
      "Active": true,
      "Address1": "",
      "Address2": "",
      "BankAccountNumber": "",
      "BG": "000-0000",
      "BIC": "",
      "City": "",
      "CostCenter": "",
      "CountryCode": "SE",
      "Currency": "SEK",
      "DisablePaymentFile": false,
      "Email": "",
      "IBAN": "",
      "Name": "Lindqvist Grossist AB",
      "OrganisationNumber": "556000-0001",
      "PG": "",
      "Phone": "",
      "PreDefinedAccount": "",
      "Project": "",
      "SupplierNumber": "1",
      "TermsOfPayment": "30",
      "ZipCode": ""
    }
  ],
  "MetaInformation": { "@TotalResources": 1, "@TotalPages": 1, "@CurrentPage": 1 }
}
```

## Uppdatera en leverantör [#uppdatera-en-leverantör]

`PUT` ändrar bara de fält du skickar. Använd `"API_BLANK"` för att tömma ett textfält (inte `Name` eller `Active`, som ger `400`). 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/suppliers/1 \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"Supplier":{"Email":"faktura@lindqvistgrossist.se"}}'
```
</Tab>
<Tab value="TypeScript">
```ts
await fetch('https://app.klirr.ai/api/v1/3/suppliers/1', {
  method: 'PUT',
  headers: {
    Authorization: 'Bearer <access_token>',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ Supplier: { Email: 'faktura@lindqvistgrossist.se' } }),
});
```
</Tab>
</Tabs>

## Inaktivera en leverantör [#inaktivera-en-leverantör]

`DELETE` raderar inte leverantören. Den inaktiveras (`Active: false`), eftersom artiklar och inlärd konteringshistorik refererar till den. Svaret är `204`, och leverantören finns kvar på sin URL.

## Fel [#fel]

| Status | `Code` | När |
|---|---|---|
| 400 | 9000400 | `Name` saknas, ostödd sökparameter (inkl. `filter`), fler än en sökparameter, `API_BLANK` på `Name`/`Active`, eller ogiltigt `TermsOfPayment` (t.ex. negativt). |
| 404 | 9000404 | `Kan inte hitta leverantören`. |
| 409 | 9000409 | Leverantörsnumret används redan, eller organisationsnumret används redan av en annan leverantör. |

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