# Ändringslogg (/api/andringslogg) > Daterade ändringar i Klirrs externa API. Posterna kommer från Klirrs interna ändringslogg och gäller bara det externa API:et (`/api/v1/3/*` och OAuth). ## 2026-09-17: OSS-momssats på fakturarader [#2026-09-17-oss-momssats-på-fakturarader] Radens `VAT` på fakturor bär OSS-satsen oavrundad: heltal för svenska satser, två decimaler annars (t.ex. `25.5`). En `PUT` på en OSS-faktura läser `VAT` som kundlandets sats, och den krävs på nya rader. ## 2026-09-13: `AmountCurrency` på fakturabetalningar [#2026-09-13-amountcurrency-på-fakturabetalningar] `InvoicePayment.Amount` är kronor och `AmountCurrency` fakturans valuta, i `POST`, `PUT` och svaren. En betalning i utländsk valuta utan `AmountCurrency` får `400`. ## 2026-08-14: Personalregistret [#2026-08-14-personalregistret] `/3/employees` under scope `salary`. ## 2026-08-12: Leverantörer, leverantörsfakturor och bokföring [#2026-08-12-leverantörer-leverantörsfakturor-och-bokföring] - `/3/suppliers` (lista, `POST`, `GET`, `PUT`, `DELETE`), scope `supplier`. - `/3/supplierinvoices` (lista, `POST`, `GET`, `PUT`) med fem `PUT`-åtgärder, scope `supplierinvoice`. - `/3/accounts`, `/3/vouchers` (med `sublist`), `/3/voucherseries`, `/3/financialyears` och `/3/settings/lockedperiod`, scopes `bookkeeping` och `settings`. `POST /3/vouchers` skapar riktiga verifikationer. ## 2026-08-11: Kunder, fakturor och fakturabetalningar [#2026-08-11-kunder-fakturor-och-fakturabetalningar] - `/3/customers`, `/3/invoices` (med `bookkeep`, `externalprint`, `cancel`, `credit`, `email`, `print`, `preview`) och `/3/invoicepayments` (med `bookkeep`). - Scopes `customer` och `invoice` tillkom, vid sidan av `article`. - `ErrorInformation` rättades: `Code` bär felkoden och `Error` är flaggan `1`. - Personnummer maskeras i PDF:er från `/print` och `/preview`. # Autentisering (/api/autentisering) > OAuth 2.0 authorization code med PKCE, tokenförnyelse med rotation, livslängder och återkallning. Klirr använder OAuth 2.0 med *authorization code*. Flödet speglar Fortnox `apps.fortnox.se/oauth-v1`. Det finns inga API-nycklar. Varje token är knuten till **en** organisation, den som användaren valde vid godkännandet, så du skickar aldrig något organisations-id. | Endpoint | URL | |---|---| | Auktorisering | `GET https://app.klirr.ai/api/v1/oauth-v1/auth` | | Token | `POST https://app.klirr.ai/api/v1/oauth-v1/token` | | Metadata (RFC 8414) | `https://app.klirr.ai/.well-known/oauth-authorization-server` | ## Livslängder [#livslängder] | Vad | Livslängd | |---|---| | Auktoriseringskod | 10 minuter, engångs | | Access token | 1 timme (`expires_in: 3600`) | | Refresh token | 45 dagar, engångs (roteras) | Tokens är opaka strängar. Tolka dem inte. ## Klientregistrering [#klientregistrering] Klirr registrerar klienten åt dig (se [Snabbstart](/api/snabbstart)). Du får `client_id`, `client_secret`, de scopes klienten får begära och de redirect-URI:er som är registrerade. Krav på redirect-URI: - absolut URL, utan fragment (`#`) och utan användarnamn eller lösenord - `https`, med undantag för `http://localhost` och `http://127.0.0.1` - måste matcha den registrerade **exakt** ## 1. Skicka användaren till godkännandet [#1-skicka-användaren-till-godkännandet] ```text GET https://app.klirr.ai/api/v1/oauth-v1/auth ?response_type=code &client_id= &redirect_uri= &scope=invoice customer &state= &code_challenge= &code_challenge_method=S256 ``` | Parameter | Krav | Beskrivning | |---|---|---| | `response_type` | obligatorisk | Måste vara `code`. | | `client_id` | obligatorisk | | | `redirect_uri` | obligatorisk | Exakt den registrerade. | | `scope` | obligatorisk | Mellanslagsseparerade scopes. Minst ett, alla måste vara tillåtna för klienten. | | `state` | obligatorisk | CSRF-skydd. Returneras oförändrat. Krävs alltid för konfidentiella klienter, precis som hos Fortnox. | | `code_challenge` | rekommenderad | PKCE: base64url, 43–128 tecken. | | `code_challenge_method` | med `code_challenge` | Bara `S256`. `plain` avvisas. | PKCE är valfritt för konfidentiella klienter med `client_secret`, men skickar du en `code_challenge` måste du också skicka `code_verifier` när koden växlas. Vi rekommenderar PKCE för alla klienter. Skapa verifier och challenge: ```ts import { createHash, randomBytes } from 'node:crypto'; const codeVerifier = randomBytes(32).toString('base64url'); // 43 tecken const codeChallenge = createHash('sha256').update(codeVerifier).digest('base64url'); ``` Användaren loggar in i Klirr, väljer organisation och godkänner de scopes du begärt. Därefter skickas webbläsaren till: ```text ?code=&state= ``` Om något går fel efter att redirect-URI:n verifierats skickas användaren i stället tillbaka med `?error=...&error_description=...&state=...` (till exempel `invalid_scope`, `invalid_request` eller `unsupported_response_type`). Ett okänt `client_id` eller en oregistrerad redirect-URI skickas **aldrig** vidare till din URI, utan användaren ser en felsida i Klirr. Kontrollera alltid att `state` är det du skickade. ## 2. Växla koden mot tokens [#2-växla-koden-mot-tokens] `Content-Type` måste vara `application/x-www-form-urlencoded`. JSON avvisas. Klientautentisering sker med HTTP Basic (`client_id:client_secret`, rekommenderat) eller med `client_id` och `client_secret` i kroppen. Använd inte båda samtidigt. ```bash curl -X POST https://app.klirr.ai/api/v1/oauth-v1/token \ -u ":" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d grant_type=authorization_code \ -d code= \ --data-urlencode redirect_uri= \ -d code_verifier= ``` ```ts const res = await fetch('https://app.klirr.ai/api/v1/oauth-v1/token', { method: 'POST', headers: { Authorization: 'Basic ' + btoa(':'), 'Content-Type': 'application/x-www-form-urlencoded', }, body: new URLSearchParams({ grant_type: 'authorization_code', code: '', redirect_uri: '', code_verifier: '', }), }); ``` `redirect_uri` måste vara samma som i steg 1. Svar: ```json { "access_token": "", "refresh_token": "", "token_type": "Bearer", "expires_in": 3600, "scope": "invoice customer" } ``` ## 3. Anropa API:t [#3-anropa-apit] ```http GET /api/v1/3/invoices HTTP/1.1 Host: app.klirr.ai Authorization: Bearer ``` ## 4. Förnya med refresh token [#4-förnya-med-refresh-token] ```bash curl -X POST https://app.klirr.ai/api/v1/oauth-v1/token \ -u ":" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d grant_type=refresh_token \ -d refresh_token= ``` ```ts const res = await fetch('https://app.klirr.ai/api/v1/oauth-v1/token', { method: 'POST', headers: { Authorization: 'Basic ' + btoa(':'), 'Content-Type': 'application/x-www-form-urlencoded', }, body: new URLSearchParams({ grant_type: 'refresh_token', refresh_token: '', }), }); const { access_token, refresh_token } = await res.json(); // Spara det NYA refresh_token – det gamla är förbrukat. ``` **Refresh tokens roteras.** Varje förnyelse ger ett nytt par och förbrukar det gamla refresh token. - Skickar du samma refresh token igen inom **30 sekunder** (till exempel två processer som förnyar samtidigt) får du tillbaka **samma** par som första anropet gav. - Återanvänds det efter 30 sekunder tolkas det som en stöld: hela kopplingen återkallas (`invalid_grant`, "Refresh token har återanvänts. All åtkomst är återkallad av säkerhetsskäl.") och användaren måste godkänna på nytt. Låt bara en process åt gången förnya, och spara det nya refresh token innan du använder access token. ## Återkalla åtkomst [#återkalla-åtkomst] Det finns ingen revoke-endpoint för klienter. Användaren återkallar åtkomsten i Klirr under med **Återkalla**. Därefter avvisas både access token och refresh token direkt (`401` respektive `invalid_grant`). Samma sak gäller om Klirr stänger av klienten. ## Fel från OAuth-endpoints [#fel-från-oauth-endpoints] OAuth-endpointerna svarar enligt RFC 6749, inte i Fortnox-form: ```json { "error": "invalid_grant", "error_description": "Auktoriseringskoden har gått ut" } ``` | `error` | Status | Exempel | |---|---|---| | `invalid_request` | 400 | Fel `Content-Type`, `code` eller `code_verifier` saknas. | | `invalid_client` | 401 | Fel klientuppgifter. Svaret har `WWW-Authenticate: Basic realm="klirr"`. | | `invalid_grant` | 400 | Koden är ogiltig, använd eller utgången; `redirect_uri` matchar inte; `code_verifier` stämmer inte; refresh token ogiltigt, utgånget eller återkallat. | | `unsupported_grant_type` | 400 | Annat än `authorization_code` eller `refresh_token`. | | `invalid_request` | 429 | För många anrop mot token-endpointen. | | `server_error` | 500 | Internt fel. | # Felkoder (/api/felkoder) > ErrorInformation, HTTP-status och Klirrs felkoder. Resursendpoints (`/3/...`) svarar med Fortnox felkuvert. Meddelandet är på svenska. ```json { "ErrorInformation": { "Error": 1, "Message": "Kan inte hitta kunden", "Code": 9000404 } } ``` | Fält | Beskrivning | |---|---| | `Error` | Alltid `1`. En flagga, inte en felkod. | | `Message` | Läsbart meddelande på svenska. | | `Code` | Sjusiffrig felkod, se nedan. | Felkoderna ligger i ett eget Klirr-intervall (`9000xxx`) och krockar aldrig med Fortnox egna nummer. Mappa på `Code` eller HTTP-status. Fel-svar cachas aldrig (`Cache-Control: no-store`). ## Koder [#koder] | `Code` | HTTP | Betydelse | Vad du gör | |---|---|---|---| | `9000400` | 400 | Felaktig begäran: trasig JSON, saknat kuvert, ogiltigt fält, ostödd parameter. | Rätta begäran. Försök inte igen oförändrat. | | `9000401` | 401 | `Authorization` saknas, token ogiltigt, utgånget eller återkallat. | Förnya token. Om förnyelsen ger `invalid_grant`: låt användaren godkänna igen. | | `9000403` | 403 | Scope saknas, eller organisationen saknar AI Pro. Även andra behörighets- och kvotfel. | Ändra inte begäran. Begär rätt scope eller låt organisationen uppgradera. | | `9000404` | 404 | Resursen finns inte. Meddelandet säger vilken resurs. | | | `9000409` | 409 | Resursens **tillstånd** hindrar operationen, t.ex. en bokförd faktura som måste krediteras i stället. | Byt väg; payloaden är inte fel. | | `9000429` | 429 | [Rate limit](/api/rate-limits). Svaret har `Retry-After`. | Vänta och försök igen. | | `9000500` | 500 | Internt fel. | Försök igen med backoff. | ## Vanliga meddelanden [#vanliga-meddelanden] | Meddelande | Status | |---|---| | `Authorization-headern saknas eller är felformad` | 401 | | `Ogiltig access token` | 401 | | `Access token har gått ut` | 401 | | `Åtkomsten är återkallad` | 401 | | `Scope saknas för anropet: ` | 403 | | `Det externa API:et ingår i AI Pro och uppåt. ...` | 403 | | `Kunde inte tolka anropets JSON-kropp` | 400 | | `Fältet saknas i anropet` | 400 | | `Fältet måste vara ett objekt` | 400 | | `För många anrop` | 429 | | `Internt serverfel` | 500 | Resursspecifika fel står på varje [referenssida](/api/referens/invoices). ## OAuth-endpoints [#oauth-endpoints] `/api/v1/oauth-v1/*` svarar i stället enligt RFC 6749: `{"error": "...", "error_description": "..."}`. Se [Autentisering](/api/autentisering#fel-från-oauth-endpoints). # Fortnox-kompatibilitet (/api/fortnox-kompatibilitet) > Kuvert, partiella uppdateringar, nollvärden, arkivering vid DELETE, taltyper och skillnaderna mot Fortnox. Klirrs API är byggt för att en Fortnox v3-integration ska fungera genom att byta bas-URL från Fortnox till `https://app.klirr.ai/api/v1`. Resurssökvägar, fältnamn (PascalCase), kuvert och felform är Fortnox egna. ## Kuvertet [#kuvertet] Skrivningar lindas in i resursnamnet i singular. Svar på en enskild resurs har samma kuvert; listor har pluralnamnet plus `MetaInformation`. ```jsonc // POST /api/v1/3/customers { "Customer": { "Name": "Lindqvist Måleri AB" } } ``` ```jsonc // GET /api/v1/3/customers { "Customers": [ ... ], "MetaInformation": { "@TotalResources": 1, "@TotalPages": 1, "@CurrentPage": 1 } } ``` Saknas kuvertet, eller är innehållet inte ett objekt (en sträng eller en array), svarar API:t `400`. Åtgärds-endpoints som `PUT /3/invoices/{n}/bookkeep` tar ingen kropp. ## PUT är partiell [#put-är-partiell] `PUT` ändrar **bara de fält du skickar**. Utelämnade fält behålls. Det gör att Fortnox-klienter som utelämnar tomma fält (`omitempty`) inte råkar nolla eller återaktivera något. För att uttryckligen **tömma** ett fält skickar du strängen `"API_BLANK"` (exakt versaler). Fält som inte får vara tomma (t.ex. kundens `Name`) avvisas med `400` om du försöker. ```json { "Customer": { "Comments": "API_BLANK" } } ``` ## Okända fält bevaras [#okända-fält-bevaras] Fält Klirr inte modellerar (till exempel kundens `GLN` eller `DeliveryAddress1`) sparas och returneras oförändrade. Du kan läsa en resurs, ändra den och skriva tillbaka den utan att tappa data. ## `""` och `0` i stället för `null` [#-och-0-i-stället-för-null] Tomma värden returneras som `""` (text) eller `0` (tal), aldrig `null`, precis som hos Fortnox. Testa på tom sträng, inte på `null`. ## Tal eller sträng [#tal-eller-sträng] | Form | Tal skickas som | |---|---| | Enskild resurs (`GET /3/invoices/1`) | JSON-tal: `"Total": 1250` | | Listrad (`GET /3/invoices`) | Sträng: `"Total": "1250"` | Belopp avrundas till två decimaler. När du skriver accepteras både tal och sträng. ## DELETE arkiverar [#delete-arkiverar] Bokföringslagen tillåter inte att bokförd information ändras i efterhand, så Klirr raderar inte register som bokförda poster pekar på. | Resurs | `DELETE` gör | |---|---| | Kunder, artiklar, leverantörer | Inaktiverar. Svarar `204`; resursen finns kvar med `Active: false`. | | Fakturabetalningar | Se [Fakturabetalningar](/api/referens/invoicepayments). | | Konton | Se [Kontoplan](/api/referens/accounts). | Hämtar du en resurs direkt efter `DELETE` får du alltså `200` med `Active: false`, inte `404`. Den försvinner ur listor med `filter=active`. ## Övriga skillnader mot Fortnox [#övriga-skillnader-mot-fortnox] | | Fortnox | Klirr | |---|---|---| | Bas-URL | `https://api.fortnox.se` | `https://app.klirr.ai/api/v1` | | OAuth | `apps.fortnox.se/oauth-v1/...` | `app.klirr.ai/api/v1/oauth-v1/...` | | Token-livslängd | 1 h / 45 dagar | Samma | | PKCE | Finns inte | Valfritt, bara `S256` | | Felkoder | Fortnox egna nummer | Eget intervall `9000xxx` | | Rate limit | Fortnox egen | 25 anrop / 5 s per klient och organisation | | Ostödda sökparametrar | – | Avvisas med `400` i stället för att ignoreras | | `DELETE` på register | Raderar | Inaktiverar | | Plan | – | Kräver | | Resurser | Hela Fortnox v3 | De [tolv resurserna](/api) i referensen | # Bokföra en verifikation (/api/guider/bokfora-verifikation) > Bokför en manuell verifikation via API:t – räkenskapsår, låst period, serie, konton och rättelser. Den här guiden bokför en manuell verifikation, till exempel ett kortköp av kontorsmaterial. Alla belopp och nummer är påhittade exempel. Du behöver en access token med scope `bookkeeping`. Den täcker räkenskapsår, serier, konton och verifikationer. Låst period kräver dessutom `settings`. `POST /3/vouchers` skapar en riktig verifikation i Klirrs bokföring. Det finns ingen `PUT` och ingen `DELETE`. Ett fel rättas med en ny verifikation. ### Hitta räkenskapsåret [#hitta-räkenskapsåret] `?financialyear=` är räkenskapsårets `Id`, inte ett årtal. Hämta id:t från `/3/financialyears`. Utelämnar du parametern gäller året som innehåller dagens datum. ```bash curl https://app.klirr.ai/api/v1/3/financialyears \ -H "Authorization: Bearer " ``` ```ts const BASE = 'https://app.klirr.ai/api/v1'; const headers = { Authorization: 'Bearer ', 'Content-Type': 'application/json', }; const fy = await fetch(`${BASE}/3/financialyears`, { headers }); const { FinancialYears } = await fy.json(); const year = FinancialYears.find( (y: { FromDate: string; ToDate: string }) => y.FromDate <= '2026-10-14' && '2026-10-14' <= y.ToDate, ); const financialYearId: number = year.Id; // t.ex. 3 ``` ```json { "FinancialYears": [ { "@url": "https://app.klirr.ai/api/v1/3/financialyears/3", "Id": 3, "FromDate": "2026-01-01", "ToDate": "2026-12-31", "AccountChartType": "BAS 2013", "AccountingMethod": "ACCRUAL" } ], "MetaInformation": { "@TotalResources": 1, "@TotalPages": 1, "@CurrentPage": 1 } } ``` ### Kontrollera låst period [#kontrollera-låst-period] Ett bokföringsdatum i en låst period ger `409`. Läs `EndDate` från `/3/settings/lockedperiod`. Fältet **utelämnas** när ingen period är låst. ```bash curl https://app.klirr.ai/api/v1/3/settings/lockedperiod \ -H "Authorization: Bearer " ``` ```ts const lp = await fetch(`${BASE}/3/settings/lockedperiod`, { headers }); const { LockedPeriod } = await lp.json(); if (LockedPeriod.EndDate && '2026-10-14' <= LockedPeriod.EndDate) { throw new Error(`Perioden är låst till och med ${LockedPeriod.EndDate}`); } ``` ### Välj serie och kontrollera kontona [#välj-serie-och-kontrollera-kontona] Serien måste finnas och vara aktiv. Lista serierna med `/3/voucherseries`. Varje konto på raderna måste finnas och vara aktivt. Kontrollera med `GET /3/accounts/{Number}`. ```bash curl "https://app.klirr.ai/api/v1/3/voucherseries?financialyear=3" \ -H "Authorization: Bearer " curl https://app.klirr.ai/api/v1/3/accounts/6110 \ -H "Authorization: Bearer " ``` ```ts const vs = await fetch(`${BASE}/3/voucherseries?financialyear=${financialYearId}`, { headers }); const { VoucherSeriesCollection } = await vs.json(); for (const n of [6110, 2641, 1930]) { const acc = await fetch(`${BASE}/3/accounts/${n}`, { headers }); const { Account } = await acc.json(); if (!Account.Active) throw new Error(`Konto ${n} är inaktivt`); } ``` Listan heter `VoucherSeriesCollection`, inte `VoucherSeries`. ### Skapa verifikationen [#skapa-verifikationen] `VoucherSeries`, `TransactionDate` och `Description` är obligatoriska. Summan av `Debit` måste vara exakt lika med summan av `Credit`, och en rad kan inte ha både debet och kredit. Skickar du `financialyear` måste `TransactionDate` ligga i det året. ```bash curl -X POST "https://app.klirr.ai/api/v1/3/vouchers?financialyear=3" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"Voucher":{"VoucherSeries":"A","TransactionDate":"2026-10-14","Description":"Kontorsmaterial, Pappershuset kvitto 8812","VoucherRows":[{"Account":6110,"Debit":1240},{"Account":2641,"Debit":310},{"Account":1930,"Credit":1550}]}}' ``` ```ts const res = await fetch(`${BASE}/3/vouchers?financialyear=${financialYearId}`, { method: 'POST', headers, body: JSON.stringify({ Voucher: { VoucherSeries: 'A', TransactionDate: '2026-10-14', Description: 'Kontorsmaterial, Pappershuset kvitto 8812', VoucherRows: [ { Account: 6110, Debit: 1240 }, { Account: 2641, Debit: 310 }, { Account: 1930, Credit: 1550 }, ], }, }), }); if (res.status !== 201) { const { ErrorInformation } = await res.json(); throw new Error(ErrorInformation.Message); } const { Voucher } = await res.json(); ``` Svar (`201`, förkortat): ```json { "Voucher": { "@url": "https://app.klirr.ai/api/v1/3/vouchers/A/58", "VoucherNumber": 58, "VoucherSeries": "A", "Year": 3, "TransactionDate": "2026-10-14", "Description": "Kontorsmaterial, Pappershuset kvitto 8812", "ReferenceType": "MANUAL", "VoucherRows": [ { "Account": 6110, "Debit": 1240, "Credit": 0, "Description": "Förbrukningsmaterial", "Removed": false }, { "Account": 2641, "Debit": 310, "Credit": 0, "Description": "Debiterad ingående moms", "Removed": false }, { "Account": 1930, "Debit": 0, "Credit": 1550, "Description": "Företagskonto", "Removed": false } ] } } ``` ### Läs tillbaka verifikationen [#läs-tillbaka-verifikationen] En verifikation identifieras av serie, nummer och räkenskapsår. Ange alltid `financialyear` när du hämtar den. ```bash curl "https://app.klirr.ai/api/v1/3/vouchers/A/58?financialyear=3" \ -H "Authorization: Bearer " ``` ```ts const check = await fetch( `${BASE}/3/vouchers/${Voucher.VoucherSeries}/${Voucher.VoucherNumber}?financialyear=${financialYearId}`, { headers }, ); const { Voucher: stored } = await check.json(); ``` ## Rätta en verifikation [#rätta-en-verifikation] Bokför en ny verifikation som vänder de felaktiga raderna, och därefter en med rätt belopp. Exemplet backar verifikation A 58: ```json { "Voucher": { "VoucherSeries": "A", "TransactionDate": "2026-10-16", "Description": "Rättelse av A 58", "VoucherRows": [ { "Account": 1930, "Debit": 1550 }, { "Account": 6110, "Credit": 1240 }, { "Account": 2641, "Credit": 310 } ] } } ``` ## Vanliga fel [#vanliga-fel] | Status | Orsak | |---|---| | `400` | Obalanserad verifikation, konto som inte finns eller är inaktivt, okänd eller inaktiverad serie, eller ett datum utanför räkenskapsåret. | | `404` | Okänt räkenskapsår eller verifikation som inte finns. | | `409` | `TransactionDate` ligger i en låst period eller ett stängt räkenskapsår. | Se [Verifikationer](/api/referens/vouchers) för alla fält och [Felkoder](/api/felkoder) för felformatet. # Registrera en leverantörsfaktura (/api/guider/leverantorsfaktura) > Från leverantör till bokförd leverantörsfaktura – skapa leverantör, registrera utkast, rätta och bokför. Den här guiden registrerar en inkommande faktura från en leverantör och bokför den i leverantörsreskontran. Alla namn, nummer och belopp är påhittade exempel. Du behöver en access token med scopes `supplier` och `supplierinvoice`. En leverantörsfaktura adresseras på Klirrs löpnummer `GivenNumber`, inte på leverantörens eget fakturanummer `InvoiceNumber`. Spara `GivenNumber` från svaret på `POST`. ### Skapa leverantören [#skapa-leverantören] Leverantören måste finnas innan fakturan registreras. Enda obligatoriska fältet är `Name`. Hoppa över steget om leverantören redan finns. Sök med `GET /3/suppliers?suppliernumber=...`. ```bash curl -X POST https://app.klirr.ai/api/v1/3/suppliers \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"Supplier":{"Name":"Norrlands Trävaror AB","OrganisationNumber":"556000-0003","BG":"000-0001","TermsOfPayment":"30"}}' ``` ```ts const BASE = 'https://app.klirr.ai/api/v1'; const headers = { Authorization: 'Bearer ', 'Content-Type': 'application/json', }; const res = await fetch(`${BASE}/3/suppliers`, { method: 'POST', headers, body: JSON.stringify({ Supplier: { Name: 'Norrlands Trävaror AB', OrganisationNumber: '556000-0003', BG: '000-0001', TermsOfPayment: '30', }, }), }); const { Supplier } = await res.json(); // 201 Created const supplierNumber = Supplier.SupplierNumber; // t.ex. "7" ``` ### Registrera fakturan som utkast [#registrera-fakturan-som-utkast] `POST` skapar alltid ett **utkast**. `SupplierNumber`, `InvoiceNumber`, `InvoiceDate`, `DueDate` och minst en rad är obligatoriska. Raderna har ingen momssats. Klirr härleder den ur `VAT` mot radernas netto, och den måste landa på 25, 12 eller 6 %. ```bash curl -X POST https://app.klirr.ai/api/v1/3/supplierinvoices \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"SupplierInvoice":{"SupplierNumber":"7","InvoiceNumber":"NT-40921","InvoiceDate":"2026-10-12","DueDate":"2026-11-11","OCR":"409210","VAT":1600,"SupplierInvoiceRows":[{"Account":4010,"ItemDescription":"Konstruktionsvirke 45x95","Quantity":40,"Price":160}]}}' ``` ```ts const create = await fetch(`${BASE}/3/supplierinvoices`, { method: 'POST', headers, body: JSON.stringify({ SupplierInvoice: { SupplierNumber: supplierNumber, InvoiceNumber: 'NT-40921', InvoiceDate: '2026-10-12', DueDate: '2026-11-11', OCR: '409210', VAT: 1600, SupplierInvoiceRows: [ { Account: 4010, ItemDescription: 'Konstruktionsvirke 45x95', Quantity: 40, Price: 160 }, ], }, }), }); if (create.status !== 201) throw new Error(`Kunde inte registrera: ${create.status}`); const { SupplierInvoice } = await create.json(); const givenNumber = SupplierInvoice.GivenNumber; // t.ex. "88" ``` Svar (`201`, förkortat). Beloppen är **strängar** även i den fullständiga formen: ```json { "SupplierInvoice": { "@url": "https://app.klirr.ai/api/v1/3/supplierinvoices/88", "GivenNumber": "88", "SupplierNumber": "7", "SupplierName": "Norrlands Trävaror AB", "InvoiceNumber": "NT-40921", "InvoiceDate": "2026-10-12", "DueDate": "2026-11-11", "Total": "8000", "VAT": "1600", "VATType": "NORMAL", "Booked": false, "Cancelled": false, "Vouchers": [] } } ``` Samma fakturanummer hos samma leverantör i samma räkenskapsår ger `409`. Det skyddar mot dubbelregistrering. ### Rätta utkastet (valfritt) [#rätta-utkastet-valfritt] `PUT` ändrar bara de fält du skickar och fungerar bara på utkast. Skickar du `SupplierInvoiceRows` ersätts raderna. ```bash curl -X PUT https://app.klirr.ai/api/v1/3/supplierinvoices/88 \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"SupplierInvoice":{"DueDate":"2026-11-15","Comments":"Leverans till Sundsvall"}}' ``` ```ts await fetch(`${BASE}/3/supplierinvoices/${givenNumber}`, { method: 'PUT', headers, body: JSON.stringify({ SupplierInvoice: { DueDate: '2026-11-15', Comments: 'Leverans till Sundsvall' }, }), }); ``` ### Bokför fakturan [#bokför-fakturan] `PUT /3/supplierinvoices/{GivenNumber}/bookkeep` bokför fakturan med en verifikation i serie `L`: debet kostnadskonto per rad, ingående moms på 2640 och kredit 2440 leverantörsskuld. Anropet tar ingen kropp och är idempotent. ```bash curl -X PUT https://app.klirr.ai/api/v1/3/supplierinvoices/88/bookkeep \ -H "Authorization: Bearer " ``` ```ts const booked = await fetch(`${BASE}/3/supplierinvoices/${givenNumber}/bookkeep`, { method: 'PUT', headers, }); const { SupplierInvoice: after } = await booked.json(); console.log(after.Booked, after.Balance, after.Vouchers); // true "8000" [{ Number: 23, Year: 3, Series: "L", ReferenceType: "SUPPLIERINVOICE" }] ``` Ett stängt räkenskapsår eller en låst period ger `409`. ## Om något blev fel [#om-något-blev-fel] `PUT /3/supplierinvoices/{GivenNumber}/cancel` makulerar fakturan: | Läge | Resultat | |---|---| | Utkast | Utkastet raderas. | | Bokförd | Bokföringen återförs med ett rättelseverifikat i serie `M`. | | Betald | `409`. Betalningen måste ångras först. | `/credit`, `/approvalbookkeep` och `/approvalpayment` stöds inte och svarar alltid `400`. Det externa API:t har ingen betalningsresurs för leverantörsfakturor, så betalningen registreras i Klirr. Se [Leverantörsfakturor](/api/referens/supplierinvoices) och [Leverantörer](/api/referens/suppliers) för alla fält. # 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. 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. ### 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. ```bash curl "https://app.klirr.ai/api/v1/3/invoices?filter=unpaid&ocr=5700003" \ -H "Authorization: Bearer " ``` ```ts const BASE = 'https://app.klirr.ai/api/v1'; const headers = { Authorization: 'Bearer ', '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 ``` ```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). ### 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. ```bash curl -X POST https://app.klirr.ai/api/v1/3/invoicepayments \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"InvoicePayment":{"InvoiceNumber":57,"Amount":10000,"PaymentDate":"2026-10-28","ModeOfPayment":"BG"}}' ``` ```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(); ``` 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 } } ``` ### Kontrollera saldot [#kontrollera-saldot] Efter en delbetalning står fakturan kvar som obetald och `Balance` visar återstoden. ```bash curl https://app.klirr.ai/api/v1/3/invoices/57 \ -H "Authorization: Bearer " ``` ```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) ``` ### Registrera resten [#registrera-resten] Utelämna `Amount` så regleras hela det öppna beloppet. Fakturan blir då betald. ```bash curl -X POST https://app.klirr.ai/api/v1/3/invoicepayments \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"InvoicePayment":{"InvoiceNumber":57,"PaymentDate":"2026-11-12"}}' ``` ```ts await fetch(`${BASE}/3/invoicepayments`, { method: 'POST', headers, body: JSON.stringify({ InvoicePayment: { InvoiceNumber: 57, PaymentDate: '2026-11-12' } }), }); ``` 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`. ### Å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`. ```bash curl -X DELETE https://app.klirr.ai/api/v1/3/invoicepayments/12 \ -H "Authorization: Bearer " ``` ```ts const del = await fetch(`${BASE}/3/invoicepayments/12`, { method: 'DELETE', headers }); // del.status === 204 ``` Betalningen försvinner sedan ur `GET /3/invoicepayments`, och `GET` på numret ger `404`. ## 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. # Skapa och skicka en faktura (/api/guider/skapa-och-skicka-faktura) > Från ny kund till bokförd och mailad kundfaktura – kund, utkast, förhandsgranskning och utskick via API:t. Den här guiden skapar en kund, lägger upp ett fakturautkast, förhandsgranskar det och mailar fakturan. Alla namn, nummer och belopp nedan är påhittade exempel. Du behöver en access token med scopes `customer` och `invoice`. Se [Snabbstart](/api/snabbstart) och [Scopes](/api/scopes). I Klirr skapar `POST /3/invoices` alltid ett obokfört utkast. Fakturanummer, OCR och verifikat skapas först när fakturan utfärdas, med `/bookkeep`, `/externalprint`, `/email` eller `/print`. Därefter kan fakturan inte ändras – bara krediteras. ### Skapa kunden [#skapa-kunden] Hoppa över steget om kunden redan finns – sök i så fall med `GET /3/customers`. Enda obligatoriska fältet är `Name`. Ange `Email` om fakturan ska mailas. Utan e-postadress svarar `/email` med `400`. ```bash curl -X POST https://app.klirr.ai/api/v1/3/customers \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"Customer":{"Name":"Lundgrens Måleri AB","OrganisationNumber":"556000-0002","Email":"ekonomi@lundgrensmaleri.se","Address1":"Verkstadsgatan 4","ZipCode":"702 10","City":"Örebro"}}' ``` ```ts const BASE = 'https://app.klirr.ai/api/v1'; const headers = { Authorization: 'Bearer ', 'Content-Type': 'application/json', }; const res = await fetch(`${BASE}/3/customers`, { method: 'POST', headers, body: JSON.stringify({ Customer: { Name: 'Lundgrens Måleri AB', OrganisationNumber: '556000-0002', Email: 'ekonomi@lundgrensmaleri.se', Address1: 'Verkstadsgatan 4', ZipCode: '702 10', City: 'Örebro', }, }), }); const { Customer } = await res.json(); // 201 Created const customerNumber = Customer.CustomerNumber; // t.ex. "1002" ``` Svaret är `201` med `{"Customer": {...}}`. Spara `CustomerNumber`, det är en **sträng**. ### Skapa fakturautkastet [#skapa-fakturautkastet] `CustomerNumber` är obligatoriskt och kunden måste finnas (annars `404`). Varje rad behöver `Description`, `DeliveredQuantity` (sträng), `Price` exklusive moms och `VAT` i procent. `TermsOfPayment` är antal dagar; utan det blir förfallodatum 30 dagar efter fakturadatum. ```bash curl -X POST https://app.klirr.ai/api/v1/3/invoices \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"Invoice":{"CustomerNumber":"1002","InvoiceDate":"2026-10-18","TermsOfPayment":"30","Comments":"Avser målning av trapphus, oktober","InvoiceRows":[{"Description":"Målning trapphus","DeliveredQuantity":"24","Price":650,"VAT":25},{"Description":"Material","DeliveredQuantity":"1","Price":3200,"VAT":25}]}}' ``` ```ts const res = await fetch(`${BASE}/3/invoices`, { method: 'POST', headers, body: JSON.stringify({ Invoice: { CustomerNumber: customerNumber, InvoiceDate: '2026-10-18', TermsOfPayment: '30', Comments: 'Avser målning av trapphus, oktober', InvoiceRows: [ { Description: 'Målning trapphus', DeliveredQuantity: '24', Price: 650, VAT: 25 }, { Description: 'Material', DeliveredQuantity: '1', Price: 3200, VAT: 25 }, ], }, }), }); if (res.status !== 201) throw new Error(`Kunde inte skapa faktura: ${res.status}`); const { Invoice } = await res.json(); const documentNumber = Invoice.DocumentNumber; // t.ex. "57" ``` Svaret (`201`, förkortat) visar ett utkast: `Booked: false`, tomt `OCR` och `VoucherNumber: 0`. ```json { "Invoice": { "@url": "https://app.klirr.ai/api/v1/3/invoices/57", "DocumentNumber": "57", "CustomerNumber": "1002", "CustomerName": "Lundgrens Måleri AB", "InvoiceDate": "2026-10-18", "DueDate": "2026-11-17", "Net": 18800, "TotalVAT": 4700, "Total": 23500, "Booked": false, "Sent": false, "Cancelled": false, "OCR": "", "VoucherNumber": 0 } } ``` Utkastet kan ändras med `PUT /3/invoices/{DocumentNumber}`. Skickar du `InvoiceRows` ersätts alla rader, så ta med `{ "RowId": n }` för rader som ska stå kvar. Se [Fakturor](/api/referens/invoices#uppdatera-ett-utkast). ### Förhandsgranska (valfritt) [#förhandsgranska-valfritt] `GET /3/invoices/{DocumentNumber}/preview` returnerar en PDF märkt `UTKAST` utan sidoeffekter. Fakturan utfärdas inte. ```bash curl https://app.klirr.ai/api/v1/3/invoices/57/preview \ -H "Authorization: Bearer " \ -o forhandsgranskning-57.pdf ``` ```ts const preview = await fetch(`${BASE}/3/invoices/${documentNumber}/preview`, { headers }); const pdf = await preview.arrayBuffer(); // application/pdf ``` Använd **inte** `/print` för förhandsgranskning: den utfärdar och bokför utkastet. ### Utfärda och maila [#utfärda-och-maila] `GET /3/invoices/{DocumentNumber}/email` utfärdar utkastet (nummer, OCR och verifikat) och mailar det till kundens e-postadress i samma anrop. Det är en `GET` med sidoeffekt, precis som hos Fortnox. Anropet tar ingen kropp. ```bash curl https://app.klirr.ai/api/v1/3/invoices/57/email \ -H "Authorization: Bearer " ``` ```ts const sent = await fetch(`${BASE}/3/invoices/${documentNumber}/email`, { headers }); if (sent.status === 400) throw new Error('Kunden saknar e-postadress'); const { Invoice: issued } = await sent.json(); console.log(issued.Booked, issued.OCR); // true, "5700003" ``` Svaret är `200` med `{"Invoice": {...}}`, läst om efter utskicket: `Booked: true`, `Sent: true` och ifyllda `OCR`, `VoucherNumber`, `VoucherSeries` och `VoucherYear`. Levererar du fakturan själv i stället? Anropa `PUT /3/invoices/{DocumentNumber}/bookkeep` (eller `/externalprint`, som gör samma sak) och hämta PDF:en med `/print`. Ingenting mailas då. ### Hantera omförsök [#hantera-omförsök] - `/email` på en redan bokförd faktura skickar bara mejlet igen. Inget nytt nummer och inget nytt verifikat skapas. - Misslyckas utskicket av en bokförd faktura blir svaret `502`. Fakturan är oförändrad och anropet kan göras om. - `/bookkeep` är idempotent och svarar `200` med resursen även om fakturan redan är bokförd. ## Om något blev fel [#om-något-blev-fel] | Läge | Gör så här | |---|---| | Utkast som inte ska skickas | `PUT /3/invoices/{DocumentNumber}/cancel` raderar utkastet. | | Bokförd faktura med fel | `PUT /3/invoices/{DocumentNumber}/credit` krediterar hela fakturan. Skapa sedan en ny. `PUT` och `/cancel` på en bokförd faktura ger `409`. | ## Nästa steg [#nästa-steg] - [Registrera en betalning](/api/guider/registrera-betalning) när kunden har betalat. - [Fakturor](/api/referens/invoices) – alla fält, filter och åtgärder. - [Felkoder](/api/felkoder). # Översikt (/api) > Klirrs externa API är kompatibelt med Fortnox API v3. Byt bas-URL, behåll resurssökvägarna. Klirrs externa API låter ett annat system läsa och skriva en organisations kunder, artiklar, fakturor, betalningar, leverantörer, leverantörsfakturor, personalregister och bokföring. API:t är **kompatibelt med Fortnox API v3**. Resurssökvägarna, kuverten, fältnamnen och felformen är Fortnox egna, med `/api/v1` som prefix. En befintlig Fortnox-integration byter i första hand bas-URL. | | | |---|---| | Bas-URL | `https://app.klirr.ai/api/v1` | | Resurser | `/3/...`, till exempel `https://app.klirr.ai/api/v1/3/invoices` | | Format | JSON. Skrivningar kuverteras i resursnamnet: `{"Invoice": {...}}` | | Autentisering | OAuth 2.0 authorization code. Inga API-nycklar. | | Plan | | | Rate limit | 25 anrop per 5 sekunder per integration och organisation | ## Hur ett anrop behandlas [#hur-ett-anrop-behandlas] **Token och scope.** `Authorization: Bearer ` verifieras, och tokenets scopes måste innehålla resursens scope. Anropet räknas mot rate limit. **Plan.** Organisationen måste ha AI Pro eller högre. Annars `403` med kod `9000403`. **Kuvert.** `POST` och `PUT` måste ha kroppen inlindad i resursnamnet, och innehållet måste vara ett objekt. Annars `400`. **Resursen.** Skrivningen går genom samma tjänstelager som Klirrs eget gränssnitt. ## Resurser [#resurser] | Resurs | Scope | |---|---| | [Kontoplan](/api/referens/accounts) | `bookkeeping` | | [Artiklar](/api/referens/articles) | `article` | | [Kunder](/api/referens/customers) | `customer` | | [Anställda](/api/referens/employees) | `salary` | | [Räkenskapsår](/api/referens/financialyears) | `bookkeeping` | | [Fakturor](/api/referens/invoices) | `invoice` | | [Fakturabetalningar](/api/referens/invoicepayments) | `invoice` | | [Låst period](/api/referens/settings-lockedperiod) | `settings` | | [Leverantörsfakturor](/api/referens/supplierinvoices) | `supplierinvoice` | | [Leverantörer](/api/referens/suppliers) | `supplier` | | [Verifikationer](/api/referens/vouchers) | `bookkeeping` | | [Verifikationsserier](/api/referens/voucherseries) | `bookkeeping` | ## Kom igång [#kom-igång] - [Snabbstart](/api/snabbstart): från registrerad klient till första anropet. - [Autentisering](/api/autentisering): hela OAuth-flödet. - [Fortnox-kompatibilitet](/api/fortnox-kompatibilitet): vad som skiljer sig från Fortnox. Det finns ingen OpenAPI-specifikation och ingen sandlåda. Referensen här är skriven för att läsas av både människor och AI-verktyg. # Paginering (/api/paginering) > page, limit och offset, samt MetaInformation i listsvar. Alla listendpoints pagineras som hos Fortnox. | Parameter | Standard | Beskrivning | |---|---|---| | `page` | `1` | Sidnummer, från 1. | | `limit` | `100` | Poster per sida. Max `500`; större värden kapas till 500. | | `offset` | – | Antal poster att hoppa över. **Vinner över `page`** om båda skickas. | Ogiltiga värden (t.ex. `page=0` eller `limit=abc`) ersätts tyst med standardvärdet. ## MetaInformation [#metainformation] Varje listsvar har ett `MetaInformation`-block. `@`-prefixen är Fortnox egna. ```json { "Invoices": [ ... ], "MetaInformation": { "@TotalResources": 230, "@TotalPages": 3, "@CurrentPage": 2 } } ``` - `@TotalPages` är alltid minst `1`, även när listan är tom. - Med `offset` räknas `@CurrentPage` ut som `floor(offset / limit) + 1`. ## Sortering [#sortering] Många listor tar `sortby` (en vitlista per resurs, se respektive [referenssida](/api/referens/customers)) och `sortorder`. `sortorder` accepterar `asc`, `desc`, `ascending` och `descending`; okänt värde blir `asc`. Ett okänt `sortby` ger resursens standardordning. ## Hämta alla sidor [#hämta-alla-sidor] ```bash curl "https://app.klirr.ai/api/v1/3/customers?page=2&limit=500" \ -H "Authorization: Bearer " ``` ```ts async function allCustomers(token: string) { const out = []; for (let page = 1; ; page++) { const res = await fetch( `https://app.klirr.ai/api/v1/3/customers?page=${page}&limit=500`, { headers: { Authorization: `Bearer ${token}` } }, ); const body = await res.json(); out.push(...body.Customers); if (page >= body.MetaInformation['@TotalPages']) return out; } } ``` Tänk på [rate limit](/api/rate-limits) vid stora synkar. # Rate limits (/api/rate-limits) > 25 anrop per 5 sekunder per integration och organisation. ## Resursanrop [#resursanrop] | Gräns | Fönster | Räknas per | |---|---|---| | 25 anrop | 5 sekunder (glidande) | klient och organisation | Gränsen räknas först efter att token verifierats, så obehöriga anrop kan inte förbruka din kvot. Över gränsen svarar API:t: ```http HTTP/1.1 429 Too Many Requests Retry-After: 5 { "ErrorInformation": { "Error": 1, "Message": "För många anrop", "Code": 9000429 } } ``` Om Klirr tillfälligt inte kan kontrollera gränsen avvisas anropet också med `429` (fail closed). ## OAuth-endpoints [#oauth-endpoints] | Endpoint | Gräns | Svar över gränsen | |---|---|---| | `POST /api/v1/oauth-v1/token` | 10 per 60 s | `429`, `{"error":"invalid_request",...}` | | `GET /api/v1/oauth-v1/auth` | 30 per 60 s per IP | `429` som text, `Retry-After: 60` | ## Rekommendationer [#rekommendationer] - Läs `Retry-After` och vänta minst så många sekunder. - Använd `limit=500` för att minska antalet anrop vid listning. - Förnya access token när det närmar sig en timme, inte inför varje anrop. # 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` · ## Endpoints [#endpoints] | Metod och sökväg | Beskrivning | |---|---| | | Lista konton (reducerad listform) | | | Skapa ett konto. Svarar `201`. | | | Hämta ett konto (fullständig form) | | | Uppdatera ett konto (partiellt) | | | 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] ```bash curl -X POST https://app.klirr.ai/api/v1/3/accounts \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"Account":{"Number":6991,"Description":"Övriga externa kostnader, ej avdragsgilla"}}' ``` ```ts const res = await fetch('https://app.klirr.ai/api/v1/3/accounts', { method: 'POST', headers: { Authorization: 'Bearer ', 'Content-Type': 'application/json', }, body: JSON.stringify({ Account: { Number: 6991, Description: 'Övriga externa kostnader, ej avdragsgilla' }, }), }); const { Account } = await res.json(); // 201 Created ``` 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] ```bash curl "https://app.klirr.ai/api/v1/3/accounts?financialyear=3&limit=100" \ -H "Authorization: Bearer " ``` ```ts const res = await fetch( 'https://app.klirr.ai/api/v1/3/accounts?financialyear=3&limit=100', { headers: { Authorization: 'Bearer ' } }, ); const { Accounts, MetaInformation } = await res.json(); ``` ```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). ```bash curl -X PUT https://app.klirr.ai/api/v1/3/accounts/6991 \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"Account":{"Description":"Ej avdragsgilla kostnader"}}' ``` ```ts await fetch('https://app.klirr.ai/api/v1/3/accounts/6991', { method: 'PUT', headers: { Authorization: 'Bearer ', 'Content-Type': 'application/json', }, body: JSON.stringify({ Account: { Description: 'Ej avdragsgilla kostnader' } }), }); ``` ## 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). # Artiklar (/api/referens/articles) > Artikelregistret – lista, skapa, hämta, uppdatera och arkivera artiklar via /3/articles. Artikelresursen speglar Fortnox `/3/articles`. Artikeln adresseras på sitt artikelnummer (`ArticleNumber`), och numret kan inte ändras när det väl är satt. **Scope:** `article` · ## Endpoints [#endpoints] | Metod och sökväg | Beskrivning | |---|---| | | Lista artiklar (reducerad listform) | | | Skapa en artikel. Svarar `201`. | | | Hämta en artikel (fullständig form) | | | Uppdatera en artikel (partiellt) | | | Arkivera en artikel. Svarar `204`. | Bas-URL: `https://app.klirr.ai/api/v1`. Skrivningar kuverteras i `Article`. ## Listparametrar [#listparametrar] Utöver [paginering](/api/paginering) (`page`, `limit`, `offset`): | Parameter | Värden | Beskrivning | |---|---|---| | `filter` | `active`, `inactive` | `active` utesluter arkiverade, `inactive` visar bara arkiverade. Utan filter (eller med okänt värde) returneras alla. | Listrutten läser inga andra parametrar – `sortby`, `sortorder` och sökparametrar stöds inte på artiklar. ## Fält [#fält] Fullständig form (`GET /3/articles/{ArticleNumber}`, och svaret på `POST`/`PUT`). | Fält | Typ | Skrivskyddat | Beskrivning | |---|---|---|---| | `@url` | string | ja | Resursens URL. | | `ArticleNumber` | string | efter skapande | Utelämnas det vid `POST` tilldelas ett nummer. Max 50 tecken: `A–Z`, siffror och `. _ - /`. | | `Description` | string | nej | Benämning, max 1000 tecken. Kan inte vara tom eller nollas. | | `Type` | `STOCK` \| `SERVICE` | nej | Standard `SERVICE`. Okänt värde tolkas som `SERVICE`. | | `Active` | boolean | nej | `false` för arkiverad artikel. | | `Expired` | boolean | nej | Alltid `!Active`. Kan skrivas som alias; vid konflikt vinner `Active`. | | `SalesPrice` | number | nej | Försäljningspris exklusive moms. | | `PurchasePrice` | number | nej | Inköpspris. | | `VAT` | number | nej | Momssats: `25`, `12`, `6` eller `0`. Annan sats sätts till `25`. | | `Unit` | string | nej | Enhet, returneras som den skickades. | | `SalesAccount` | number | nej | Försäljningskonto. `0` när inget satts. | | `EUAccount`, `EUVATAccount`, `ExportAccount`, `ConstructionAccount` | number | nej | Konton per momsbehandling. | | `PurchaseAccount` | number | nej | Inköpskonto. | | `EAN` | string | nej | Streckkod. | | `Manufacturer` | string | nej | Tillverkare. | | `ManufacturerArticleNumber` | string | nej | Tillverkarens artikelnummer. | | `Note` | string | nej | Anteckning. | | `SupplierNumber` | string | nej | Leverantörsnummer. Kopplas till en befintlig leverantör om den finns; annars sparas värdet som text. | | `SupplierName` | string | nej | Leverantörsnamn, används för koppling om numret saknas. | | `Housework` | boolean | nej | Omfattas av husavdrag. | | `HouseworkType` | string | nej | Typ av husarbete. Okänt värde ignoreras. Sätts en typ blir `Housework` `true`. | | `StockGoods` | boolean | ja | `true` när `Type` är `STOCK`. | | `QuantityInStock`, `DisposableQuantity`, `ReservedQuantity`, `StockValue` | number | nej | Klirr har ingen lagerhantering. Värden du skickar bärs vidare oförändrade, annars `0`. | | `WebshopArticle` | boolean | nej | Webbshopsartikel. | Använd `"API_BLANK"` för att tömma `EAN`, `Manufacturer`, `ManufacturerArticleNumber`, `Note`, `Unit` och kontofälten. `API_BLANK` på `ArticleNumber`, `Description`, `Active` eller `Expired` ger `400`. Fält som Klirr inte modellerar sparas och returneras oförändrade. ### Listform [#listform] `GET /3/articles` returnerar en reducerad rad: `@url`, `ArticleNumber`, `Description`, `EAN`, `Housework`, `SalesPrice`, `PurchasePrice`, `Unit`, `VAT`, `WebshopArticle`, `QuantityInStock`, `DisposableQuantity`, `ReservedQuantity`, `StockValue`. Talen är **strängar** i listformen. ## Skapa en artikel [#skapa-en-artikel] ```bash curl -X POST https://app.klirr.ai/api/v1/3/articles \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"Article":{"ArticleNumber":"KONS-01","Description":"Konsulttimme","Type":"SERVICE","SalesPrice":950,"VAT":25,"Unit":"h"}}' ``` ```ts const res = await fetch('https://app.klirr.ai/api/v1/3/articles', { method: 'POST', headers: { Authorization: 'Bearer ', 'Content-Type': 'application/json', }, body: JSON.stringify({ Article: { ArticleNumber: 'KONS-01', Description: 'Konsulttimme', Type: 'SERVICE', SalesPrice: 950, VAT: 25, Unit: 'h', }, }), }); const { Article } = await res.json(); // 201 Created ``` Svar (`201`): ```json { "Article": { "@url": "https://app.klirr.ai/api/v1/3/articles/KONS-01", "ArticleNumber": "KONS-01", "Description": "Konsulttimme", "Type": "SERVICE", "Active": true, "Expired": false, "SalesPrice": 950, "PurchasePrice": 0, "VAT": 25, "Unit": "h", "SalesAccount": 0, "EUAccount": 0, "EUVATAccount": 0, "ExportAccount": 0, "ConstructionAccount": 0, "PurchaseAccount": 0, "EAN": "", "Manufacturer": "", "ManufacturerArticleNumber": "", "Note": "", "SupplierNumber": "", "SupplierName": "", "Housework": false, "HouseworkType": "", "StockGoods": false, "QuantityInStock": 0, "DisposableQuantity": 0, "ReservedQuantity": 0, "StockValue": 0, "WebshopArticle": false } } ``` ## Lista artiklar [#lista-artiklar] ```bash curl "https://app.klirr.ai/api/v1/3/articles?filter=active&limit=100" \ -H "Authorization: Bearer " ``` ```ts const res = await fetch( 'https://app.klirr.ai/api/v1/3/articles?filter=active&limit=100', { headers: { Authorization: 'Bearer ' } }, ); const { Articles, MetaInformation } = await res.json(); ``` ```json { "Articles": [ { "@url": "https://app.klirr.ai/api/v1/3/articles/KONS-01", "ArticleNumber": "KONS-01", "Description": "Konsulttimme", "EAN": "", "Housework": false, "SalesPrice": "950", "PurchasePrice": "0", "Unit": "h", "VAT": "25", "WebshopArticle": false, "QuantityInStock": "0", "DisposableQuantity": "0", "ReservedQuantity": "0", "StockValue": "0" } ], "MetaInformation": { "@TotalResources": 1, "@TotalPages": 1, "@CurrentPage": 1 } } ``` ## Uppdatera en artikel [#uppdatera-en-artikel] `PUT` ändrar bara de fält du skickar. Ändrar du `VAT` utan `Type` (eller tvärtom) räknas momskoden om mot artikelns sparade typ. Se [Fortnox-kompatibilitet](/api/fortnox-kompatibilitet). ```bash curl -X PUT https://app.klirr.ai/api/v1/3/articles/KONS-01 \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"Article":{"SalesPrice":1050}}' ``` ```ts await fetch('https://app.klirr.ai/api/v1/3/articles/KONS-01', { method: 'PUT', headers: { Authorization: 'Bearer ', 'Content-Type': 'application/json', }, body: JSON.stringify({ Article: { SalesPrice: 1050 } }), }); ``` ## Arkivera en artikel [#arkivera-en-artikel] `DELETE` raderar inte artikeln. Den arkiveras, eftersom bokförda fakturarader kan referera till den. Svaret är `204`; artikeln försvinner ur `?filter=active` men finns kvar på sin URL med `Active: false`. ## Fel [#fel] | Status | `Code` | När | |---|---|---| | 400 | 9000400 | Ogiltigt artikelnummer (tomt, över 50 tecken, otillåtna tecken), tom eller för lång `Description`, ogiltigt pris, `API_BLANK` på ett fält som inte kan nollas, otolkbart `Active`/`Expired`. | | 404 | 9000404 | `Kan inte hitta artikeln`. | | 409 | 9000409 | Artikelnumret används redan. | Allmänna fel (401, 403, 429) beskrivs under [Felkoder](/api/felkoder). # Kunder (/api/referens/customers) > Kundregistret – lista, skapa, hämta, uppdatera och inaktivera kunder via /3/customers. Kundresursen speglar Fortnox `/3/customers`. Kunden adresseras på sitt kundnummer (`CustomerNumber`), inte på ett internt id, och numret kan inte ändras när det väl är satt. **Scope:** `customer` · ## Endpoints [#endpoints] | Metod och sökväg | Beskrivning | |---|---| | | Lista kunder (reducerad listform) | | | Skapa en kund. Svarar `201`. | | | Hämta en kund (fullständig form) | | | Uppdatera en kund (partiellt) | | | Inaktivera en kund. Svarar `204`. | Bas-URL: `https://app.klirr.ai/api/v1`. Skrivningar kuverteras i `Customer`. ## Listparametrar [#listparametrar] Utöver [paginering](/api/paginering) (`page`, `limit`, `offset`) och `sortorder` (`asc`/`desc`, även `ascending`/`descending`): | Parameter | Värden | Beskrivning | |---|---|---| | `filter` | `active`, `inactive` | Utan filter (eller med okänt värde) returneras alla kunder. | | `sortby` | `customernumber`, `name` | Standard är `customernumber`. | | `customernumber` | text | Exakt kundnummer. | | `name` | text | Sökning i namnet. | | `organisationnumber` | text | Sökning i organisationsnumret. | | `email` | text | Sökning i e-postadressen. | Bara **en** av `name`, `organisationnumber` och `email` kan användas per anrop. Skickar du flera, eller någon av de Fortnox-parametrar Klirr inte stöder ännu (`zipcode`, `city`, `phone`, `gln`, `glndelivery`, `lastmodified`), svarar API:t `400` i stället för att tyst returnera ett ofiltrerat svar. ## Fält [#fält] Fullständig form (`GET /3/customers/{CustomerNumber}`, och svaret på `POST`/`PUT`). | Fält | Typ | Skrivskyddat | Beskrivning | |---|---|---|---| | `@url` | string | ja | Resursens URL i Klirr. | | `CustomerNumber` | string | efter skapande | Kundnummer. Utelämnas det vid `POST` tilldelas nästa lediga nummer. Kan inte ändras. | | `Name` | string | nej | **Obligatoriskt vid `POST`.** Max 1024 tecken. | | `OrganisationNumber` | string | nej | Organisationsnummer (eller personnummer för privatkund). | | `VATNumber` | string | nej | Momsregistreringsnummer. | | `Email` | string | nej | E-post. | | `EmailInvoice` | string | nej | Delar värde med `Email` i Klirr. Skickas båda vinner `Email`. | | `Phone1` | string | nej | Telefon. | | `Address1` | string | nej | Adress. | | `ZipCode` | string | nej | Postnummer. | | `City` | string | nej | Ort. | | `Country` | string | ja | Svenskt landsnamn, härlett ur `CountryCode`. | | `CountryCode` | string | nej | Landskod, två tecken. | | `Currency` | string | nej | Standard `SEK`. Bärs vidare oförändrat. | | `Active` | boolean | nej | `false` för inaktiverad kund. | | `Comments` | string | nej | Anteckning, max 1024 tecken. | | `Type` | `COMPANY` \| `PRIVATE` | ja | Härleds: `COMPANY` om organisationsnummer finns, annars `PRIVATE`. Värdet du skickar läses inte. | | `VATType` | `SEVAT` \| `SEREVERSEDVAT` \| `EUREVERSEDVAT` \| `EUVAT` \| `EXPORT` | nej | Standard `SEVAT`. Bärs vidare; momsbehandlingen i Klirr sätts per faktura. | | `TermsOfPayment` | string | nej | Betalningsvillkorskod, t.ex. `"30"`. Bärs vidare. | | `DefaultDeliveryTypes` | object | nej | `{ Invoice, Order, Offer }`, vardera `PRINT`, `EMAIL` eller `PRINTSERVICE`. Standard `EMAIL`. | Fält som Klirr inte modellerar (till exempel `Phone2`, `DeliveryAddress1`, `GLN`, `YourReference`) sparas och returneras oförändrade. ### Listform [#listform] `GET /3/customers` returnerar en reducerad rad med exakt dessa fält: `@url`, `Address1`, `Address2`, `City`, `CustomerNumber`, `Email`, `Name`, `OrganisationNumber`, `Phone`, `ZipCode`. Observera att telefon heter `Phone` i listan men `Phone1` i den fullständiga formen. ## Skapa en kund [#skapa-en-kund] ```bash curl -X POST https://app.klirr.ai/api/v1/3/customers \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"Customer":{"Name":"Bergström Bygg AB","OrganisationNumber":"556000-0000","Email":"faktura@bergstrombygg.se","City":"Uppsala"}}' ``` ```ts const res = await fetch('https://app.klirr.ai/api/v1/3/customers', { method: 'POST', headers: { Authorization: 'Bearer ', 'Content-Type': 'application/json', }, body: JSON.stringify({ Customer: { Name: 'Bergström Bygg AB', OrganisationNumber: '556000-0000', Email: 'faktura@bergstrombygg.se', City: 'Uppsala', }, }), }); const { Customer } = await res.json(); // 201 Created ``` Svar (`201`): ```json { "Customer": { "@url": "https://app.klirr.ai/api/v1/3/customers/1001", "CustomerNumber": "1001", "Name": "Bergström Bygg AB", "OrganisationNumber": "556000-0000", "VATNumber": "", "Email": "faktura@bergstrombygg.se", "EmailInvoice": "faktura@bergstrombygg.se", "Phone1": "", "Address1": "", "ZipCode": "", "City": "Uppsala", "Country": "Sverige", "CountryCode": "SE", "Currency": "SEK", "Active": true, "Comments": "", "Type": "COMPANY", "VATType": "SEVAT", "TermsOfPayment": "", "DefaultDeliveryTypes": { "Invoice": "EMAIL", "Order": "EMAIL", "Offer": "EMAIL" } } } ``` ## Lista kunder [#lista-kunder] ```bash curl "https://app.klirr.ai/api/v1/3/customers?filter=active&sortby=name&limit=50" \ -H "Authorization: Bearer " ``` ```ts const res = await fetch( 'https://app.klirr.ai/api/v1/3/customers?filter=active&sortby=name&limit=50', { headers: { Authorization: 'Bearer ' } }, ); const { Customers, MetaInformation } = await res.json(); ``` ```json { "Customers": [ { "@url": "https://app.klirr.ai/api/v1/3/customers/1001", "Address1": "", "Address2": "", "City": "Uppsala", "CustomerNumber": "1001", "Email": "faktura@bergstrombygg.se", "Name": "Bergström Bygg AB", "OrganisationNumber": "556000-0000", "Phone": "", "ZipCode": "" } ], "MetaInformation": { "@TotalResources": 1, "@TotalPages": 1, "@CurrentPage": 1 } } ``` ## Uppdatera en kund [#uppdatera-en-kund] `PUT` ändrar bara de fält du skickar. Använd `"API_BLANK"` för att tömma ett textfält. Se [Fortnox-kompatibilitet](/api/fortnox-kompatibilitet). ```bash curl -X PUT https://app.klirr.ai/api/v1/3/customers/1001 \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"Customer":{"Phone1":"018-000 00 00"}}' ``` ```ts await fetch('https://app.klirr.ai/api/v1/3/customers/1001', { method: 'PUT', headers: { Authorization: 'Bearer ', 'Content-Type': 'application/json', }, body: JSON.stringify({ Customer: { Phone1: '018-000 00 00' } }), }); ``` ## Inaktivera en kund [#inaktivera-en-kund] `DELETE` raderar inte kunden. Den inaktiveras (`Active: false`), eftersom bokförda fakturor refererar till den. Svaret är `204`, och kunden finns kvar på sin URL. ## Fel [#fel] | Status | `Code` | När | |---|---|---| | 400 | 9000400 | `Name` saknas, ostödd sökparameter, fler än en sökparameter, eller `API_BLANK` på `Name`. | | 404 | 9000404 | `Kan inte hitta kunden`. | | 409 | 9000409 | Kundnumret används redan, eller organisationsnumret används redan av en annan kund. | Allmänna fel (401, 403, 429) beskrivs under [Felkoder](/api/felkoder). # Anställda (/api/referens/employees) > Personalregistret – lista, skapa, hämta och uppdatera anställda via /3/employees. Personalresursen speglar Fortnox `/3/employees`. Den anställde adresseras på sitt anställningsnummer (`EmployeeId`), och numret kan inte ändras när det väl är satt. **Scope:** `salary` · ## Endpoints [#endpoints] | Metod och sökväg | Beskrivning | |---|---| | | Lista anställda | | | Skapa en anställd. Svarar **`200`**, inte `201`. | | | Hämta en anställd | | | Uppdatera en anställd (partiellt) | Bas-URL: `https://app.klirr.ai/api/v1`. Skrivningar kuverteras i `Employee`. `POST` svarar `200` precis som Fortnox gör. Det är den enda skapande endpointen i API:t som inte svarar `201`. Det finns ingen `DELETE`, varken hos Fortnox eller i Klirr. Att radera en anställd skulle radera bokförda lönespecifikationer. Avsluta i stället anställningen med `PUT` och `"Inactive": true`. ## Listparametrar [#listparametrar] Utöver [paginering](/api/paginering) (`page`, `limit`, `offset`) och `sortorder` (`asc`/`desc`). Listan sorteras alltid på `EmployeeId`. | Parameter | Värden | Beskrivning | |---|---|---| | `filter` | `active`, `inactive` | Utan filter returneras alla. Okänt värde ger `400`. | | `employeeid` | text | Exakt anställningsnummer. Klirr-tillägg; finns inte hos Fortnox. | `sortby` och `lastmodified` stöds inte och ger `400` i stället för ett tyst ofiltrerat svar. ## Personnummer maskeras alltid [#personnummer-maskeras-alltid] `PersonalIdentityNumber` returneras **alltid maskerat** som `ÅÅÅÅMMDD-XXXX` (till exempel `19900101-XXXX`), eller `XXXXXXXX-XXXX` om numret inte har tolv siffror. API:t lämnar aldrig ut det fullständiga personnumret. Skickar du tillbaka det maskerade värdet i en `PUT` ignoreras fältet, och det sparade personnumret lämnas oförändrat. Du kan alltså läsa en anställd, ändra ett fält och skicka tillbaka hela objektet utan att personnumret förstörs. Vill du ändra personnumret skickar du det fullständiga numret. ## Fält [#fält] Fullständig form (`GET /3/employees/{EmployeeId}`, och svaret på `POST`/`PUT`). | Fält | Typ | Skrivskyddat | Beskrivning | |---|---|---|---| | `EmployeeId` | string | efter skapande | Anställningsnummer. Utelämnas det vid `POST` tilldelas ett automatiskt. Kan inte ändras. | | `PersonalIdentityNumber` | string | nej | Personnummer. **Maskerat i svaret**, se ovan. | | `FirstName` | string | nej | **Obligatoriskt vid `POST`.** | | `LastName` | string | nej | **Obligatoriskt vid `POST`.** | | `FullName` | string | ja | Härlett ur för- och efternamn. Ignoreras vid skrivning. | | `Email` | string | nej | E-post. | | `Phone1` | string | nej | Telefon. | | `EmploymentDate` | string | nej | Anställningsdatum, `YYYY-MM-DD`. | | `MonthlySalary` | string | nej | Månadslön. **Sträng**, som hos Fortnox. Tal tas också emot. Ett värde som inte går att tolka ignoreras. | | `HourlyPay` | string | nej | Timlön. Sträng, som `MonthlySalary`. | | `Inactive` | boolean | nej | `true` för avslutad anställd. Observera att fältet är inverterat jämfört med `Active` på andra resurser. | | `SalaryForm` | `MAN` \| `TIM` | nej | Månads- eller timlön. Okänt värde ignoreras. | | `PersonelType` | `TJM` \| `ARB` | nej | Tjänsteman eller arbetare. Vid skrivning tas även `FORETAGSLEDARE` emot (bara om bolagsformen tillåter det, annars `400`). Svaret är alltid `TJM` eller `ARB`. Okänt värde ignoreras. | `SalaryForm` och `PersonelType` har färre värden hos Fortnox än i Klirr: en företagsledare returneras som `TJM` och en deltidsanställd som `MAN`. Skickar du tillbaka samma värde i en `PUT` skrivs den mer precisa kategorin i Klirr inte över. Övriga Fortnox-fält (adress, `BankAccountNo`, `TaxTable`, `TaxColumn`, `EmploymentForm`, semestersaldon, `DatedWages` m.fl.) modelleras inte av Klirr. De returneras alltid, med Fortnox nollvärde (`""`, `0`, `false` eller `[]`) eller med det värde du senast skickade, och slås vid `PUT` ihop med de sparade. Klirr använder dem inte i sin egen lönekörning. Till exempel härleds skattetabellen inte ur dem. ### Listform [#listform] Personalresursen har ingen reducerad listform. `GET /3/employees` returnerar samma fält som den fullständiga formen plus `@url`. Omvänt saknar den fullständiga formen `@url`. Båda delarna stämmer med Fortnox. ## Skapa en anställd [#skapa-en-anställd] ```bash curl -X POST https://app.klirr.ai/api/v1/3/employees \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"Employee":{"FirstName":"Anna","LastName":"Svensson","PersonalIdentityNumber":"","EmploymentDate":"2026-09-01","MonthlySalary":"32000","SalaryForm":"MAN","PersonelType":"TJM"}}' ``` ```ts const res = await fetch('https://app.klirr.ai/api/v1/3/employees', { method: 'POST', headers: { Authorization: 'Bearer ', 'Content-Type': 'application/json', }, body: JSON.stringify({ Employee: { FirstName: 'Anna', LastName: 'Svensson', PersonalIdentityNumber: '', EmploymentDate: '2026-09-01', MonthlySalary: '32000', SalaryForm: 'MAN', PersonelType: 'TJM', }, }), }); const { Employee } = await res.json(); // 200 OK ``` Svar (`200`), förkortat. De omodellerade Fortnox-fälten är utelämnade här: ```json { "Employee": { "EmployeeId": "1", "PersonalIdentityNumber": "19900101-XXXX", "FirstName": "Anna", "LastName": "Svensson", "FullName": "Anna Svensson", "Email": "", "Phone1": "", "EmploymentDate": "2026-09-01", "MonthlySalary": "32000", "HourlyPay": "", "Inactive": false, "SalaryForm": "MAN", "PersonelType": "TJM", "EmploymentForm": "TV", "TaxTable": "", "TaxColumn": 0, "VacationDaysSaved": 0, "DatedWages": [] } } ``` ## Lista anställda [#lista-anställda] ```bash curl "https://app.klirr.ai/api/v1/3/employees?filter=active" \ -H "Authorization: Bearer " ``` ```ts const res = await fetch('https://app.klirr.ai/api/v1/3/employees?filter=active', { headers: { Authorization: 'Bearer ' }, }); const { Employees, MetaInformation } = await res.json(); ``` ```json { "Employees": [ { "@url": "https://app.klirr.ai/api/v1/3/employees/1", "EmployeeId": "1", "PersonalIdentityNumber": "19900101-XXXX", "FirstName": "Anna", "LastName": "Svensson", "FullName": "Anna Svensson", "Inactive": false, "SalaryForm": "MAN", "PersonelType": "TJM" } ], "MetaInformation": { "@TotalResources": 1, "@TotalPages": 1, "@CurrentPage": 1 } } ``` Raden ovan är förkortad. Varje rad innehåller alla fält i den fullständiga formen. ## Uppdatera en anställd [#uppdatera-en-anställd] `PUT` ändrar bara de fält du skickar. Använd `"API_BLANK"` för att tömma ett fält. Det fungerar inte på `FirstName`, `LastName`, `Inactive` eller `PersonelType`, som ger `400`. Se [Fortnox-kompatibilitet](/api/fortnox-kompatibilitet). ```bash curl -X PUT https://app.klirr.ai/api/v1/3/employees/1 \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"Employee":{"Inactive":true}}' ``` ```ts await fetch('https://app.klirr.ai/api/v1/3/employees/1', { method: 'PUT', headers: { Authorization: 'Bearer ', 'Content-Type': 'application/json', }, body: JSON.stringify({ Employee: { Inactive: true } }), }); ``` ## Fel [#fel] | Status | `Code` | När | |---|---|---| | 400 | 9000400 | `FirstName` eller `LastName` saknas, okänt `filter`, `sortby` eller `lastmodified` skickat, `API_BLANK` på ett obligatoriskt fält, eller `FORETAGSLEDARE` när bolagsformen inte tillåter det. | | 403 | 9000403 | Organisationens plan rymmer inte fler aktiva anställda. | | 404 | 9000404 | `Kan inte hitta den anställde`. | | 409 | 9000409 | Anställningsnumret används redan. | Allmänna fel (401, 403, 429) beskrivs under [Felkoder](/api/felkoder). # Räkenskapsår (/api/referens/financialyears) > Räkenskapsår – lista och hämta organisationens räkenskapsår via /3/financialyears. Resursen speglar Fortnox `/3/financialyears`. Läs den först: `Id` här är samma tal som `?financialyear=` på [konton](/api/referens/accounts), [verifikationer](/api/referens/vouchers) och [verifikationsserier](/api/referens/voucherseries), och samma tal som deras `Year`-fält. Det är ett löpnummer, **inte** ett årtal. Resursen är skrivskyddad i Klirr. Det finns ingen `POST`: räkenskapsår skapas när bokföringen sätts upp i Klirr. **Scope:** `bookkeeping` · ## Endpoints [#endpoints] | Metod och sökväg | Beskrivning | |---|---| | | Lista räkenskapsår | | | Hämta ett räkenskapsår | Bas-URL: `https://app.klirr.ai/api/v1`. ## Listparametrar [#listparametrar] Listan stöder [paginering](/api/paginering) (`page`, `limit`, `offset`) och är sorterad på startdatum, äldst först. Andra parametrar läses inte; Fortnox `?date=` stöds alltså inte. ## Fält [#fält] Listform och fullständig form är identiska. | Fält | Typ | Skrivskyddat | Beskrivning | |---|---|---|---| | `@url` | string | ja | Resursens URL i Klirr. | | `Id` | number | ja | Räkenskapsårets löpnummer. | | `FromDate` | string | ja | Första dag, `ÅÅÅÅ-MM-DD`. | | `ToDate` | string | ja | Sista dag, `ÅÅÅÅ-MM-DD`. | | `AccountChartType` | string | ja | Alltid `BAS 2013`. | | `AccountingMethod` | `ACCRUAL` \| `CASH` | ja | `CASH` om organisationen använder kontantmetoden, annars `ACCRUAL`. | ## Lista räkenskapsår [#lista-räkenskapsår] ```bash curl https://app.klirr.ai/api/v1/3/financialyears \ -H "Authorization: Bearer " ``` ```ts const res = await fetch('https://app.klirr.ai/api/v1/3/financialyears', { headers: { Authorization: 'Bearer ' }, }); const { FinancialYears, MetaInformation } = await res.json(); ``` ```json { "FinancialYears": [ { "@url": "https://app.klirr.ai/api/v1/3/financialyears/3", "Id": 3, "FromDate": "2026-01-01", "ToDate": "2026-12-31", "AccountChartType": "BAS 2013", "AccountingMethod": "ACCRUAL" } ], "MetaInformation": { "@TotalResources": 1, "@TotalPages": 1, "@CurrentPage": 1 } } ``` ## Hämta ett räkenskapsår [#hämta-ett-räkenskapsår] ```bash curl https://app.klirr.ai/api/v1/3/financialyears/3 \ -H "Authorization: Bearer " ``` ```ts const res = await fetch('https://app.klirr.ai/api/v1/3/financialyears/3', { headers: { Authorization: 'Bearer ' }, }); const { FinancialYear } = await res.json(); ``` Svaret kuverteras i `FinancialYear` med samma fält som i listan. ## Fel [#fel] | Status | `Code` | När | |---|---|---| | 404 | 9000404 | `Kan inte hitta räkenskapsåret`. Gäller även ett `Id` som inte är ett positivt heltal, till exempel ett årtal som inte råkar vara ett giltigt löpnummer. | Allmänna fel (401, 403, 429) beskrivs under [Felkoder](/api/felkoder). # Inbetalningar (/api/referens/invoicepayments) > Kundinbetalningar – lista, registrera, hämta, uppdatera och återföra betalningar på kundfakturor via /3/invoicepayments. Inbetalningsresursen speglar Fortnox `/3/invoicepayments`. En betalning registreras mot en faktura och bokförs direkt – det finns ingen obokförd betalning i Klirr. Betalningen adresseras på sitt publika nummer (`Number`). **Scope:** `invoice` · ## Endpoints [#endpoints] | Metod och sökväg | Beskrivning | |---|---| | | Lista betalningar (listform) | | | Registrera och bokför en betalning. Svarar `201`. | | | Hämta en betalning (fullständig form) | | | Uppdatera de fria fälten (`ModeOfPayment`, `Source` m.fl.) | | | Återför betalningen. Svarar `204`. | | | No-op – returnerar betalningen | Bas-URL: `https://app.klirr.ai/api/v1`. Skrivningar kuverteras i `InvoicePayment`. ## Listparametrar [#listparametrar] Utöver [paginering](/api/paginering) (`page`, `limit`, `offset`) och `sortorder` (`asc`/`desc`): | Parameter | Värden | Beskrivning | |---|---|---| | `sortby` | `paymentdate` | Enda värdet, och standard. | | `invoicenumber` | heltal | Fakturans `DocumentNumber`. Ett okänt eller icke-numeriskt nummer ger en tom lista, inte ett fel. | Återförda betalningar visas aldrig i listan. ## Fält [#fält] Fullständig form (`GET /3/invoicepayments/{Number}`, och svaret på `POST`, `PUT` och `/bookkeep`). | Fält | Typ | Skrivskyddat | Beskrivning | |---|---|---|---| | `@url` | string | ja | Resursens URL. | | `Number` | string | ja | Betalningens publika nummer. Återanvänds aldrig. | | `InvoiceNumber` | number | efter skapande | **Obligatoriskt vid `POST`.** Fakturans `DocumentNumber` – ett **tal** här, till skillnad från fakturan där det är en sträng. | | `Amount` | number | efter skapande | Betalningens belopp i **kronor**. Se [belopp och valuta](#belopp-och-valuta). | | `AmountCurrency` | number | efter skapande | Beloppet i fakturans valuta. Samma som `Amount` för en kronfaktura. | | `PaymentDate` | string | efter skapande | `ÅÅÅÅ-MM-DD`. Standard är dagens datum. Får inte ligga i framtiden. | | `ModeOfPaymentAccount` | number | efter skapande | Kontot som debiteras, fyrsiffrigt BAS-konto. `0` eller utelämnat ger standardkontot. | | `ModeOfPayment` | string | nej | Betalningssätt. Standard `BG`. Lagras bara som metadata. | | `Source` | string | nej | Standard `manual`. | | `Booked` | boolean | ja | Alltid `true`. | | `InvoiceCustomerName` | string | ja | Fakturans kundnamn. | | `InvoiceCustomerNumber` | string | ja | Fakturans kundnummer. | | `InvoiceDueDate` | string | ja | Fakturans förfallodatum. | | `InvoiceOCR` | string | ja | Fakturans OCR. | | `InvoiceTotal` | number | ja | Fakturans totalbelopp. | | `Currency` | string | ja | Fakturans valuta. | | `CurrencyRate` | number | nej | Kronor per enhet vid betalningen. `1` för kronfakturor. | | `CurrencyUnit` | number | nej | Alltid `1` i svaret. Vid `POST` delas `CurrencyRate` med värdet (t.ex. `100` för JPY). | | `VoucherNumber`, `VoucherSeries`, `VoucherYear` | number / string / number | ja | Betalningens verifikat. | `Booked`, `VoucherNumber`, `VoucherSeries` och `VoucherYear` ignoreras om de skickas vid `POST`. Fält som Klirr inte modellerar sparas och returneras oförändrade. ### Listform [#listform] `GET /3/invoicepayments` returnerar: `@url`, `Number`, `InvoiceNumber`, `Amount`, `PaymentDate`, `Currency`, `CurrencyRate`, `AmountCurrency`, `InvoiceCustomerName`, `InvoiceCustomerNumber`, `InvoiceTotal`, `ModeOfPaymentAccount`, `VoucherNumber`, `VoucherSeries`, `VoucherYear`. Belopp och nummer är **strängar** i listformen – utom `InvoiceNumber`, som är ett tal i båda formerna. ## Belopp och valuta [#belopp-och-valuta] Klirr följer Fortnox definition: `Amount` är kronor och `AmountCurrency` är beloppet i fakturans valuta. - **Kronfaktura:** `Amount` är betalningens belopp. `AmountCurrency` behövs inte. - **Faktura i utländsk valuta:** `AmountCurrency` är **obligatoriskt** (och får inte vara `0`). `Amount` är valfritt och anger kronorna som faktiskt kom in på kontot. Utan `Amount` och `CurrencyRate` används Riksbankens kurs för betalningsdagen, och kursdifferensen mot fordran bokförs. - Ett belopp som inte går att tolka (t.ex. `"1 500 kr"`) ger `400` – det tolkas aldrig som "hela beloppet". ## Delbetalning [#delbetalning] Utelämnas beloppet regleras hela det öppna beloppet. Ett lägre belopp ger en delbetalning; fakturan står då kvar som obetald och `Balance` på fakturan visar återstoden. - Beloppet måste vara större än noll och får inte överstiga fakturans öppna belopp – Klirr har ingen modell för överbetalning (`400`). - Fakturan måste vara bokförd och obetald (skickad eller förfallen), annars `400`. En avskriven kundförlust ger `409`. - En förskottsfaktura kan inte delbetalas (`400`). - Organisationer som använder kontantmetoden kan inte delbetala ännu (`400`) – registrera hela beloppet eller kreditera mellanskillnaden. - `WriteOffs` (öres- och kursdifferenser) stöds inte och ger `400`. - Är det öppna beloppet redan noll (fakturan är utkvittad av krediteringar) svarar API:t `409`; fakturan markeras då som betald. ## Registrera en betalning [#registrera-en-betalning] ```bash curl -X POST https://app.klirr.ai/api/v1/3/invoicepayments \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"InvoicePayment":{"InvoiceNumber":42,"Amount":5000,"PaymentDate":"2026-10-15","ModeOfPayment":"BG"}}' ``` ```ts const res = await fetch('https://app.klirr.ai/api/v1/3/invoicepayments', { method: 'POST', headers: { Authorization: 'Bearer ', 'Content-Type': 'application/json', }, body: JSON.stringify({ InvoicePayment: { InvoiceNumber: 42, Amount: 5000, PaymentDate: '2026-10-15', ModeOfPayment: 'BG', }, }), }); const { InvoicePayment } = await res.json(); // 201 Created ``` Svar (`201`): ```json { "InvoicePayment": { "@url": "https://app.klirr.ai/api/v1/3/invoicepayments/7", "Number": "7", "InvoiceNumber": 42, "Amount": 5000, "PaymentDate": "2026-10-15", "ModeOfPaymentAccount": 1930, "ModeOfPayment": "BG", "Booked": true, "InvoiceCustomerName": "Bergström Bygg AB", "InvoiceCustomerNumber": "1001", "InvoiceDueDate": "2026-11-17", "InvoiceOCR": "4200007", "InvoiceTotal": 11875, "Currency": "SEK", "CurrencyRate": 1, "CurrencyUnit": 1, "AmountCurrency": 5000, "VoucherNumber": 18, "VoucherSeries": "C", "VoucherYear": 1, "Source": "manual" } } ``` ## Lista betalningar [#lista-betalningar] ```bash curl "https://app.klirr.ai/api/v1/3/invoicepayments?invoicenumber=42" \ -H "Authorization: Bearer " ``` ```ts const res = await fetch( 'https://app.klirr.ai/api/v1/3/invoicepayments?invoicenumber=42', { headers: { Authorization: 'Bearer ' } }, ); const { InvoicePayments, MetaInformation } = await res.json(); ``` ```json { "InvoicePayments": [ { "@url": "https://app.klirr.ai/api/v1/3/invoicepayments/7", "Number": "7", "InvoiceNumber": 42, "Amount": "5000", "PaymentDate": "2026-10-15", "Currency": "SEK", "CurrencyRate": "1", "AmountCurrency": "5000", "InvoiceCustomerName": "Bergström Bygg AB", "InvoiceCustomerNumber": "1001", "InvoiceTotal": "11875", "ModeOfPaymentAccount": "1930", "VoucherNumber": "18", "VoucherSeries": "C", "VoucherYear": "1" } ], "MetaInformation": { "@TotalResources": 1, "@TotalPages": 1, "@CurrentPage": 1 } } ``` ## Uppdatera en betalning [#uppdatera-en-betalning] Belopp, datum och konto är bokförda och kan inte ändras (bokföringslagen 5 kap. 5 §). `PUT` ändrar bara de fria fälten, som `ModeOfPayment` och `Source`, och lägger till dem utan att ersätta tidigare lagrade fält. Skickar du tillbaka belopp, datum eller konto **oförändrade** (t.ex. ditt eget `GET`-svar) går anropet igenom; ett ändrat värde ger `409`. Vill du rätta beloppet: återför betalningen med `DELETE` och registrera en ny. ```bash curl -X PUT https://app.klirr.ai/api/v1/3/invoicepayments/7 \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"InvoicePayment":{"ModeOfPayment":"SWISH"}}' ``` ```ts await fetch('https://app.klirr.ai/api/v1/3/invoicepayments/7', { method: 'PUT', headers: { Authorization: 'Bearer ', 'Content-Type': 'application/json', }, body: JSON.stringify({ InvoicePayment: { ModeOfPayment: 'SWISH' } }), }); ``` ## Återföra en betalning [#återföra-en-betalning] `DELETE` raderar inte betalningen. Klirr bokför ett rättelseverifikat (BFNAR 2013:2 p. 2.17), markerar betalningen som återförd och öppnar fakturans saldo igen. Svaret är `204`, och betalningen försvinner ur `GET /3/invoicepayments`. Ett nytt `DELETE` eller `GET` på samma nummer ger `404`. Numret återanvänds aldrig. ```bash curl -X DELETE https://app.klirr.ai/api/v1/3/invoicepayments/7 \ -H "Authorization: Bearer " ``` ```ts const res = await fetch('https://app.klirr.ai/api/v1/3/invoicepayments/7', { method: 'DELETE', headers: { Authorization: 'Bearer ' }, }); // res.status === 204 ``` ## bookkeep [#bookkeep] `PUT /3/invoicepayments/{Number}/bookkeep` gör ingenting i Klirr, eftersom betalningen bokfördes redan när den registrerades. Endpointen finns för att Fortnox-integrationer som anropar den ska fungera, och svarar `200` med `{"InvoicePayment": {...}}`. ## Fel [#fel] | Status | `Code` | När | |---|---|---| | 400 | 9000400 | `InvoiceNumber` saknas; otolkbart `Amount`, `AmountCurrency`, `CurrencyRate` eller `CurrencyUnit`; `AmountCurrency` saknas för en faktura i utländsk valuta; ogiltigt `ModeOfPaymentAccount`; ogiltigt eller framtida `PaymentDate`; överbetalning; fakturan är inte skickad eller förfallen; delbetalning av förskottsfaktura eller under kontantmetoden; `WriteOffs`. | | 404 | 9000404 | `Kan inte hitta betalningen` (även för återförda), eller fakturan i `InvoiceNumber` finns inte. | | 409 | 9000409 | Försök att ändra belopp, datum eller konto med `PUT`; fakturan hade inget öppet belopp; fakturan är avskriven som kundförlust. | Allmänna fel (401, 403, 429) beskrivs under [Felkoder](/api/felkoder). # Fakturor (/api/referens/invoices) > Kundfakturor – lista, skapa, hämta och uppdatera fakturor samt bokföra, maila, skriva ut, makulera och kreditera via /3/invoices. Fakturaresursen speglar Fortnox `/3/invoices`. Fakturan adresseras på sitt publika nummer (`DocumentNumber`), inte på ett internt id, och numret kan inte ändras. Det finns ingen `DELETE` – makulering sker via `/cancel` och kreditering via `/credit`. Klirr bokför vid **utfärdandet**: när en faktura bokförs allokeras fakturanummer och OCR, verifikatet postas och status blir skickad – i ett och samma steg. Fortnox skiljer på att skapa, bokföra och skicka; i Klirr är `/bookkeep` och `/externalprint` därför samma sak. **Scope:** `invoice` · ## Endpoints [#endpoints] | Metod och sökväg | Beskrivning | |---|---| | | Lista fakturor (reducerad listform, utan rader) | | | Skapa ett utkast. Svarar `201`. | | | Hämta en faktura (fullständig form) | | | Uppdatera ett utkast (partiellt) | | | Utfärda och bokför | | | Markera som skickad (utfärdar och bokför) | | | Maila fakturan till kunden (utfärdar först om det behövs) | | | PDF – utfärdar först om det behövs | | | PDF-förhandsgranskning utan sidoeffekter | | | Makulera ett utkast | | | Kreditera en bokförd faktura i sin helhet | Bas-URL: `https://app.klirr.ai/api/v1`. Skrivningar kuverteras i `Invoice`. Åtgärdsendpointen tar ingen kropp. Ett `DocumentNumber` som inte är ett positivt heltal ger `404`. ## Listparametrar [#listparametrar] Utöver [paginering](/api/paginering) (`page`, `limit`, `offset`) och `sortorder` (`asc`/`desc`): | Parameter | Värden | Beskrivning | |---|---|---| | `filter` | `cancelled`, `fullypaid`, `unpaid`, `unpaidoverdue`, `unbooked` | Se tabellen nedan. Okänt värde = inget filter. | | `sortby` | `customername`, `customernumber`, `documentnumber`, `invoicedate`, `ocr`, `total` | Standard är `documentnumber`. | | `customernumber` | text | Exakt kundnummer. Okänd kund ger en tom lista, inte `404`. | | `fromdate` | `ÅÅÅÅ-MM-DD` | Fakturadatum från och med. Ogiltigt datum ger `400`. | | `todate` | `ÅÅÅÅ-MM-DD` | Fakturadatum till och med. Ogiltigt datum ger `400`. | | `ocr` | text | Exakt OCR-nummer. | Fortnox-parametrarna `yourordernumber` och `lastmodified` stöds inte ännu och ger `400` i stället för ett ofiltrerat svar. ### Filtervärden [#filtervärden] | `filter` | Fakturor som ingår | |---|---| | `cancelled` | Makulerade (fullt krediterade) | | `fullypaid` | Fullt betalda | | `unpaid` | Bokförda och obetalda, inklusive förfallna. En delbetald faktura räknas hit. | | `unpaidoverdue` | Som `unpaid`, men bara med förfallodatum före idag | | `unbooked` | Utkast | ## Fält [#fält] Fullständig form (`GET /3/invoices/{DocumentNumber}`, och svaret på `POST`, `PUT` och åtgärderna som returnerar JSON). | Fält | Typ | Skrivskyddat | Beskrivning | |---|---|---|---| | `@url` | string | ja | Resursens URL. | | `DocumentNumber` | string | ja | Fakturans publika nummer. | | `CustomerNumber` | string | nej | **Obligatoriskt vid `POST`.** Kunden måste finnas, annars `404`. | | `CustomerName` | string | ja | Kundens namn. | | `Address1`, `ZipCode`, `City` | string | ja | Kundens adress. | | `Country` | string | nej | Bärs vidare. Standard `Sverige`. | | `OrganisationNumber` | string | ja | Kundens organisationsnummer. | | `InvoiceDate` | string | nej | `ÅÅÅÅ-MM-DD`. Standard är dagens datum (svensk tid). | | `DueDate` | string | nej | `ÅÅÅÅ-MM-DD`. Standard är `InvoiceDate` + `TermsOfPayment`, eller 30 dagar. | | `TermsOfPayment` | string | nej | Antal dagar. I svaret härlett som `DueDate − InvoiceDate`. | | `Net` | number | ja | Summa exklusive moms. | | `TotalVAT` | number | ja | Moms. | | `Total`, `Gross` | number | ja | Summa inklusive moms. | | `RoundOff` | number | ja | Öresavrundning. | | `Balance`, `TotalToPay` | number | ja | Återstående belopp att betala, efter betalningar och krediteringar. `0` för en avskriven kundförlust. | | `Booked` | boolean | ja | Se [livscykel](#livscykel). | | `Sent` | boolean | ja | Se [livscykel](#livscykel). | | `Cancelled` | boolean | ja | Se [livscykel](#livscykel). | | `OCR` | string | ja | Genereras vid utfärdandet. | | `Comments` | string | nej | Anteckning. `"API_BLANK"` tömmer. | | `Currency` | string | nej | Endast `SEK` kan skrivas. | | `CurrencyRate` | number | nej | Växelkurs. | | `CurrencyUnit` | number | ja | Alltid `1`. | | `TaxReductionType` | `none` \| `rot` \| `rut` \| `green` | nej | Husavdrag. | | `BasisTaxReduction` | number | ja | Underlag för husavdrag. | | `TaxReduction` | number | ja | Begärt avdrag. | | `HouseWork` | boolean | ja | `true` när fakturan har husavdrag. | | `AccountingMethod` | `ACCRUAL` \| `CASH` | ja | Organisationens bokföringsmetod. | | `InvoiceType` | string | nej | Bärs vidare. Standard `INVOICE`. | | `PaymentWay` | string | nej | Bärs vidare. Standard `AG`. | | `Language` | string | nej | Bärs vidare. Standard `SV`. | | `VATIncluded` | boolean | nej | Alltid `false`. `true` ger `400`. | | `Credit` | string | ja | Alltid `"false"` (sträng). | | `CreditInvoiceReference` | string | ja | Alltid `"0"`. | | `VoucherNumber`, `VoucherSeries`, `VoucherYear` | number / string / number | ja | Utfärdandeverifikatet. `0`/`""` för utkast. | | `InvoiceRows` | array | nej | Fakturarader, se nedan. | Skrivskyddade fält som skickas in ignoreras (en klient som läser och skriver tillbaka en faktura orörd får alltså inget fel). Fält som Klirr inte modellerar sparas och returneras oförändrade. ### Fakturarader [#fakturarader] | Fält | Typ | Skrivskyddat | Beskrivning | |---|---|---|---| | `RowId` | number | nej | Radens id. Skicka `{ "RowId": 3 }` för att behålla en rad oförändrad vid `PUT`. | | `ArticleNumber` | string | nej | Artikelnummer, `""` för fritextrad. | | `Description` | string | nej | Radtext. | | `DeliveredQuantity` | string | nej | Antal. **Sträng** i svaret. | | `Price` | number | nej | À-pris exklusive moms. | | `VAT` | number | nej | Momssats i procent. | | `VATCode` | string | nej | Momskod. Måste stämma med `VAT`, annars `400`. | | `AccountNumber` | number | ja | Intäktskonto, härlett ur momskod och momsbehandling. | | `Unit` | string | nej | Enhet, returneras som den skickades. | | `Total` | number | ja | Radsumma. | | `PriceExcludingVAT`, `TotalExcludingVAT` | number | ja | Pris och summa exklusive moms. | | `HouseWork` | boolean | nej | Raden omfattas av husavdrag. | | `HouseWorkType` | string | nej | `EMPTYHOUSEWORK` när fakturan har husavdrag men raden inte. | | `ContributionPercent`, `ContributionValue` | string | ja | Alltid `"0"`. | `Discount`/`DiscountType` på rader, samt `Freight` och `AdministrationFee` på fakturan, stöds inte och ger `400` – lägg beloppet som en egen rad. ### Listform [#listform] `GET /3/invoices` returnerar en reducerad rad utan `InvoiceRows`: `@url`, `Balance`, `Booked`, `Cancelled`, `CostCenter`, `Currency`, `CurrencyRate`, `CurrencyUnit`, `CustomerName`, `CustomerNumber`, `DocumentNumber`, `DueDate`, `ExternalInvoiceReference1`, `ExternalInvoiceReference2`, `FinalPayDate`, `InvoiceDate`, `InvoiceType`, `NoxFinans`, `OCR`, `Project`, `Sent`, `TermsOfPayment`, `Total`, `VoucherNumber`, `VoucherSeries`, `VoucherYear`, `WayOfDelivery`. Belopp och nummer (`Balance`, `Total`, `CurrencyRate`, `VoucherNumber` m.fl.) är **strängar** i listformen. ## Livscykel [#livscykel] | Klirr-status | `Booked` | `Sent` | `Cancelled` | |---|---|---|---| | Utkast | `false` | `false` | `false` | | Skickad, betald, förfallen, avskriven | `true` | `true` | `false` | | Makulerad (fullt krediterad) | `false` | `false` | `true` | En bokförd faktura kan inte ändras med `PUT` (bokföringslagen 5 kap. 5 §) – svaret är `409` med hänvisning till `/credit`. ## Skapa en faktura [#skapa-en-faktura] `POST` skapar alltid ett obokfört utkast. Bokför det sedan med `/bookkeep`, `/email` eller `/print`. Anropet räknas mot planens fakturakvot (`403` när den är slut). ```bash curl -X POST https://app.klirr.ai/api/v1/3/invoices \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"Invoice":{"CustomerNumber":"1001","TermsOfPayment":"30","InvoiceRows":[{"Description":"Konsulttimmar","DeliveredQuantity":"10","Price":950,"VAT":25}]}}' ``` ```ts const res = await fetch('https://app.klirr.ai/api/v1/3/invoices', { method: 'POST', headers: { Authorization: 'Bearer ', 'Content-Type': 'application/json', }, body: JSON.stringify({ Invoice: { CustomerNumber: '1001', TermsOfPayment: '30', InvoiceRows: [ { Description: 'Konsulttimmar', DeliveredQuantity: '10', Price: 950, VAT: 25 }, ], }, }), }); const { Invoice } = await res.json(); // 201 Created ``` Svar (`201`, förkortat): ```json { "Invoice": { "@url": "https://app.klirr.ai/api/v1/3/invoices/42", "DocumentNumber": "42", "CustomerNumber": "1001", "CustomerName": "Bergström Bygg AB", "InvoiceDate": "2026-10-18", "DueDate": "2026-11-17", "TermsOfPayment": "30", "Net": 9500, "TotalVAT": 2375, "Total": 11875, "Gross": 11875, "RoundOff": 0, "Balance": 11875, "TotalToPay": 11875, "Booked": false, "Sent": false, "Cancelled": false, "OCR": "", "Currency": "SEK", "CurrencyRate": 1, "CurrencyUnit": 1, "TaxReductionType": "none", "VATIncluded": false, "Credit": "false", "CreditInvoiceReference": "0", "VoucherNumber": 0, "VoucherSeries": "", "VoucherYear": 0, "InvoiceRows": [ { "RowId": 0, "ArticleNumber": "", "Description": "Konsulttimmar", "DeliveredQuantity": "10", "Price": 950, "VAT": 25, "VATCode": "services_25", "AccountNumber": 3001, "Unit": "h", "Total": 11875, "PriceExcludingVAT": 950, "TotalExcludingVAT": 9500, "HouseWork": false, "HouseWorkType": "", "ContributionPercent": "0", "ContributionValue": "0" } ] } } ``` ## Lista fakturor [#lista-fakturor] ```bash curl "https://app.klirr.ai/api/v1/3/invoices?filter=unpaid&fromdate=2026-01-01&sortby=invoicedate" \ -H "Authorization: Bearer " ``` ```ts const res = await fetch( 'https://app.klirr.ai/api/v1/3/invoices?filter=unpaid&fromdate=2026-01-01&sortby=invoicedate', { headers: { Authorization: 'Bearer ' } }, ); const { Invoices, MetaInformation } = await res.json(); ``` ```json { "Invoices": [ { "@url": "https://app.klirr.ai/api/v1/3/invoices/42", "Balance": "11875", "Booked": true, "Cancelled": false, "CostCenter": "", "Currency": "SEK", "CurrencyRate": "1", "CurrencyUnit": "1", "CustomerName": "Bergström Bygg AB", "CustomerNumber": "1001", "DocumentNumber": "42", "DueDate": "2026-11-17", "ExternalInvoiceReference1": "", "ExternalInvoiceReference2": "", "FinalPayDate": "", "InvoiceDate": "2026-10-18", "InvoiceType": "INVOICE", "NoxFinans": false, "OCR": "4200007", "Project": "", "Sent": true, "TermsOfPayment": "30", "Total": "11875", "VoucherNumber": "17", "VoucherSeries": "B", "VoucherYear": "1", "WayOfDelivery": "" } ], "MetaInformation": { "@TotalResources": 1, "@TotalPages": 1, "@CurrentPage": 1 } } ``` ## Uppdatera ett utkast [#uppdatera-ett-utkast] `PUT` ändrar bara de huvudfält du skickar. Raderna följer Fortnox regel: utelämnas `InvoiceRows` behålls befintliga rader; skickas fältet **ersätts alla rader**. Ange `{ "RowId": n }` för de rader som ska stå kvar oförändrade. Se [Fortnox-kompatibilitet](/api/fortnox-kompatibilitet). ```bash curl -X PUT https://app.klirr.ai/api/v1/3/invoices/42 \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"Invoice":{"Comments":"Avser oktober","InvoiceRows":[{"RowId":0},{"Description":"Resekostnad","DeliveredQuantity":"1","Price":400,"VAT":25}]}}' ``` ```ts await fetch('https://app.klirr.ai/api/v1/3/invoices/42', { method: 'PUT', headers: { Authorization: 'Bearer ', 'Content-Type': 'application/json', }, body: JSON.stringify({ Invoice: { Comments: 'Avser oktober', InvoiceRows: [ { RowId: 0 }, { Description: 'Resekostnad', DeliveredQuantity: '1', Price: 400, VAT: 25 }, ], }, }), }); ``` ## Åtgärder [#åtgärder] Alla åtgärder adresserar fakturan på `DocumentNumber` och tar ingen kropp. De som svarar med JSON returnerar `{"Invoice": {...}}` i fullständig form, läst om efter åtgärden. ### bookkeep [#bookkeep] `PUT /3/invoices/{DocumentNumber}/bookkeep` utfärdar ett utkast: fakturanummer och OCR allokeras, verifikatet bokförs och status blir skickad. Ingenting mailas. En redan bokförd faktura ger `200` med resursen (idempotent), även vid samtidiga anrop. ```bash curl -X PUT https://app.klirr.ai/api/v1/3/invoices/42/bookkeep \ -H "Authorization: Bearer " ``` ```ts const res = await fetch('https://app.klirr.ai/api/v1/3/invoices/42/bookkeep', { method: 'PUT', headers: { Authorization: 'Bearer ' }, }); const { Invoice } = await res.json(); // Invoice.Booked === true ``` ### externalprint [#externalprint] `PUT /3/invoices/{DocumentNumber}/externalprint` – för när du levererar fakturan i ditt eget system. I Klirr gör den exakt samma sak som `/bookkeep`. ### email [#email] `GET /3/invoices/{DocumentNumber}/email` mailar fakturan till kundens e-postadress. Observera att det är en `GET` med sidoeffekt, precis som hos Fortnox. - Är fakturan ett utkast utfärdas och bokförs den först, och mailas i samma anrop. - Är den redan bokförd skickas bara mejlet igen – inget nytt nummer eller verifikat. - Saknar kunden e-postadress svarar API:t `400`. - Misslyckas utskicket av en redan bokförd faktura svarar API:t `502`. Fakturan är oförändrad och anropet kan göras om. ### print [#print] `GET /3/invoices/{DocumentNumber}/print` returnerar fakturan som PDF (`Content-Type: application/pdf`, `Content-Disposition: inline; filename="faktura-.pdf"`). Ett utkast **utfärdas och bokförs först** – utskrift räknas som leverans. Klirr mailar ingenting. Personnummer maskeras i PDF:en. En faktura utan rader ger `400`. ```bash curl https://app.klirr.ai/api/v1/3/invoices/42/print \ -H "Authorization: Bearer " \ -o faktura-42.pdf ``` ```ts const res = await fetch('https://app.klirr.ai/api/v1/3/invoices/42/print', { headers: { Authorization: 'Bearer ' }, }); const pdf = await res.arrayBuffer(); // application/pdf ``` ### preview [#preview] `GET /3/invoices/{DocumentNumber}/preview` returnerar en PDF utan sidoeffekter – fakturan utfärdas inte och ändras inte. Fungerar på utkast, som då märks `UTKAST`. Filnamnet är `forhandsgranskning-.pdf`, svaret har `Cache-Control: no-store` och personnummer maskeras. En faktura utan rader ger `400`. ### cancel [#cancel] `PUT /3/invoices/{DocumentNumber}/cancel` makulerar ett **utkast**. Utkastet raderas, och svaret är fakturan som den såg ut före raderingen med `Cancelled: true`. Efteråt ger `GET` på numret `404`. En bokförd faktura kan inte makuleras – svaret är `409` med hänvisning till `/credit`. ### credit [#credit] `PUT /3/invoices/{DocumentNumber}/credit` skapar en kreditfaktura för **hela** den bokförda fakturan, rad för rad, daterad idag. Delkreditering stöds inte via den här endpointen. Avvikelse från Fortnox: kreditfakturan får en egen nummerserie i Klirr och är inte adresserbar som faktura. Svaret är i stället den **ursprungliga** fakturan, nu med `Cancelled: true` och `Balance` nollat. - Ett utkast kan inte krediteras: `400` (makulera det med `/cancel`). - En redan helt krediterad faktura: `409`. ## Fel [#fel] | Status | `Code` | När | |---|---|---| | 400 | 9000400 | `CustomerNumber` saknas vid `POST`; ogiltigt datum eller `TermsOfPayment`; annan valuta än `SEK`; `VATIncluded: true`; `Discount`, `Freight` eller `AdministrationFee`; `VATCode` och `VAT` stämmer inte överens; ostödd sökparameter (`yourordernumber`, `lastmodified`); `/credit` på utkast; `/email` utan kundens e-post; `/print` eller `/preview` på faktura utan rader. | | 403 | 9000403 | Planens fakturakvot är förbrukad (vid `POST`). | | 404 | 9000404 | `Kan inte hitta fakturan`, eller kunden i `CustomerNumber` finns inte. | | 409 | 9000409 | `PUT` eller `/cancel` på en bokförd faktura; `/credit` på en redan krediterad faktura. | | 502 | 9000500 | Mejlet kunde inte skickas via `/email` (fakturan är oförändrad). | Allmänna fel (401, 403, 429) beskrivs under [Felkoder](/api/felkoder). # Låst period (/api/referens/settings-lockedperiod) > Läs organisationens låsdatum för bokföringen via /3/settings/lockedperiod. Resursen speglar Fortnox `/3/settings/lockedperiod` och har ett enda fält: slutdatumet för den senast låsta bokföringsperioden. Verifikationer med `TransactionDate` i en låst period avvisas med `409` av [`POST /3/vouchers`](/api/referens/vouchers). Scopet är `settings`, inte `bookkeeping`. En integration som bara behöver låsdatumet behöver alltså inte åtkomst till bokföringen. **Scope:** `settings` · ## Endpoints [#endpoints] | Metod och sökväg | Beskrivning | |---|---| | | Hämta låsdatumet | Bas-URL: `https://app.klirr.ai/api/v1`. Det finns ingen `PUT`; perioder låses i Klirr. Inga parametrar läses. ## Fält [#fält] | Fält | Typ | Skrivskyddat | Beskrivning | |---|---|---|---| | `EndDate` | string | ja | Sista dag (`ÅÅÅÅ-MM-DD`) i den senast låsta perioden. **Utelämnas helt** när ingen period är låst. | Kontrollera alltså om `EndDate` finns, inte om det är tomt. ## Hämta låsdatumet [#hämta-låsdatumet] ```bash curl https://app.klirr.ai/api/v1/3/settings/lockedperiod \ -H "Authorization: Bearer " ``` ```ts const res = await fetch('https://app.klirr.ai/api/v1/3/settings/lockedperiod', { headers: { Authorization: 'Bearer ' }, }); const { LockedPeriod } = await res.json(); const lockedUntil: string | undefined = LockedPeriod.EndDate; ``` Med en låst period: ```json { "LockedPeriod": { "EndDate": "2026-02-28" } } ``` Utan låst period: ```json { "LockedPeriod": {} } ``` ## Fel [#fel] Resursen har inga egna fel utöver `500` (`9000500`) om låset inte kunde läsas. Allmänna fel (401, 403, 429) beskrivs under [Felkoder](/api/felkoder). # Leverantörsfakturor (/api/referens/supplierinvoices) > Leverantörsreskontran – lista, registrera, uppdatera, bokföra och makulera leverantörsfakturor via /3/supplierinvoices. Leverantörsfakturaresursen speglar Fortnox `/3/supplierinvoices`. Fakturan adresseras på Klirrs eget löpnummer (`GivenNumber`), inte på leverantörens fakturanummer (`InvoiceNumber`), som varken är unikt eller Klirrs att dela ut. `GivenNumber` kan inte ändras. `POST` skapar ett **utkast**. Bokföringen görs i ett separat steg med `/bookkeep`. **Scope:** `supplierinvoice` · ## Endpoints [#endpoints] | Metod och sökväg | Beskrivning | |---|---| | | Lista leverantörsfakturor (reducerad listform) | | | Registrera ett utkast. Svarar `201`. | | | Hämta en faktura (fullständig form) | | | Uppdatera ett utkast (partiellt) | | | Bokför fakturan | | | Makulera fakturan | | | Stöds inte – svarar `400` | | | Stöds inte – svarar `400` | | | Stöds inte – svarar `400` | Det finns ingen `DELETE`. Vägen bort är `/cancel`. Bas-URL: `https://app.klirr.ai/api/v1`. Skrivningar kuverteras i `SupplierInvoice`. ## Listparametrar [#listparametrar] Utöver [paginering](/api/paginering) (`page`, `limit`, `offset`). Det finns ingen `sortby`. Listan sorteras alltid på `GivenNumber`, nyast först. | Parameter | Värden | Beskrivning | |---|---|---| | `filter` | se nedan | Okänt värde ger `400`. | | `suppliernumber` | text | Leverantörens nummer. Okänd leverantör ger en tom lista, inte `404`. | | `invoicenumber` | text | Leverantörens fakturanummer. | | `fromdate` | `YYYY-MM-DD` | Från och med datum. Ogiltigt datum ger `400`. | | `todate` | `YYYY-MM-DD` | Till och med datum. | | `filter` | Träffar | |---|---| | `unbooked` | Utkast. | | `unpaid` | Bokförda, obetalda. | | `unpaidoverdue` | Bokförda, obetalda och förfallna. | | `fullypaid` | Betalda. | | `cancelled` | Makulerade. | | `pendingpayment`, `authorizepending` | Alltid en tom lista. Klirr har varken betalningsfil eller attestflöde. | Fortnox-parametrarna `suppliername`, `serialnumber`, `ocr`, `costcenter`, `project`, `ourreference`, `yourreference`, `fromfinalpaydate`, `tofinalpaydate` och `lastmodified` stöds inte ännu och ger `400` i stället för ett tyst ofiltrerat svar. ## Fält [#fält] Fullständig form (`GET /3/supplierinvoices/{GivenNumber}`, och svaret på `POST`, `PUT` och åtgärderna). **Beloppen (`Total`, `VAT`, `Balance`, `CurrencyRate` m.fl.) är strängar även i den fullständiga formen**, till skillnad från kundfakturan. Det är så Fortnox typar just den här resursen. Det finns inget `Net`. | Fält | Typ | Skrivskyddat | Beskrivning | |---|---|---|---| | `@url` | string | ja | Resursens URL i Klirr. | | `GivenNumber` | string | efter skapande | Klirrs löpnummer. Utelämnas det vid `POST` tilldelas nästa lediga. Måste vara ett positivt heltal. | | `SupplierNumber` | string | nej | **Obligatoriskt vid `POST`.** Leverantören måste redan finnas i [/3/suppliers](/api/referens/suppliers). | | `SupplierName` | string | ja | Leverantörens namn. | | `InvoiceNumber` | string | nej | **Obligatoriskt.** Leverantörens eget fakturanummer. | | `InvoiceDate` | string | nej | **Obligatoriskt.** `YYYY-MM-DD`. | | `DueDate` | string | nej | **Obligatoriskt.** `YYYY-MM-DD`. | | `FinalPayDate` | string | ja | Betalningsdatum, `""` om obetald. | | `Comments` | string | nej | Anteckning. | | `Currency` | string | nej | Standard `SEK`. | | `CurrencyRate` | string | nej | Kurs per enhet, upp till sex decimaler. `"1"` för SEK, `"0"` för ett utkast i utländsk valuta utan fastställd kurs. | | `CurrencyUnit` | number | nej | Läses vid skrivning (kursen delas med den). Returneras alltid som `1`. | | `Total` | string | ja | Fakturans totalbelopp, härlett ur raderna. | | `VAT` | string | nej | Momsbelopp. Vid skrivning används det för att härleda momssatsen (25, 12 eller 6 %). | | `Balance` | string | ja | Utestående belopp, i fakturans valuta. | | `VATType` | string | nej | `NORMAL` (standard), `EUINTERNAL`, `REVERSE` eller Klirrs preciseringar `REVERSECHARGEEUGOODS`, `REVERSECHARGEEUSERVICES`, `REVERSECHARGENONEUSERVICES`, `REVERSECHARGEDOMESTICGOODS`, `REVERSECHARGEDOMESTICSERVICES`, `IMPORT`. Svaret innehåller alltid det exakta värdet, så `REVERSE` läses tillbaka som `REVERSECHARGEDOMESTICSERVICES`. Okänt värde ger `400`. | | `Booked` | boolean | ja | `true` för bokförd eller betald faktura. | | `Cancelled` | boolean | ja | `true` för makulerad faktura. | | `Credit` | boolean | ja | Alltid `false`. | | `PaymentPending` | boolean | ja | Alltid `false`. | | `CreditReference` | number | ja | Alltid `0`. | | `AccountingMethod` | `ACCRUAL` \| `CASH` | ja | Organisationens bokföringsmetod. | | `Vouchers` | array | ja | Verifikationer som pekar på fakturan: `{ Number, Year, Series, ReferenceType }`. `Year` är räkenskapsårets id, inte kalenderåret. | | `Freight`, `AdministrationFee`, `RoundOffValue` | string | – | Alltid `"0"`. Ett värde skilt från noll vid skrivning ger `400`. Lägg beloppet som en egen rad. | | `OCR`, `OurReference`, `YourReference`, `Project`, `CostCenter`, `ExternalInvoiceNumber`, `ExternalInvoiceSeries`, `SalesType`, `DisablePaymentFile` | – | nej | Bärs vidare oförändrade. `SalesType` returneras bara som `STOCK`, `SERVICE` eller `""`. | | `SupplierInvoiceRows` | array | nej | **Minst en rad vid `POST`.** Se nedan. | ### Rader [#rader] | Fält | Typ | Skrivskyddat | Beskrivning | |---|---|---|---| | `Account` | number | nej | Kostnadskonto. Utelämnat faller det tillbaka på leverantörens `PreDefinedAccount`. Kontot måste finnas i kontoplanen. | | `ItemDescription` | string | nej | Beskrivning. Saknas den används `AccountDescription`, annars `"Rad"`. | | `Quantity` | number | nej | Antal. Negativt antal ger `400`. | | `Price` | number | nej | À-pris, exklusive moms. | | `Debit` | number | nej | Radens nettobelopp i kronor. Används när `Quantity`/`Price` saknas. | | `DebitCurrency` | number | nej | Radens nettobelopp i fakturans valuta. Vinner över `Debit`. Krävs för fakturor i utländsk valuta om du inte anger `Quantity` och `Price`. | | `Credit`, `CreditCurrency` | number | nej | Måste vara `0`. Kreditrader ger `400`. | | `Total` | number | ja | Radens nettobelopp. | | `Unit` | string | ja | Enhet. | | `Code` | string | nej | `TOT` och `VAT` ignoreras (summor räknas av Klirr). `FRT`, `AFE` och `ROV` ger `400`. Övriga koder bärs vidare. | | `AccountDescription`, `ArticleNumber`, `CostCenter`, `Project`, `TransactionInformation` | string | nej | Bärs vidare oförändrade. | Fortnox-raden har ingen momssats. Klirr härleder den ur fakturans `VAT` mot radernas netto: den måste landa på 25, 12 eller 6 % (med öresavrundning), annars `400`. `VAT` = 0 ger 0 %. För omvänd skattskyldighet antas 25 %. En faktura med blandade momssatser kan alltså inte registreras via det här API:t. ### Listform [#listform] `GET /3/supplierinvoices` returnerar en reducerad rad med fälten `@url`, `AuthorizerName` (alltid `""`), `Balance`, `Booked`, `Cancel`, `CostCenter`, `Credit`, `Currency`, `CurrencyRate`, `CurrencyUnit`, `DisablePaymentFile`, `DueDate`, `ExternalInvoiceNumber`, `ExternalInvoiceSeries`, `FinalPayDate`, `GivenNumber`, `InvoiceDate`, `InvoiceNumber`, `Project`, `SupplierName`, `SupplierNumber`, `Total` och `Vouchers`. Observera att makuleringsflaggan heter `Cancel` i listan men `Cancelled` i den fullständiga formen, precis som hos Fortnox. ## Registrera en leverantörsfaktura [#registrera-en-leverantörsfaktura] ```bash curl -X POST https://app.klirr.ai/api/v1/3/supplierinvoices \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"SupplierInvoice":{"SupplierNumber":"1","InvoiceNumber":"F-2026-118","InvoiceDate":"2026-10-01","DueDate":"2026-10-31","VAT":250,"SupplierInvoiceRows":[{"Account":4010,"ItemDescription":"Byggmaterial","Quantity":1,"Price":1000}]}}' ``` ```ts const res = await fetch('https://app.klirr.ai/api/v1/3/supplierinvoices', { method: 'POST', headers: { Authorization: 'Bearer ', 'Content-Type': 'application/json', }, body: JSON.stringify({ SupplierInvoice: { SupplierNumber: '1', InvoiceNumber: 'F-2026-118', InvoiceDate: '2026-10-01', DueDate: '2026-10-31', VAT: 250, SupplierInvoiceRows: [ { Account: 4010, ItemDescription: 'Byggmaterial', Quantity: 1, Price: 1000 }, ], }, }), }); const { SupplierInvoice } = await res.json(); // 201 Created ``` Svar (`201`), förkortat: ```json { "SupplierInvoice": { "@url": "https://app.klirr.ai/api/v1/3/supplierinvoices/42", "GivenNumber": "42", "SupplierNumber": "1", "SupplierName": "Lindqvist Grossist AB", "InvoiceNumber": "F-2026-118", "InvoiceDate": "2026-10-01", "DueDate": "2026-10-31", "FinalPayDate": "", "Currency": "SEK", "CurrencyRate": "1", "CurrencyUnit": 1, "Total": "1250", "VAT": "250", "Balance": "0", "VATType": "NORMAL", "Booked": false, "Cancelled": false, "Credit": false, "PaymentPending": false, "AccountingMethod": "ACCRUAL", "Vouchers": [], "SupplierInvoiceRows": [ { "Account": 4010, "ItemDescription": "Byggmaterial", "Quantity": 1, "Price": 1000, "Debit": 1000, "DebitCurrency": 1000, "Credit": 0, "CreditCurrency": 0, "Total": 1000, "Unit": "", "Code": "" } ] } } ``` ## Lista leverantörsfakturor [#lista-leverantörsfakturor] ```bash curl "https://app.klirr.ai/api/v1/3/supplierinvoices?filter=unpaid&suppliernumber=1" \ -H "Authorization: Bearer " ``` ```ts const res = await fetch( 'https://app.klirr.ai/api/v1/3/supplierinvoices?filter=unpaid&suppliernumber=1', { headers: { Authorization: 'Bearer ' } }, ); const { SupplierInvoices, MetaInformation } = await res.json(); ``` ```json { "SupplierInvoices": [ { "@url": "https://app.klirr.ai/api/v1/3/supplierinvoices/42", "AuthorizerName": "", "Balance": "1250", "Booked": true, "Cancel": false, "CostCenter": "", "Credit": false, "Currency": "SEK", "CurrencyRate": "1", "CurrencyUnit": 1, "DisablePaymentFile": false, "DueDate": "2026-10-31", "ExternalInvoiceNumber": "", "ExternalInvoiceSeries": "", "FinalPayDate": "", "GivenNumber": "42", "InvoiceDate": "2026-10-01", "InvoiceNumber": "F-2026-118", "Project": "", "SupplierName": "Lindqvist Grossist AB", "SupplierNumber": "1", "Total": "1250", "Vouchers": [{ "Number": 12, "Year": 1, "Series": "L", "ReferenceType": "SUPPLIERINVOICE" }] } ], "MetaInformation": { "@TotalResources": 1, "@TotalPages": 1, "@CurrentPage": 1 } } ``` ## Uppdatera ett utkast [#uppdatera-ett-utkast] `PUT` ändrar bara de fält du skickar och fungerar bara på utkast. En bokförd eller makulerad faktura ger `409`, eftersom bokförd räkenskapsinformation inte får ändras. Skickar du `SupplierInvoiceRows` ersätts raderna. Se [Fortnox-kompatibilitet](/api/fortnox-kompatibilitet). ```bash curl -X PUT https://app.klirr.ai/api/v1/3/supplierinvoices/42 \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"SupplierInvoice":{"DueDate":"2026-11-15"}}' ``` ```ts await fetch('https://app.klirr.ai/api/v1/3/supplierinvoices/42', { method: 'PUT', headers: { Authorization: 'Bearer ', 'Content-Type': 'application/json', }, body: JSON.stringify({ SupplierInvoice: { DueDate: '2026-11-15' } }), }); ``` ## Åtgärder [#åtgärder] Alla åtgärder är `PUT` utan kropp och kräver scope `supplierinvoice`. Ett okänt `GivenNumber` ger `404` före allt annat. ### Bokför (`/bookkeep`) [#bokför-bookkeep] Bokför fakturan med en verifikation i serie `L`: debet kostnadskonto per rad, ingående moms på 2640 och kredit 2440 leverantörsskuld. Svaret är `200` med fakturan som den ser ut efteråt (`Booked: true`, `Balance` och `Vouchers` ifyllda). Anropet är idempotent: en redan bokförd eller betald faktura svarar `200` med resursen. En makulerad faktura ger `409`, liksom ett stängt räkenskapsår eller en låst period. Kroppen ignoreras, så uppdatera med `PUT` först och bokför sedan. ```bash curl -X PUT https://app.klirr.ai/api/v1/3/supplierinvoices/42/bookkeep \ -H "Authorization: Bearer " ``` ```ts const res = await fetch('https://app.klirr.ai/api/v1/3/supplierinvoices/42/bookkeep', { method: 'PUT', headers: { Authorization: 'Bearer ' }, }); const { SupplierInvoice } = await res.json(); ``` ### Makulera (`/cancel`) [#makulera-cancel] Vad som händer beror på fakturans läge: | Läge | Resultat | |---|---| | Utkast | Utkastet raderas. Svaret är `200` med fakturans sista kända form och `Cancelled: true`. | | Bokförd | Bokföringen återförs med ett rättelseverifikat i serie `M`. Svaret är `200` med `Cancelled: true`. | | Redan makulerad | `200` med resursen oförändrad. | | Betald | `409`. Betalningen måste ångras först. | ### Kreditera (`/credit`) [#kreditera-credit] Stöds inte och svarar alltid `400`. Klirr har inget kreditflöde och inga negativa rader på leverantörssidan. Vill du backa bokföringen använder du `/cancel`. ### Attest (`/approvalbookkeep`, `/approvalpayment`) [#attest-approvalbookkeep-approvalpayment] Stöds inte och svarar alltid `400`. Klirr har inget attestflöde: en leverantörsfaktura går direkt från utkast till bokförd med `/bookkeep`. `/approvalpayment` registrerar ingen betalning, och det externa API:et har ingen betalningsresurs för leverantörsfakturor. ## Fel [#fel] | Status | `Code` | När | |---|---|---| | 400 | 9000400 | Obligatoriskt fält saknas, inga rader, okänd leverantör eller okänt konto, rad utan konto när leverantören saknar `PreDefinedAccount`, okänt `filter` eller `VATType`, ostödd sökparameter, ogiltigt datum, `Freight`/`AdministrationFee`/`RoundOffValue` skilt från noll, kreditrad eller negativt antal, moms som inte motsvarar 25/12/6 %, `/credit`, `/approvalbookkeep`, `/approvalpayment`. | | 404 | 9000404 | `Kan inte hitta leverantörsfakturan`. Även för ett `GivenNumber` som inte är ett positivt heltal. | | 409 | 9000409 | `GivenNumber` är upptaget, samma fakturanummer finns redan på leverantören för räkenskapsåret, `PUT` på en icke-utkastfaktura, bokföring av en makulerad faktura eller i ett stängt räkenskapsår, makulering av en betald faktura. | Allmänna fel (401, 403, 429) beskrivs under [Felkoder](/api/felkoder). # 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` · ## Endpoints [#endpoints] | Metod och sökväg | Beskrivning | |---|---| | | Lista leverantörer (reducerad listform) | | | Skapa en leverantör. Svarar `201`. | | | Hämta en leverantör (fullständig form) | | | Uppdatera en leverantör (partiellt) | | | 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] ```bash curl -X POST https://app.klirr.ai/api/v1/3/suppliers \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"Supplier":{"Name":"Lindqvist Grossist AB","OrganisationNumber":"556000-0001","BG":"000-0000","TermsOfPayment":"30"}}' ``` ```ts const res = await fetch('https://app.klirr.ai/api/v1/3/suppliers', { method: 'POST', headers: { Authorization: 'Bearer ', '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 ``` 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] ```bash curl "https://app.klirr.ai/api/v1/3/suppliers?name=Lindqvist&sortby=name" \ -H "Authorization: Bearer " ``` ```ts const res = await fetch( 'https://app.klirr.ai/api/v1/3/suppliers?name=Lindqvist&sortby=name', { headers: { Authorization: 'Bearer ' } }, ); const { Suppliers, MetaInformation } = await res.json(); ``` ```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). ```bash curl -X PUT https://app.klirr.ai/api/v1/3/suppliers/1 \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"Supplier":{"Email":"faktura@lindqvistgrossist.se"}}' ``` ```ts await fetch('https://app.klirr.ai/api/v1/3/suppliers/1', { method: 'PUT', headers: { Authorization: 'Bearer ', 'Content-Type': 'application/json', }, body: JSON.stringify({ Supplier: { Email: 'faktura@lindqvistgrossist.se' } }), }); ``` ## 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). # Verifikationer (/api/referens/vouchers) > Verifikationer – lista, skapa och hämta bokföringsposter via /3/vouchers. Verifikationsresursen speglar Fortnox `/3/vouchers`. En verifikation identifieras av tre delar: serie, nummer och räkenskapsår. Serie och nummer ligger i sökvägen, räkenskapsåret i `?financialyear=`. Nummer 12 i serie `A` finns alltså en gång per räkenskapsår. `POST` skapar en riktig verifikation i Klirrs bokföring, på samma väg som Klirrs egna bokföringar. Periodlås, balanskrav och nummerserie gäller. Det finns ingen `PUT` och ingen `DELETE`: en bokförd verifikation kan inte ändras eller tas bort, bara rättas med en ny verifikation. **Scope:** `bookkeeping` · ## Endpoints [#endpoints] | Metod och sökväg | Beskrivning | |---|---| | | Lista verifikationer (listform, utan rader) | | | Skapa en verifikation. Svarar `201`. | | | Lista verifikationer i en serie | | | Hämta en verifikation (fullständig form, med rader) | Bas-URL: `https://app.klirr.ai/api/v1`. Skrivningar kuverteras i `Voucher`. ## Räkenskapsår [#räkenskapsår] Alla anrop läser `?financialyear=`, 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 är ett positivt heltal ger `400`, ett okänt `Id` ger `404`. Listorna visar bara verifikationer i det valda året. Vid `POST` måste `TransactionDate` ligga i det angivna året om du skickar `financialyear`. Annars bestäms året av datumet. ## Listparametrar [#listparametrar] Gäller både `/3/vouchers` och `/3/vouchers/sublist/{VoucherSeries}`. Utöver [paginering](/api/paginering) (`page`, `limit`, `offset`) och `sortorder` (`asc`/`desc`, även `ascending`/`descending`): | Parameter | Värden | Beskrivning | |---|---|---| | `financialyear` | heltal | Se ovan. | | `fromdate` | `ÅÅÅÅ-MM-DD` | Från och med datum. Ogiltigt datum ger `400`. | | `todate` | `ÅÅÅÅ-MM-DD` | Till och med datum. Ogiltigt datum ger `400`. | | `voucherseries` | text | Seriekod. Bara på `/3/vouchers`; på sublist-vägen ligger serien i sökvägen. | | `sortby` | `vouchernumber`, `referencenumber`, `voucherseries` | Alla tre sorterar på verifikationsnummer. | Fortnox-parametrarna `costcenter` och `lastmodified` stöds inte och ger `400`. En okänd serie i `?voucherseries=` ger en tom lista. En okänd serie i sublist-sökvägen ger `404`. ## Fält [#fält] Fullständig form (`GET /3/vouchers/{VoucherSeries}/{VoucherNumber}`, och svaret på `POST`). | Fält | Typ | Skrivskyddat | Beskrivning | |---|---|---|---| | `@url` | string | ja | `.../3/vouchers/{VoucherSeries}/{VoucherNumber}`. | | `VoucherNumber` | number | ja | Tilldelas i serien vid skapande. | | `VoucherSeries` | string | efter skapande | Seriekod, t.ex. `A`. **Obligatoriskt vid `POST`.** Serien måste finnas och vara aktiv. | | `Year` | number | ja | Räkenskapsårets `Id`, inte ett årtal. | | `TransactionDate` | string | efter skapande | Bokföringsdatum `ÅÅÅÅ-MM-DD`. **Obligatoriskt.** | | `Description` | string | efter skapande | Verifikationstext. **Obligatoriskt**, max 500 tecken. | | `Comments` | string | efter skapande | Anteckning, max 5000 tecken. | | `ReferenceNumber` | string | ja | Numret på länkad kundfaktura eller leverantörsfaktura, annars `""`. | | `ReferenceType` | string | ja | Härleds ur verifikationens ursprung: `INVOICE`, `SUPPLIERINVOICE`, `INVOICEPAYMENT`, `SUPPLIERPAYMENT`, `RECEIPT`, `PAYROLLBOOKKEEP`, `ACCRUAL` eller `MANUAL`. Verifikationer skapade via API:t är `MANUAL`. | | `ApprovalState` | number | ja | Alltid `0`. | | `CostCenter` | string | efter skapande | Bärs vidare. | | `Project` | string | efter skapande | Bärs vidare. | | `VoucherRows` | array | efter skapande | Raderna, se nedan. Minst en rad med belopp. | ### VoucherRows [#voucherrows] | Fält | Typ | Skrivskyddat | Beskrivning | |---|---|---|---| | `Account` | number | nej | Kontonummer. Kontot måste finnas och vara aktivt. | | `Debit` | number | nej | Debetbelopp, standard `0`. | | `Credit` | number | nej | Kreditbelopp, standard `0`. | | `Description` | string | nej | Radtext. Utelämnad visas kontots namn. | | `CostCenter` | string | nej | Bärs vidare. | | `Project` | string | nej | Bärs vidare. | | `TransactionInformation` | string | nej | Bärs vidare. | | `Removed` | boolean | ja | `true` om verifikationen är borttagen. | Regler för raderna: belopp får inte vara negativa, en rad kan inte ha både `Debit` och `Credit`, högst 1000 rader, och summan av `Debit` måste vara exakt lika med summan av `Credit` (på öret). ### Listform [#listform] Listorna returnerar samma fält som den fullständiga formen utom `VoucherRows`, `CostCenter` och `Project`. ## Skapa en verifikation [#skapa-en-verifikation] ```bash curl -X POST https://app.klirr.ai/api/v1/3/vouchers \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"Voucher":{"VoucherSeries":"A","TransactionDate":"2026-03-15","Description":"Kontorsmaterial","VoucherRows":[{"Account":6110,"Debit":800},{"Account":2641,"Debit":200},{"Account":1930,"Credit":1000}]}}' ``` ```ts const res = await fetch('https://app.klirr.ai/api/v1/3/vouchers', { method: 'POST', headers: { Authorization: 'Bearer ', 'Content-Type': 'application/json', }, body: JSON.stringify({ Voucher: { VoucherSeries: 'A', TransactionDate: '2026-03-15', Description: 'Kontorsmaterial', VoucherRows: [ { Account: 6110, Debit: 800 }, { Account: 2641, Debit: 200 }, { Account: 1930, Credit: 1000 }, ], }, }), }); const { Voucher } = await res.json(); // 201 Created ``` Svar (`201`): ```json { "Voucher": { "@url": "https://app.klirr.ai/api/v1/3/vouchers/A/42", "VoucherNumber": 42, "VoucherSeries": "A", "Year": 3, "TransactionDate": "2026-03-15", "Description": "Kontorsmaterial", "Comments": "", "ReferenceNumber": "", "ReferenceType": "MANUAL", "ApprovalState": 0, "CostCenter": "", "Project": "", "VoucherRows": [ { "Account": 6110, "Debit": 800, "Credit": 0, "Description": "Förbrukningsmaterial", "CostCenter": "", "Project": "", "TransactionInformation": "", "Removed": false }, { "Account": 2641, "Debit": 200, "Credit": 0, "Description": "Debiterad ingående moms", "CostCenter": "", "Project": "", "TransactionInformation": "", "Removed": false }, { "Account": 1930, "Debit": 0, "Credit": 1000, "Description": "Företagskonto", "CostCenter": "", "Project": "", "TransactionInformation": "", "Removed": false } ] } } ``` ## Lista verifikationer [#lista-verifikationer] ```bash curl "https://app.klirr.ai/api/v1/3/vouchers/sublist/A?financialyear=3&fromdate=2026-03-01&todate=2026-03-31" \ -H "Authorization: Bearer " ``` ```ts const res = await fetch( 'https://app.klirr.ai/api/v1/3/vouchers/sublist/A?financialyear=3&fromdate=2026-03-01&todate=2026-03-31', { headers: { Authorization: 'Bearer ' } }, ); const { Vouchers, MetaInformation } = await res.json(); ``` ```json { "Vouchers": [ { "@url": "https://app.klirr.ai/api/v1/3/vouchers/A/42", "VoucherNumber": 42, "VoucherSeries": "A", "Year": 3, "TransactionDate": "2026-03-15", "Description": "Kontorsmaterial", "Comments": "", "ReferenceNumber": "", "ReferenceType": "MANUAL", "ApprovalState": 0 } ], "MetaInformation": { "@TotalResources": 1, "@TotalPages": 1, "@CurrentPage": 1 } } ``` ## Hämta en verifikation [#hämta-en-verifikation] ```bash curl "https://app.klirr.ai/api/v1/3/vouchers/A/42?financialyear=3" \ -H "Authorization: Bearer " ``` ```ts const res = await fetch('https://app.klirr.ai/api/v1/3/vouchers/A/42?financialyear=3', { headers: { Authorization: 'Bearer ' }, }); const { Voucher } = await res.json(); ``` ## Fel [#fel] | Status | `Code` | När | |---|---|---| | 400 | 9000400 | `VoucherSeries`, `TransactionDate` eller `Description` saknas eller är ogiltigt, serien finns inte eller är inaktiverad, datumet ligger utanför varje räkenskapsår, datumet ligger inte i angivet `financialyear`, obalanserad verifikation, ogiltig rad eller konto som inte finns/är inaktivt, ostödd sökparameter. | | 404 | 9000404 | `Kan inte hitta verifikationen`, `Kan inte hitta verifikationsserien`, eller okänt räkenskapsår. | | 409 | 9000409 | `TransactionDate` ligger i en låst period (serier som får kringgå periodlåset, som bokslutsserien `Å`, undantas), eller i ett stängt räkenskapsår. Se [låst period](/api/referens/settings-lockedperiod). | Allmänna fel (401, 403, 429) beskrivs under [Felkoder](/api/felkoder). # Verifikationsserier (/api/referens/voucherseries) > Verifikationsserier – lista och hämta organisationens serier via /3/voucherseries. Resursen speglar Fortnox `/3/voucherseries`. En serie adresseras på sin kod (`Code`), t.ex. `A`. Resursen är skrivskyddad i Klirr: det finns ingen `POST` eller `PUT`, eftersom en ny serie påverkar luckkontrollen och den automatiska periodlåsningen. **Scope:** `bookkeeping` · ## Endpoints [#endpoints] | Metod och sökväg | Beskrivning | |---|---| | | Lista serier (listform) | | | Hämta en serie, med nästa verifikationsnummer | Bas-URL: `https://app.klirr.ai/api/v1`. ## Parametrar [#parametrar] Båda anropen läser `?financialyear=`, räkenskapsårets `Id` från [`/3/financialyears`](/api/referens/financialyears). Det styr `Year` och, på enskild serie, vilket år `NextVoucherNumber` räknas för. Utelämnat gäller det aktuella räkenskapsåret. Ogiltigt värde ger `400`, okänt `Id` ger `404`. Listan stöder [paginering](/api/paginering) (`page`, `limit`, `offset`) och är sorterad på kod. Den innehåller alla serier, även inaktiverade. Andra parametrar läses inte. ## Fält [#fält] Fullständig form (`GET /3/voucherseries/{Code}`). | Fält | Typ | Skrivskyddat | Beskrivning | |---|---|---|---| | `@url` | string | ja | Resursens URL i Klirr. | | `Code` | string | ja | Seriekod. | | `Description` | string | ja | Seriens namn. | | `Manual` | boolean | ja | Alltid `true`. Betyder inte att serien kringgår periodlåset. | | `NextVoucherNumber` | number | ja | Beräknat som högsta använda nummer i året plus ett. | | `Year` | number | ja | Räkenskapsårets `Id`, inte ett årtal. | | `Approver` | null | ja | Alltid `null`. Klirr har ingen attest på serienivå. | ### Listform [#listform] Listan har samma fält utom `NextVoucherNumber`. Kollektionen heter `VoucherSeriesCollection`, inte `VoucherSeries`. ## Lista serier [#lista-serier] ```bash curl "https://app.klirr.ai/api/v1/3/voucherseries?financialyear=3" \ -H "Authorization: Bearer " ``` ```ts const res = await fetch('https://app.klirr.ai/api/v1/3/voucherseries?financialyear=3', { headers: { Authorization: 'Bearer ' }, }); const { VoucherSeriesCollection, MetaInformation } = await res.json(); ``` ```json { "VoucherSeriesCollection": [ { "@url": "https://app.klirr.ai/api/v1/3/voucherseries/A", "Code": "A", "Description": "Manuella verifikationer", "Manual": true, "Year": 3, "Approver": null } ], "MetaInformation": { "@TotalResources": 1, "@TotalPages": 1, "@CurrentPage": 1 } } ``` ## Hämta en serie [#hämta-en-serie] ```bash curl https://app.klirr.ai/api/v1/3/voucherseries/A \ -H "Authorization: Bearer " ``` ```ts const res = await fetch('https://app.klirr.ai/api/v1/3/voucherseries/A', { headers: { Authorization: 'Bearer ' }, }); const { VoucherSeries } = await res.json(); ``` ```json { "VoucherSeries": { "@url": "https://app.klirr.ai/api/v1/3/voucherseries/A", "Code": "A", "Description": "Manuella verifikationer", "Manual": true, "Year": 3, "Approver": null, "NextVoucherNumber": 43 } } ``` ## Fel [#fel] | Status | `Code` | När | |---|---|---| | 400 | 9000400 | Ogiltigt `financialyear`. | | 404 | 9000404 | `Kan inte hitta verifikationsserien`, eller okänt räkenskapsår. | Allmänna fel (401, 403, 429) beskrivs under [Felkoder](/api/felkoder). # Scopes (/api/scopes) > Vilka scopes som finns och vilka resurser de öppnar. Scopes sätts **per resurs**, inte per verb. Precis som hos Fortnox finns ingen uppdelning i läs- och skrivrätt: den som har `customer` kan både läsa och ändra kunder. Namnen är Fortnox egna, så en befintlig integration kan begära samma scopes. | Scope | Resurser | Beskrivning användaren ser vid godkännandet | |---|---|---| | `article` | `/3/articles` | Läsa och ändra ditt artikelregister | | `customer` | `/3/customers` | Läsa och ändra ditt kundregister | | `invoice` | `/3/invoices`, `/3/invoicepayments` | Läsa och ändra dina fakturor, samt registrera betalningar | | `bookkeeping` | `/3/accounts`, `/3/vouchers`, `/3/voucherseries`, `/3/financialyears` | Läsa din kontoplan, dina verifikationer och räkenskapsår, samt bokföra nya verifikationer | | `settings` | `/3/settings/lockedperiod` | Läsa dina bokföringsinställningar, till exempel vilken period som är låst | | `supplier` | `/3/suppliers` | Läsa och ändra ditt leverantörsregister | | `supplierinvoice` | `/3/supplierinvoices` | Läsa och ändra dina leverantörsfakturor, samt bokföra dem | | `salary` | `/3/employees` | Läsa och ändra ditt personalregister, inklusive löneuppgifter och maskerade personnummer | `supplier` och `supplierinvoice` är skilda scopes, så ett inköpssystem som bara läser leverantörsregistret behöver inte kunna bokföra leverantörsfakturor. `salary` ger åtkomst till personalregistret, inte till lönekörningar, lönespecifikationer eller AGI. Scopet `mcp` hör till [MCP-servern](/mcp) och öppnar inga `/3/`-resurser. ## Begära scopes [#begära-scopes] Ange dem mellanslagsseparerade i `scope` vid [auktoriseringen](/api/autentisering). Du kan bara begära scopes som Klirr registrerat för din klient; annars skickas användaren tillbaka med `error=invalid_scope`. Saknar token det scope en resurs kräver svarar API:t `403`: ```json { "ErrorInformation": { "Error": 1, "Message": "Scope saknas för anropet: invoice", "Code": 9000403 } } ``` # Snabbstart (/api/snabbstart) > Från registrerad klient till ditt första anrop mot Klirrs API. Den här guiden tar dig till ett första lyckat anrop: en lista över organisationens kunder. Har du redan en registrerad klient tar det ett par minuter. Det finns inga API-nycklar och ingen självbetjäning för integrationer. Klirr registrerar varje klient och lämnar ut `client_id` och `client_secret`. Hemligheten visas en gång och lagras bara som hash hos Klirr. Kontakta Klirr på [support@klirr.ai](mailto:support@klirr.ai) och ange integrationens namn, din redirect-URI och vilka [scopes](/api/scopes) du behöver. Du behöver också en Klirr-användare i en organisation med . ### Skicka användaren till godkännandet [#skicka-användaren-till-godkännandet] Öppna den här URL:en i webbläsaren. Byt ut värdena inom `<>`: ```text https://app.klirr.ai/api/v1/oauth-v1/auth?response_type=code&client_id=&redirect_uri=&scope=customer&state= ``` Användaren loggar in, väljer organisation och godkänner. Klirr skickar sedan webbläsaren till din redirect-URI med `?code=...&state=...`. Koden gäller i 10 minuter. ### Växla koden mot tokens [#växla-koden-mot-tokens] ```bash curl -X POST https://app.klirr.ai/api/v1/oauth-v1/token \ -u ":" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d grant_type=authorization_code \ -d code= \ --data-urlencode redirect_uri= ``` ```ts const res = await fetch('https://app.klirr.ai/api/v1/oauth-v1/token', { method: 'POST', headers: { Authorization: 'Basic ' + btoa(':'), 'Content-Type': 'application/x-www-form-urlencoded', }, body: new URLSearchParams({ grant_type: 'authorization_code', code: '', redirect_uri: '', }), }); const tokens = await res.json(); ``` ```json { "access_token": "", "refresh_token": "", "token_type": "Bearer", "expires_in": 3600, "scope": "customer" } ``` ### Gör ditt första anrop [#gör-ditt-första-anrop] ```bash curl https://app.klirr.ai/api/v1/3/customers \ -H "Authorization: Bearer " ``` ```ts const res = await fetch('https://app.klirr.ai/api/v1/3/customers', { headers: { Authorization: 'Bearer ' }, }); const { Customers, MetaInformation } = await res.json(); ``` ```json { "Customers": [ { "@url": "https://app.klirr.ai/api/v1/3/customers/1001", "Address1": "Storgatan 1", "Address2": "", "City": "Uppsala", "CustomerNumber": "1001", "Email": "faktura@bergstrombygg.se", "Name": "Bergström Bygg AB", "OrganisationNumber": "556000-0000", "Phone": "", "ZipCode": "753 20" } ], "MetaInformation": { "@TotalResources": 1, "@TotalPages": 1, "@CurrentPage": 1 } } ``` ## Nästa steg [#nästa-steg] - [Autentisering](/api/autentisering): förnyelse av tokens, PKCE och återkallning. - [Fortnox-kompatibilitet](/api/fortnox-kompatibilitet): kuvert, partiella uppdateringar och taltyper. - [Skapa och skicka en faktura](/api/guider/skapa-och-skicka-faktura). # Bank (/guide/bank-bokforing/bank) > Gå igenom banktransaktioner, se återkommande kostnader och koppla din bank via Tink. Appen **Bank** samlar företagskontots transaktioner. Här bokför du bankrader och ser vad som dras regelbundet. Appen har två flikar: **Transaktioner** och **Återkommande**. ## Transaktioner [#transaktioner] Överst finns filtren **Alla**, **Intäkter**, **Kostnader**, **Löner** och **Skatter**. Rader som Klirr redan har konterat visas som **Bokförd** eller **Autobokförd**. Rader som behöver dig samlas under **Förslag att granska**. ### Öppna en rad [#öppna-en-rad] Klicka på transaktionen. Vyn **Granska transaktion** visar Klirrs förslag på konto. Under **Varför föreslog Klirr detta?** ser du skälet. ### Kontrollera och bokför [#kontrollera-och-bokför] Byt konto om det behövs och klicka på **Godkänn och bokför**. Du får beskedet "Transaktionen är bokförd". Har du bokfört fel använder du **Ångra bokföring**. Transaktionen hamnar då i granskningen igen. ### Väntar på kvitto [#väntar-på-kvitto] En kostnad utan underlag märks **Väntar på kvitto**. Välj **Ladda upp kvitto** för att bifoga kvittot direkt på raden. ## Återkommande [#återkommande] Fliken **Återkommande** listar **Återkommande kostnader** som Klirr har hittat i bankraderna, till exempel prenumerationer. Under **Kommande 30 dagar** visas varje dragning som väntas, med datum och belopp. Öppna en kostnad för att se **Betalningshistorik** och **Totalt betalt**. Klirr markerar också när **Priset har höjts** eller **Priset har sänkts**. Bevakningen av prenumerationer ## Koppla banken med Tink [#koppla-banken-med-tink] Med en bankkoppling hämtas transaktionerna automatiskt. Kopplingen går via Tink (ägt av Visa) enligt PSD2. Klirr lagrar aldrig dina inloggningsuppgifter till banken. ### Öppna bankkopplingen [#öppna-bankkopplingen] Gå till . ### Koppla bank [#koppla-bank] Klicka på **Koppla bank** och logga in hos din bank i Tinks flöde. ### Kontrollera kopplingen [#kontrollera-kopplingen] Banken visas under **Kopplade banker**. Om du ser "Automatisk bankimport är inte påslagen" är Tink-integrationen inte aktiverad för ditt företag än. Kontakta support, eller importera kontoutdrag som CSV under [Bankimport](/guide/bank-bokforing/bankimport). # Bankimport (/guide/bank-bokforing/bankimport) > Läs in ett kontoutdrag som CSV-fil från banken. Med **Bankimport** läser du in kontoutdrag när banken inte är kopplad. Appen tar emot **Kontoutdrag som CSV, högst 10 MB**. ### Välj fil [#välj-fil] Välj **Bankkonto** och dra filen till ytan **Välj en fil eller dra hit den**. ### Kolumner [#kolumner] Under **Mappa kolumner** anger du vilka kolumner som är **Datum**, **Belopp** och **Beskrivning**. De tre är obligatoriska. **Saldo** kan du också välja. ### Förhandsgranska [#förhandsgranska] Kontrollera de första raderna i förhandsvisningen. Kryssa i **Låt AI kontera bankraderna** om Klirr ska föreslå konton. ### Importera [#importera] Klicka på **Importera**. När det är klart visas "Bankfilen har importerats." Filen listas sedan under **Importhistorik**. ## Vanliga fel [#vanliga-fel] - **"Filen är för stor. Max 10 MB."** Dela upp kontoutdraget i kortare perioder. - **"Ogiltigt filformat. Använd en CSV-fil från banken."** Exportera på nytt som CSV. - **SIE-filer tas inte emot.** En SIE-fil är en bokföring, inte ett kontoutdrag. Importera den under **Byte av bokföringssystem**, se [Systembyte med SIE4](/guide/bank-bokforing/systembyte-sie4). # Kontoplan och anläggningstillgångar (/guide/bank-bokforing/kontoplan-och-anlaggningstillgangar) > Kontoplan, anläggningstillgångar, periodiseringar och periodförfrågningar. Inställningarna för bokföringen finns under . ## Kontoplan [#kontoplan] Under ser du kontona grupperade som **Tillgångar**, **Skulder**, **Eget kapital**, **Intäkter** och **Kostnader**. - Saknas kontoplan väljer du **Lägg in BAS-kontoplanen**. - Med **Skapa konto** lägger du till ett eget konto. - Konton du inte använder kan du stänga av med **Inaktivera**. Med **Visa inaktiva** ser du dem igen. ## Anläggningstillgångar [#anläggningstillgångar] Under registrerar du inventarier och annat som skrivs av över flera år. ### Registrera inköp [#registrera-inköp] Klicka på **Registrera inköp**. Fyll i **Inköpspris** och välj **Avskrivningstid**, till exempel "Dator/elektronik (3 år)" eller "Fordon (5 år)". ### Bokför [#bokför] Välj **Registrera och bokför** om köpet ska bokföras nu. Är köpet **Redan bokfört** registrerar du bara tillgången. Avskrivningarna bokas varje månad i [Månadsavstämning](/guide/bank-bokforing/manadsavstamning). Säljer eller skrotar du en tillgång registrerar du avyttringen som **Såld**, **Skrotad**, **Stulen** eller **Donerad**. ## Periodiseringar [#periodiseringar] Under fördelar du en kostnad eller intäkt över flera månader. Klicka på **Ny periodisering** och sedan **Skapa periodisering**. Planerna sorteras som **Aktiva**, **Avslutade** och **Avbrutna**. Med **Avbryt plan** stoppar du en aktiv plan. ## Periodförfrågningar [#periodförfrågningar] En låst period låses upp genom en förfrågan. Under ser du **Väntande** förfrågningar och **Historik**. Den som har behörighet väljer **Lås upp** och kan skriva en kommentar. # Månadsavstämning (/guide/bank-bokforing/manadsavstamning) > Stäm av och lås en månad i en sammanhållen följd. **Månadsavstämning** kör avskrivningar, periodiseringar, momsberäkning och AI-granskning i en sammanhållen följd. Sedan låses månaden. ## Starta en avstämning [#starta-en-avstämning] Välj månad och klicka på **Stäm av {'{månad}'}**, till exempel "Stäm av september 2026". Tidigare körningar finns under **Tidigare avstämningar**. ## Stegen [#stegen] | Steg | Vad som händer | |---|---| | Förkontroll | Kontrollerar okategoriserade transaktioner och saknade kvitton | | Matchning | Matchar kvitton mot transaktioner automatiskt | | Avskrivningar | Bokar månadens avskrivningar för anläggningstillgångar | | Periodiseringar | Amorterar aktiva periodiseringsplaner | | AI-granskning | Analyserar avvikelser mot föregående period. Kräver AI Max, annars hoppas steget över | | Momsberäkning | Beräknar periodens momsutfall | | AGI-underlag | Sammanställer arbetsgivardeklarationsunderlag | | Periodlåsning | Låser perioden permanent | | KBR-kontroll | Kontrollerar kritisk kapitalbrist (aktiebolag) | | Klar | Månadsavstämningen är klar | ## När något behöver dig [#när-något-behöver-dig] Om ett steg visar **Väntar på dig** och kortet **Manuellt godkännande krävs**, läser du igenom det och godkänner innan körningen fortsätter. Periodlåsningen är permanent. Om du behöver ändra något i en låst månad skickar du en periodförfrågan. # Systembyte med SIE4 (/guide/bank-bokforing/systembyte-sie4) > Flytta bokföringen från ditt tidigare system med en SIE4-fil. Byter du från ett annat bokföringsprogram tar du med dig bokföringen som en SIE4-fil. Importen görs i onboardingen. Efteråt följer du den under . ## I onboardingen [#i-onboardingen] ### Ladda upp [#ladda-upp] Exportera en SIE4-fil från ditt tidigare system och ladda upp den. ### Kontoplan [#kontoplan] Klirr matchar filens konton mot kontoplanen. Konton som saknar motsvarighet i Klirr visas här. ### Balanser [#balanser] Kontrollera de ingående balanserna för tillgångar, skulder och eget kapital. Klirr visar **Balanserna stämmer.** när debet och kredit går jämnt ut. Steget hoppas över om filen saknar ingående balanser. ### Importera [#importera] Välj **Importera ingående balanser**. Sedan visar Klirr årets verifikationer i filen. Kontrollera att de **Stämmer mot filens saldon** och se **Momsmetod i filen**, och välj **Bokför** för att bokföra dem. Avbryts anslutningen fortsätter en påbörjad bokföring där den slutade. Om du ser "Filen går inte ihop" eller "Filen har verifikationer som inte går jämnt ut" behöver du exportera filen på nytt från ditt tidigare system. ## Efter importen [#efter-importen] Under **Importerad fil** ser du filen från ditt tidigare system och hur långt bokföringen av den har kommit: **Räkenskapsår**, **Verifikationer**, **Bokför i Klirr från** och **Låsta, redan momsredovisade månader**. Med **Ångra importen** tar du bort importen och kan börja om. SIE-filer går inte att läsa in i Bankimport, som bara tar emot kontoutdrag. # Verifikationer (/guide/bank-bokforing/verifikationer) > Skapa, rätta och flytta verifikationer, och håll ordning på underlagen. Verifikationer skapas automatiskt när du bokför fakturor, kvitton och transaktioner. I appen **Verifikationer** ser du alla, och här kan du också bokföra för hand. Filtrera listan på **Alla**, **Manuella**, **Fakturor**, **Kvitton**, **Bank**, **Lön** eller **Integrationer**, eller använd **Sök verifikation**. ## Ny verifikation [#ny-verifikation] ### Öppna formuläret [#öppna-formuläret] Klicka på **Ny verifikation**. Vill du utgå från en vanlig bokning väljer du **Börja från en mall** och **Använd mallen**. Mallen ersätter beskrivningen och raderna du har fyllt i. ### Fyll i Konteringsrader [#fyll-i-konteringsrader] Fyll i **Datum** och **Beskrivning**. Lägg sedan till rader under **Konteringsrader** med konto och belopp i **Debet** eller **Kredit**. Du behöver minst två rader, och en rad kan inte ha både debet och kredit. ### Bokför [#bokför] **Summa debet** och **Summa kredit** måste vara lika stora, annars visas **Differens**. Klicka på **Bokför**. ## Rättelse och omföring [#rättelse-och-omföring] Bokförda verifikationer kan inte raderas enligt BFL 5 kap. 5 §. Öppna verifikationen och välj i stället en av dessa: **Rättelse** skapar en rättelseverifikation som vänder den ursprungliga. Båda syns i grundbok och huvudbok. Fyll i **Motivering (minst 10 tecken)** och klicka på **Skapa rättelseverifikation**. Originalet märks **Rättad**. **Omföring** flyttar ett belopp mellan två konton. Välj **Från konto** och **Till konto**, ange belopp och svara på **Varför flyttas beloppet?**. Klicka sedan på **Skapa omföring**. Verifikationer i en **Låst period** går inte att ändra. Se [Kontoplan och anläggningstillgångar](/guide/bank-bokforing/kontoplan-och-anlaggningstillgangar#periodförfrågningar) för hur en period låses upp. ## Underlag [#underlag] Enligt bokföringslagen (5 kap. 6–7 §§) ska varje verifikation innehålla eller hänvisa till sitt underlag. Under **Underlag** i verifikationen kan du **Ladda upp** en fil. Om handlingen finns på papper skriver du var den förvaras, till exempel "Pärm 3 hos redovisningskonsulten", och klickar på **Spara hänvisning**. ## Saknade underlag [#saknade-underlag] Vyn **Saknade underlag** listar **Verifikationer som saknar underlag**. Gå igenom listan och bifoga eller hänvisa till underlag tills du ser "Alla verifikationer har sitt underlag". # Åtgärder och historik (/guide/birk/atgarder-och-historik) > Det Birk gör åt dig, vad du måste godkänna och vad Birk kommer ihåg. ## Åtgärder som kräver godkännande [#åtgärder-som-kräver-godkännande] Birk ändrar aldrig något som påverkar kunder eller bokföring utan att du först godkänner det. Birk förbereder åtgärden och visar ett kort i panelen. Först när du bekräftar genomförs den. | Åtgärd | Vad du godkänner | |---|---| | Betalningspåminnelse | Kortet **Skicka påminnelse?** visar påminnelsen. Välj **Skicka påminnelse** för att skicka den. | | Fordran på delägare | Hur privata köp på företagets kort ska regleras, till exempel genom löneavdrag. | | Privata kvittorader | Ditt svar på vad ett köp som ser privat ut gällde. | | Ångra avyttring | Att ångra en avyttring av en inventarie som registrerats fel. | Assistenter utanför Klirr, till exempel Claude via MCP, föreslår åtgärder som du godkänner under . Se [Godkännanden](/mcp/godkannanden). ## Birks historik [#birks-historik] Här ser du vad Birk har gjort åt dig och vad Birk kommer ihåg. Öppna och välj **Visa historik**. ### Åtgärder [#åtgärder] En lista över allt Birk har gjort, till exempel **Skickade en fakturapåminnelse**, **Planerade en uppgift** eller **Öppnade en app åt dig**, med tid och vem det gjordes för. ### Minnen [#minnen] Birk kommer ihåg dina rättelser och önskemål mellan konversationer, så att du slipper förklara samma sak två gånger. Varje minne har en typ, till exempel **Önskemål**, **Rättelse**, **Projekt**, **Om en leverantör** eller **Från redovisningskonsulten**, och en livslängd: **Minns en kort tid**, **Minns länge** eller **Minns alltid**. Du kan radera ett minne du inte vill att Birk ska ha kvar. ## Birks bokföring [#birks-bokföring] Birk kategoriserar också banktransaktioner och matchar kvitton åt dig. Sidan **Birks bokföring** visar varje sådan åtgärd med säkerhet och anledning, till exempel **Kategoriserade transaktion** eller **Matchade kvitto**. Det du återställer lär sig Birk av. Öppna och välj **Visa bokföring**. Från sidan når du också **Hur ofta Birk har rätt** och **Uppgifter som misslyckades**. # Birk (/guide/birk) > AI-rådgivaren i Klirr som svarar på frågor om din ekonomi och hjälper dig med bokföringen. Birk är Klirrs AI-rådgivare. Birk läser din bokföring och svarar på frågor om fakturor, moms, kassaflöde och mycket mer. Svaren visas ofta som kort med siffror och länkar till rätt app. ## Öppna Birk [#öppna-birk] - Klicka på **Fråga Birk** i hörnet av skrivbordet. I mobilen ligger knappen i toppfältet. - Tryck . - Skriv en fråga i Spotlight () och välj **Fråga Birk: "…"**. Birk fortsätter arbeta när du stänger panelen. Knappen visar **Birk arbetar på ditt svar** och sedan **Birk har svarat – öppna för att läsa**. ## Vad Birk kan [#vad-birk-kan] | Område | Exempel | |---|---| | Sök | Fakturor, kunder, kvitton, banktransaktioner och inventarier | | Rapporter | Resultaträkning, balansräkning och momsrapport för en period | | Prognoser | Kassaflödesprognos och när kunderna troligen betalar | | Kunder | Kundhälsa och fakturahistorik | | Skatt | Om du behöver lämna ny preliminär inkomstdeklaration | | Budget | Budget mot utfall per kategori | | Navigering | Öppnar rätt app och vy åt dig | Vissa svar kräver en högre plan, till exempel branschjämförelsen . ## Exempel på frågor [#exempel-på-frågor] Birk föreslår frågor när panelen är tom, till exempel: - Hur mycket moms ska jag betala? - Sammanfatta månadens ekonomi - Vilka fakturor är försenade? Fler exempel: - Vad är resultatet hittills i år? - Vilka kunder betalar sent? - Hur ser kassaflödet ut de närmaste veckorna? - Visa kvitton från förra månaden som inte är bokförda. ## Konversationer [#konversationer] Välj **Ny konversation** för att börja om. Tidigare konversationer finns kvar i panelen. Antalet frågor per timme beror på planen: | Plan | Meddelanden per timme | Sparade konversationer | |---|---|---| | AI | 50 | 5 | | AI Pro | 150 | Obegränsat | | AI Max | 300 | Obegränsat | | Unlimited | 500 | Obegränsat | Birk är ett stöd, inte en ersättning för en redovisningskonsult. Kontrollera alltid siffror innan du lämnar in en deklaration. # Artiklar (/guide/forsaljning/artiklar) > Spara varor och tjänster du säljer ofta. I sparar du det du säljer ofta, så att du slipper skriva in samma rad på varje faktura. ## Skapa en artikel [#skapa-en-artikel] ### Öppna formuläret [#öppna-formuläret] Välj . ### Fyll i fälten [#fyll-i-fälten] | Fält | Innehåll | |---|---| | Beskrivning | Texten som visas på fakturan | | Artikelnummer | Ditt eget nummer för artikeln | | Typ | Vara eller tjänst | | Försäljningspris | Pris exkl. moms | | Inköpspris | Vad artikeln kostar dig | | Enhet | Till exempel st eller tim | | Moms | Momssats | ### Spara [#spara] Artikeln går nu att välja på fakturarader. ## Hitta artiklar [#hitta-artiklar] Sök på artikelnummer, beskrivning eller EAN. Filtrera listan med **Aktiva**, **Tjänster**, **Varor**, **Inaktiva** eller **Alla**. Markera en artikel som **Inaktiv** om du inte längre säljer den. Den finns kvar på gamla fakturor men föreslås inte på nya. # Fakturor (/guide/forsaljning/fakturor) > Skapa, skicka och följ upp fakturor, och rätta dem med kreditnotor. Fakturor skapar du i . Du kan skapa obegränsat antal fakturor på alla planer. ## Innan du börjar [#innan-du-börjar] En faktura måste visa säljarens adress. Saknar företaget adress visar formuläret varningen **Företaget saknar adress**. Välj **Öppna inställningar** och fyll i adressen under . ## Skapa en faktura [#skapa-en-faktura] ### Öppna formuläret [#öppna-formuläret] Välj , eller tryck var som helst i Klirr. ### Fyll i kund och datum [#fyll-i-kund-och-datum] Välj **Kund**, **Fakturadatum** och **Förfallodatum**. Under **Momshantering** och **Valuta** ändrar du momsregel och valuta om kunden finns utomlands. ### Lägg till rader [#lägg-till-rader] Fyll i **Beskrivning**, **Antal**, **À-pris exkl. moms**, **Enhet** och **Moms** för varje rad. Välj **Lägg till rad** för fler. Knappen **AI-prisförslag** på en rad föreslår ett pris. ### Spara [#spara] Välj **Spara utkast**. Fakturan får sitt nummer först när du skickar den. ## Skicka fakturan [#skicka-fakturan] ### Välj Skicka faktura [#välj-skicka-faktura] Öppna utkastet och välj **Skicka faktura**. ### Granska [#granska] Dialogen **Granska och skicka** visar fakturan som kunden ser den. Kontrollera förhandsvisningen. ### Bokför och skicka [#bokför-och-skicka] Välj **Bokför och skicka**. Fakturan bokförs, får sitt fakturanummer och mejlas till kunden. En bokförd faktura kan inte ändras. Fel rättar du med en kreditnota. Vill du skicka fakturan på annat sätt, till exempel som PDF i ditt eget mejl, välj **Fler åtgärder** och **Markera som skickad utan e-post**. ## Registrera betalning [#registrera-betalning] När kunden har betalat väljer du **Markera betald**. I dialogen **Registrera betalning** anger du datum och belopp och väljer **Bekräfta betalning**. Om kunden har betalat en del heter knappen **Registrera delbetalning**. Med bankkoppling eller bankimport kan Klirr föreslå vilken bankrad som betalar fakturan. Se avsnittet Bank och bokföring. ## Påminnelser [#påminnelser] Är fakturan förfallen visas **Skicka påminnelse** i fakturan. Manuella påminnelser fungerar på alla planer. Automatiska påminnelser, före och efter förfallodagen, kräver . ## Fler åtgärder [#fler-åtgärder] Under **Fler åtgärder** i en faktura finns bland annat: - **Ladda ner PDF** (för ett utkast: **Förhandsgranska PDF**) - **Kopiera faktura**: skapar en ny faktura med samma innehåll - **Skapa kreditnota** - **Skriv ned som befarad kundförlust** ## Kreditnotor [#kreditnotor] ### Skapa kreditnotan [#skapa-kreditnotan] Öppna den bokförda fakturan och välj . ### Välj rader [#välj-rader] Under **Kreditnotarader** väljer du vad som ska krediteras. Du kan kreditera hela fakturan eller delar av den. ### Bokför [#bokför] Välj **Bokför kreditnota**. ## Återkommande fakturor [#återkommande-fakturor] Slå på **Gör återkommande** längst ner i formuläret och välj **Intervall**. En ny faktura skapas och skickas automatiskt vid valt intervall. Alla återkommande fakturor ser du under . ## Swish-QR [#swish-qr] Swish-QR på fakturan kräver . # Kunder (/guide/forsaljning/kunder) > Lägg upp kunder och se hur de betalar. Kundregistret finns i . ## Lägg till en kund [#lägg-till-en-kund] ### Öppna formuläret [#öppna-formuläret] Välj . Du kan också välja **Ny kund** i Spotlight. ### Välj typ av kund [#välj-typ-av-kund] Välj **Företag** eller **Privatperson**. För ett företag anger du **Organisationsnummer** och väljer **Hämta uppgifter**. Klirr hämtar namn och adress från Bolagsverket. Saknas företaget där väljer du **Fyll i manuellt**. För en privatperson anger du personnumret, som behövs för ROT- och RUT-avdrag, eller väljer **Hoppa över**. ### Fyll i uppgifterna [#fyll-i-uppgifterna] Kontrollera namn och organisationsnummer och ange e-postadress. E-postadressen behövs för att skicka fakturor och offerter. ### Spara [#spara] Kunden finns nu att välja när du skapar fakturor och offerter. ## Kundens sida [#kundens-sida] Öppna en kund för att se kontaktuppgifter, fakturahistorik och vad kunden är skyldig. Välj **Skapa faktura** för att öppna ett fakturaformulär med kunden ifylld. ## Kundhälsa [#kundhälsa] ger varje kund en poäng mellan 0 och 100, baserad på hur pålitligt kunden betalar, hur mycket kunden bidrar med och hur aktiv kunden är. # Kvitton (/guide/forsaljning/kvitton) > Skanna, fota eller mejla in kvitton och bokför dem. I laddar du upp kvitton. AI läser av leverantör, belopp och moms, och du bokför med ett klick. ## Hur många kvitton [#hur-många-kvitton] På Gratisplanen läser AI av 3 kvitton i månaden. Från är det obegränsat. ## Skanna ett kvitto [#skanna-ett-kvitto] ### Ladda upp [#ladda-upp] Välj , eller tryck . Välj en fil i formatet JPEG, PNG, HEIC eller PDF. ### Vänta på avläsningen [#vänta-på-avläsningen] Klirr visar "AI läser av leverantör, belopp och moms…". När avläsningen är klar står det **Kvittot är läst**. ### Bokför [#bokför] Välj **Bokför direkt** om allt stämmer. Välj **Granska och bokför** om du vill kontrollera det AI:n markerat innan du bokför. När kvittot är bokfört skapas en verifikation. ## Fota med mobilen [#fota-med-mobilen] I mobilen väljer du **Fota kvitto** för att ta en bild direkt med kameran. ## Många kvitton på en gång [#många-kvitton-på-en-gång] Välj **Skanna flera** för att ladda upp flera kvitton samtidigt. ## Mejla in kvitton [#mejla-in-kvitton] Varje företag har en egen e-postadress för kvitton: `{företagets-id}@kvitton.klirr.ai`. Vidarebefordra kvitton och inköpsmejl dit. Bilagor som PDF eller bild läses av, och även kvitton i själva mejlet, till exempel orderbekräftelser. Din adress hittar du under . Där kan du också begränsa vilka avsändare som får skicka till adressen. Se [Integrationer](/guide/installningar/integrationer). # Leverantörer och leverantörsfakturor (/guide/forsaljning/leverantorer-och-leverantorsfakturor) > Registrera fakturor du får, bokför dem och markera dem betalda. Leverantörer finns i och fakturorna från dem i . ## Lägg till en leverantör [#lägg-till-en-leverantör] Välj och fyll i uppgifterna. ## Registrera en leverantörsfaktura [#registrera-en-leverantörsfaktura] ### Ladda upp fakturan [#ladda-upp-fakturan] Välj . Släpp en PDF eller fota fakturan. Klirr läser av leverantör, datum och rader åt dig. ### Kontrollera [#kontrollera] Kontrollera leverantör, belopp och **Fakturarader**. Fakturan är ett utkast tills du registrerar den. ### Registrera och bokför [#registrera-och-bokför] Välj **Registrera och bokför**. Fakturan bokförs som leverantörsskuld. Verifikationen går inte att ta bort efteråt. En felaktig faktura rättas genom makulering. ## Markera som betald [#markera-som-betald] - Välj **Registrera betalning** och ange datum och belopp. - Om Klirr hittar en bankrad som matchar fakturan visas den som förslag. Välj **Koppla och markera betald**, eller **Inte den här** om förslaget är fel. ## Status [#status] I listan filtrerar du på **Alla**, **Utkast**, **Registrerade**, **Betalda** och **Förfallna**. ## Mejla in leverantörsfakturor [#mejla-in-leverantörsfakturor] Varje företag har en egen adress för leverantörsfakturor: `{företagets-id}@fakturor.klirr.ai`. Den finns under . Adressen kräver AI-planen eller högre. På Gratis tas mejlen inte emot, och avsändaren får ett svar om det. ## Autopilot [#autopilot] En inläst faktura med känd leverantör och säker kontering bokförs utan att du behöver klicka. En utgående bankrad som betalar en bokförd faktura markerar den betald. Leverantörsanalys kräver . # Offerter (/guide/forsaljning/offerter) > Skicka offerter som kunden accepterar på webben, och fakturera dem helt eller i delar. Offerter skapar du i . Kunden får en länk och svarar direkt på webben. ## Hur många offerter [#hur-många-offerter] | Plan | Offerter per månad | |---|---| | Gratis | 3 | | AI | 20 | | AI Pro och högre | Obegränsat | ## Skapa och skicka en offert [#skapa-och-skicka-en-offert] ### Skapa offerten [#skapa-offerten] Välj och fyll i kund, rader och **Giltig till**. ### Skicka [#skicka] Öppna offerten och välj **Skicka offert**. Kunden måste ha en e-postadress. ### Vänta på svar [#vänta-på-svar] Kunden öppnar länken i mejlet. Offertens status ändras när kunden svarar. ## Kundens sida [#kundens-sida] Kunden ser offerten på en egen webbsida utan att logga in. Där kan kunden välja **Acceptera offerten** eller **Avvisa**. Med kan kunden också välja **Signera med BankID (extra trygghet)**. Svarar kunden på annat sätt, till exempel i telefon, kan du själv välja **Markera som accepterad** eller **Markera som avböjd** i offerten. ## Fakturera offerten [#fakturera-offerten] - **Skapa faktura**: hela offerten blir en faktura som bokförs direkt. - **Skapa delfakturor**: dela upp offerten i flera fakturor, antingen som **Milstolpar** med procent och förfallodatum, eller som en **À conto-plan**. Den sista delen blir en slutfaktura. Delfakturering kräver . ## Kopiera en offert [#kopiera-en-offert] Välj **Kopiera offert** för att skapa en ny offert med samma innehåll. Det är så du återanvänder en avböjd offert, eftersom en avböjd offert inte går att öppna igen. # Användarguide (/guide) > Så använder du Klirr för fakturering, kvitton, bokföring, lön och skatt. Klirr är ett bokföringsprogram för enskilda firmor och aktiebolag. Allt finns i ett skrivbord i webbläsaren, där varje funktion är en app som öppnas i ett eget fönster. ## Var börjar jag? [#var-börjar-jag] | Om du vill | Läs | |---|---| | Skapa konto och logga in | [Konto och inloggning](/guide/kom-igang/konto-och-inloggning) | | Komma igång med ett nytt företag | [Onboarding](/guide/kom-igang/onboarding) | | Hitta runt bland fönster, Spotlight och kortkommandon | [Skrivbordet](/guide/kom-igang/skrivbordet) | | Skicka din första faktura | [Fakturor](/guide/forsaljning/fakturor) | | Bokföra ett kvitto | [Kvitton](/guide/forsaljning/kvitton) | | Ställa frågor om din ekonomi | [Birk](/guide/birk) | | Se vad som ingår i din plan | [Planer och priser](/guide/planer) | ## Avsnitt [#avsnitt] - **Kom igång**: konto, onboarding, skrivbordet och Översikten. - **Försäljning och inköp**: fakturor, offerter, kunder, artiklar, kvitton och leverantörsfakturor. - **Bank och bokföring**: banktransaktioner, bankimport, verifikationer och månadsavstämning. - **Lön**: lönekörning, anställda, frånvaro och medarbetarportalen. - **Skatter**: moms, arbetsgivardeklaration, inkomstdeklaration och skattekontot. - **Rapporter**: bokslut, årsredovisning och löpande rapporter. - **Planering**: kassaflöde, budget, scenarier och lönsamhet. - **Tid och körjournal**: tidrapportering och resor i tjänsten. - **Birk**: AI-rådgivaren som svarar på frågor och gör saker åt dig. - **Inställningar**: konto, företag, bokföring och integrationer. ## Så läser du guiden [#så-läser-du-guiden] - visar var något finns: först appen, sedan knappen eller vyn. - betyder att funktionen kräver minst den planen. - betyder att funktionen bara finns för den bolagsformen. - Kortkommandon skrivs som . På Mac motsvarar Ctrl tangenten ⌘. # Bokföring (/guide/installningar/bokforing) > Kontoplan, inventarier, periodiseringar, systembyte, utgiftsregler, lån och tid. ## Kontoplan [#kontoplan] : företagets bokföringskonton. ## Inventarier & utrustning [#inventarier--utrustning] : anläggningstillgångar och deras avskrivningar. ## Periodiseringar [#periodiseringar] : fördela intäkter och kostnader på rätt månader, till exempel förutbetalda och upplupna poster. ## Periodförfrågningar [#periodförfrågningar] : hantera förfrågningar om att låsa upp en stängd period. ## Byte av bokföringssystem [#byte-av-bokföringssystem] : importera årets bokföring från ditt tidigare program med en SIE4-fil. ## Utgiftsregler [#utgiftsregler] : regler som AI använder för att granska anställdas utlägg. ## Lån [#lån] : DSCR-bevakning och bankkovenanter. ## Tid [#tid] : schemalagd fakturering av registrerad tid. # Företaget (/guide/installningar/foretaget) > Företagsinformation, team, prenumeration och fakturamall. ## Företagsinformation [#företagsinformation] : namn, adress, organisationsnummer och betalningsuppgifter. Adressen måste vara ifylld för att du ska kunna skapa fakturor. ## Team [#team] : medlemmar och roller. ### Bjud in [#bjud-in] Välj **Bjud in**. I dialogen **Bjud in till teamet** anger du e-postadress och roll. ### Skicka [#skicka] Välj **Skicka inbjudan**. Personen får ett mejl med en länk. Se [Gå med i ett företag](/guide/kom-igang/konto-och-inloggning#gå-med-i-ett-företag). Hur många användare ni kan vara beror på planen. Utöver det får varje företag alltid ha en redovisningskonsult. Se [Planer och priser](/guide/planer). En användare kan kopplas till en anställd med **Koppla till anställd**. Då får användaren tillgång till sina utlägg och lönespecifikationer. ## Prenumeration [#prenumeration] : din plan och betalning. - **Uppgradera till** och planens namn byter till en högre plan. - **Byt plan** byter till en annan plan. - **Avsluta prenumeration** avslutar den betalda planen. ## Fakturamall [#fakturamall] : logotyp, accentfärg och mall för dina fakturor. | Funktion | Plan | |---|---| | Logotyp, accentfärg, ta bort Klirr-sidfoten | Alla planer | | Mallen Minimal, eget typsnitt, egen sidfotstext | | # Inställningar (/guide/installningar) > Översikt över alla inställningar i Klirr. Alla inställningar finns i appen . Sidomenyn är indelad i grupper. ## Grupperna i sidomenyn [#grupperna-i-sidomenyn] | Grupp | Innehåll | Läs mer | |---|---|---| | Konto | Profil, Inloggningsmetoder, Integritet | [Konto](/guide/installningar/konto) | | Mitt företag | Företagsinformation, Team, Prenumeration, Fakturamall | [Företaget](/guide/installningar/foretaget) | | Bokföring | Kontoplan, Inventarier & utrustning, Periodiseringar, Periodförfrågningar, Byte av bokföringssystem, Utgiftsregler | [Bokföring](/guide/installningar/bokforing) | | Finansiering | Lån | [Bokföring](/guide/installningar/bokforing#lån) | | Appar | Tid | [Bokföring](/guide/installningar/bokforing#tid) | | Integrationer | Bankkoppling, E-faktura (Peppol), E-postmottagning, Anslutna appar, AI-förslag, Automatisk bokföring | [Integrationer](/guide/installningar/integrationer) | | Avancerat | Ändringslogg | [Integrationer](/guide/installningar/integrationer#ändringslogg) | ## Behörighet [#behörighet] Vilka inställningar du kan ändra beror på din roll. Se [Roller](/guide/kom-igang/konto-och-inloggning#roller). # Integrationer (/guide/installningar/integrationer) > Bankkoppling, e-postmottagning, anslutna appar, AI-förslag och automatisk bokföring. ## Bankkoppling [#bankkoppling] : koppla ditt bankkonto så importeras transaktionerna automatiskt. Kopplingen går via Tink. Välj **Koppla bank** för att börja, och **Koppla bort** för att ta bort kopplingen. ## E-faktura (Peppol) [#e-faktura-peppol] Kommer snart. ## E-postmottagning [#e-postmottagning] : företagets egna e-postadresser. | Adress | Används till | |---|---| | `{företagets-id}@kvitton.klirr.ai` | Kvitton och inköpsmejl | | `{företagets-id}@fakturor.klirr.ai` | Leverantörsfakturor | Mejl som skickas hit läses av automatiskt och dyker upp i Klirr. Under **Tillåtna avsändare** begränsar du vilka som får skicka till adresserna. Lämna listan tom för att ta emot från alla. ## Anslutna appar [#anslutna-appar] : externa system som har åtkomst till din data, till exempel en AI-assistent som Claude. Här ser du vilka som är anslutna och kan koppla bort dem. Se [MCP](/mcp) och [API](/api). ## AI-förslag [#ai-förslag] : godkänn eller avvisa det en extern AI-assistent föreslår. Se [Godkännanden](/mcp/godkannanden). ## Automatisk bokföring [#automatisk-bokföring] : externa system som Klirr hämtar från och bokför automatiskt, till exempel Stripe. Stripe-kopplingen kräver . ## Ändringslogg [#ändringslogg] : spåra alla ändringar i företaget, vem som gjorde dem och när. # Konto (/guide/installningar/konto) > Profil, inloggningsmetoder och integritet. Inställningarna under **Konto** gäller dig som person, inte företaget. ## Profil [#profil] : namn, e-postadress och telefon. ## Inloggningsmetoder [#inloggningsmetoder] : koppla BankID, Google, Apple och Microsoft till ditt konto. - Välj **Koppla** vid en metod för att lägga till den. - Välj **Koppla bort** för att ta bort den. Du måste alltid ha minst en metod kvar. Koppla en till innan du kopplar bort den sista. Koppla gärna flera metoder, så kommer du in även om en slutar fungera. ## Integritet [#integritet] : ändra ditt samtycke till cookies och användningsanalys. Här finns också **Birks minne och historik**, där du ser vad Birk har gjort och kommer ihåg. Se [Åtgärder och historik](/guide/birk/atgarder-och-historik). # Konto och inloggning (/guide/kom-igang/konto-och-inloggning) > Skapa konto, logga in och gå med i ett företag du blivit inbjuden till. Klirr har inga lösenord. Du loggar in med BankID, Google, Apple eller Microsoft. ## Skapa konto [#skapa-konto] ### Välj inloggningsmetod [#välj-inloggningsmetod] Gå till registreringssidan och välj **Registrera med BankID**, **Registrera med Google** eller **Registrera med Apple**. För Microsoft heter knappen **Logga in med Microsoft** även här. ### Bekräfta e-postadressen (BankID) [#bekräfta-e-postadressen-bankid] Registrerar du dig med BankID får du ange en e-postadress och bekräfta den med en engångskod. E-postadressen används för kontakt, inte för inloggning. ### Fortsätt till onboardingen [#fortsätt-till-onboardingen] När kontot är skapat kommer du till [onboardingen](/guide/kom-igang/onboarding), där du lägger upp ditt företag. ## Logga in [#logga-in] Välj **Logga in med BankID**, **Fortsätt med Google**, **Fortsätt med Apple** eller **Logga in med Microsoft**. Inloggning skapar aldrig ett nytt konto. Om ditt Google-, Apple- eller Microsoftkonto inte är kopplat till Klirr får du meddelandet "Det finns inget Klirr-konto för det kontot." Logga då in med en annan metod eller skapa ett konto. Koppla gärna flera inloggningsmetoder till ditt konto, så kommer du in även om en slutar fungera. Det gör du under . ## Gå med i ett företag [#gå-med-i-ett-företag] Om någon bjuder in dig får du en länk via e-post. ### Öppna inbjudan [#öppna-inbjudan] Länken visar företagets namn, din roll och vem som bjöd in dig. ### Logga in eller skapa konto [#logga-in-eller-skapa-konto] Är du inte inloggad väljer du **Skapa konto** eller **Logga in**. Inbjudan följer med. ### Acceptera [#acceptera] Välj **Acceptera inbjudan**. Du kommer direkt till företagets skrivbord. Om företaget redan har så många användare som planen tillåter får du ett felmeddelande. Ägaren behöver då uppgradera planen. Se [Planer och priser](/guide/planer). ## Roller [#roller] Varje medlem i ett företag har en roll. | Roll | Behörighet | |---|---| | Ägare | Full tillgång, kan ta bort organisationen. | | Admin | Kan hantera det mesta utom organisation och roller. | | Medlem | Kan skapa och redigera fakturor, kunder och transaktioner. | | Redovisningskonsult | Kan hantera bokföringen fullt ut och godkänna frånvaro. Läsbehörighet för lön och övrigt. | | Läsare | Endast läsbehörighet. | Du bjuder in och ändrar roller under . Se [Företaget](/guide/installningar/foretaget). # Onboarding (/guide/kom-igang/onboarding) > Lägg upp ditt företag och gör de första sakerna i Klirr. Efter att du skapat konto guidar Klirr dig genom att lägga upp företaget. De flesta steg kan du hoppa över och göra senare. ## Stegen [#stegen] ### Berätta om ditt företag [#berätta-om-ditt-företag] Ange namn och företagsform. Fyller du i organisationsnumret hämtar Klirr adress och övriga uppgifter från Bolagsverket. Företaget skapas i det här steget. ### Vad vill du ha hjälp med? [#vad-vill-du-ha-hjälp-med] Välj ett eller flera alternativ: **Fakturera kunder**, **Kvitton & utlägg**, **Moms & deklaration**, **Lön**, **Flytta från annat program** eller **Förstå min ekonomi**. Dina val styr ordningen på stegen som följer och vilken app som öppnas när du är klar. ### Det här tar Klirr hand om [#det-här-tar-klirr-hand-om] En sammanställning av vad din företagsform behöver lämna in, till exempel momsdeklaration, NE-bilaga eller årsredovisning, och vilken plan varje del kräver. ### Importera bokföring (om du byter program) [#importera-bokföring-om-du-byter-program] Visas bara om du valde **Flytta från annat program**. Här laddar du upp en SIE4-fil från ditt gamla program. ### Bank, kund, faktura och kvitto [#bank-kund-faktura-och-kvitto] Fyra steg som du kan hoppa över: - **Bankinformation**: kontouppgifterna som visas på dina fakturor. - **Lägg till din första kund**. - **Skapa din första faktura**: fakturan sparas som utkast. Ingenting skickas. - **Testa kvittoskannern**: ladda upp ett kvitto och se hur AI läser av det. ### Välj vad som passar dig bäst [#välj-vad-som-passar-dig-bäst] Klirr rekommenderar en plan utifrån dina svar, men Gratis är förvald. Väljer du en betald plan betalar du när du avslutar onboardingen. ### Nu är du igång! [#nu-är-du-igång] Välj **Öppna Klirr**. Har du valt en betald plan heter knappen **Gå till betalning för** och planens namn. ## Kom igång-listan [#kom-igång-listan] Det du hoppade över hamnar i listan **Kom igång med Klirr** på skrivbordet. Listan ligger kvar tills du är klar eller väljer **Dölj Kom igång**. # Översikten (/guide/kom-igang/oversikten) > Startpunkten i Klirr, med flikarna Idag, Att göra, Pengar och Hälsa. är det första du ser när du loggar in. Den har fyra flikar som var och en svarar på en fråga. ## Idag [#idag] Behöver du göra något, och hur går det? Här finns brådskande uppgifter, **Klirr Score**, **Snabbåtgärder**, kommande datum och vad som hänt sedan du var inne senast. Idag är förvald när du öppnar Översikten. ## Att göra [#att-göra] Vad exakt ska du göra, och vad är på väg? Fliken listar dina uppgifter, kommande datum som deklarationer och förfallodagar, samt **Kom igång**-stegen om du inte är klar med dem. ## Pengar [#pengar] Vart går pengarna? Grafer över intäkter, kostnader och saldo, samt kortet **Skatt och planering**. ## Hälsa [#hälsa] Är bokföringen i ordning? Fliken visar din Klirr Score, hur poängen har utvecklats och **Det här höjer poängen mest**: konkreta saker du kan åtgärda. På Gratisplanen visar fliken **Lås upp Klirr Score** i stället. # Skrivbordet (/guide/kom-igang/skrivbordet) > Dockan, fönster, Spotlight, kortkommandon och Klirr i mobilen. Klirr fungerar som ett skrivbord i webbläsaren. Varje funktion är en app, och apparna öppnas i fönster som du kan flytta, lägga sida vid sida eller minimera. ## Dockan [#dockan] Dockan längst ner visar dina fästa appar och de appar som är öppna. - **Alla appar** öppnar en översikt över alla appar, grupperade i kategorierna Dagligt, Handel och Ekonomi. - Högerklicka på en app i dockan och välj **Fäst i appfältet** för att den alltid ska ligga kvar. Välj **Lossa från appfältet** för att ta bort den. ## Fönster [#fönster] I fönstrets namnlist finns knappar för att fästa appen, välja fönsterlayout, **Minimera** och **Stäng**. Dubbelklicka på namnlisten för att visa fönstret i helskärm. ## Spotlight [#spotlight] Spotlight är sökrutan för hela Klirr. Öppna den med ( på Mac) eller genom att klicka på sökfältet **Sök, agera eller fråga Birk…**. I Spotlight kan du: - **Söka** efter appar, kunder, fakturor, offerter, leverantörer och verifikationer. - **Agera** direkt med **Skapa ny faktura**, **Ladda upp kvitto** eller **Ny kund**. - **Fråga Birk**: skriv en fråga och välj raden **Fråga Birk: "…"**. Se [Birk](/guide/birk). ## Kortkommandon [#kortkommandon] | Genväg | Gör | |---|---| | | Öppna Spotlight | | | Öppna Birk | | | Ny faktura | | | Ladda upp kvitto | | | Stäng aktivt fönster | | | Lägg aktivt fönster på vänster halva | | | Lägg aktivt fönster på höger halva | | | Visa aktivt fönster i helskärm | | | Växla fönster | | | Visa kortkommandon | På Mac används ⌘ i stället för Ctrl och ⌥ i stället för Alt. Hela listan, inklusive genvägar i Verifikationer, hittar du också under **Kortkommandon** i profilmenyn. ## Klirr i mobilen [#klirr-i-mobilen] I mobilen visas en app i taget. Längst ner finns en flikrad med **Översikt**, **Fakturor**, **Kvitton**, **Skapa ny** och **Mer**. - **Skapa ny** öppnar en lista över saker du kan skapa, till exempel en faktura eller ett kvitto. - **Mer** samlar sökfältet, alla appar, aviseringar, support och ditt konto. # Anställda (/guide/lon/anstallda) > Lägg till anställda och håll uppgifterna aktuella. Appen **Löner** har rutor för **Anställda**, **Frånvaro**, **Semestersaldo**, **Anställningskostnad** och **AGI**. Under **Anställda** finns personalregistret. ## Lägg till en anställd [#lägg-till-en-anställd] ### Öppna formuläret [#öppna-formuläret] Gå till och klicka på **Lägg till anställd**. ### Personuppgifter [#personuppgifter] Fyll i **Förnamn**, **Efternamn** och **Personnummer**. Personnumret styr arbetsgivaravgiften, som är nedsatt för unga 18–22 år och från 67 år vid årets ingång. **Bostadskommun (valfritt)** styr Skatteverkets skattetabell. Lämnas fältet tomt används organisationens kommun. ### Anställning [#anställning] Välj **Anställningstyp**, till exempel **Heltid**, **Deltid** eller **Timanställd**, och fyll i **Månadslön (kr)** eller **Timlön (kr)**. **Arbetstid (timmar/vecka)** är 40 h som standard och används vid karensavdrag och sjuklöneberäkning. ### Spara [#spara] Klicka på **Spara ändringar**. ## Förmåner och kollektivavtal [#förmåner-och-kollektivavtal] Under **Förmåner** registrerar du till exempel bilförmån, kostförmån eller **Sjukvårdsförsäkring**. Förmåner beskattas men betalas inte ut. Under **Kollektivavtal** väljer du **Följ företagets avtal** eller **Bara lagens regler**. ## Avsluta en anställning [#avsluta-en-anställning] Välj **Avsluta anställning**. Avslutade anställningar hamnar under **Inaktiva** och går att återaktivera. # Anställningskostnad (/guide/lon/anstallningskostnad) > Räkna ut vad en anställning kostar innan du anställer. **Anställningskostnad** räknar ut totalkostnaden innan du anställer: lön, arbetsgivaravgift, Växa-stöd och pension. Du hittar den under . ## Räkna på en lön [#räkna-på-en-lön] Fyll i **Bruttolön per månad (kr)** och vid behov **Tjänstepension (% av bruttolön)** och **Övriga månatliga förmåner (kr)**. Klirr visar **Totalkostnad per månad** och vad den anställde får ut (**Nettolön efter preliminärskatt**). Välj kommun för exakt nettolön. Under **Så räknas totalkostnaden** ser du arbetsgivaravgift, **Avtalsförsäkringar** och **Särskild löneskatt (24,26 %)**. ## Vad har jag råd med? [#vad-har-jag-råd-med] Under **Vad har jag råd med?** anger du **Total budget per månad (kr)**. Klirr räknar då ut **Max bruttolön inom budget**. **Påverkan på personalkostnadsandel** baseras på bokförda personalkostnader de senaste 12 månaderna. # Frånvaro och semester (/guide/lon/franvaro-och-semester) > Registrera och godkänn frånvaro och följ semestersaldot. ## Frånvaro [#frånvaro] Under ser du all frånvaro: sjukdom, VAB, föräldraledighet och semester. Frånvaro som anställda har anmält i medarbetarportalen märks **Inskickad via medarbetarportalen** och ligger under **Väntande**. ### Registrera frånvaro [#registrera-frånvaro] Klicka på **Registrera frånvaro**. Välj anställd och typ, och fyll i **Från** och **Till och med**. ### Ange omfattning [#ange-omfattning] Välj **Omfattning**, till exempel **Heltid (100 %)** eller **Halvtid (50 %)**. ### Godkänn [#godkänn] Frånvaro från medarbetarportalen godkänner du med **Godkänn** eller avvisar med **Avvisa**. Skriv aldrig in diagnos eller andra hälsouppgifter i fälten. Godkänd frånvaro tas med i nästa lönekörning, till exempel som **Karensavdrag** eller **Sjuklön dag 1–14**. ## Semestersaldo [#semestersaldo] Under ser du intjänade och uttagna semesterdagar per anställd: **Tjänas in i år**, **Uttagna i år**, **Sparade dagar från tidigare år** och **Tillgängligt att ta ut**. Vyn visar också **Semesterlöneskuld**. När semesteråret är slut väljer du **Avsluta semesteråret**. # Lönekörning (/guide/lon/lonekorning) > Skapa, godkänn och betala ut månadens löner. En lönekörning räknar fram bruttolön, skatteavdrag, arbetsgivaravgift och nettolön för de anställda under en period. Du behöver minst en aktiv anställd för att skapa en lönekörning. ### Period [#period] Gå till . Välj **Månad** och **Utbetalningsdatum**. ### Anställda [#anställda] Under **Anställda i lönekörningen** markerar du vilka som ska ingå. Med **Markera alla** och **Avmarkera alla** väljer du alla på en gång. ### Förhandsvisning [#förhandsvisning] Kontrollera **Total bruttolön**, **Total nettolön (preliminärt)** och arbetsgivaravgiften. Klicka på **Skapa lönekörning**. Körningen sparas som **Utkast**. ### Godkänn [#godkänn] Öppna körningen och klicka på **Markera som godkänd**. Status blir **Godkänd**. ### Betala ut [#betala-ut] När lönerna är betalda från banken klickar du på **Markera som betald**. Status blir **Utbetald**. ## Status [#status] | Status | Betyder | |---|---| | Utkast | Körningen kan ändras eller tas bort med **Radera utkast** | | Godkänd | Beloppen är godkända | | Utbetald | Lönerna är markerade som betalda | Raderar du ett utkast blir frånvaro och utlägg som ingick lediga för nästa körning. Lönerna redovisas till Skatteverket med [arbetsgivardeklarationen (AGI)](/guide/skatter/agi). # Medarbetarportalen (/guide/lon/medarbetarportalen) > Låt anställda skicka in utlägg, se lönespecifikationer och anmäla frånvaro från mobilen. Medarbetarportalen är de anställdas egen vy i Klirr. Den är byggd för mobilen och finns på adressen `/{företag}/medarbetare`. Startsidan har korten **Nytt utlägg**, **Utlägg**, **Lönespecifikationer** och **Anmäl frånvaro**. ## Skicka in ett utlägg [#skicka-in-ett-utlägg] ### Fota kvittot [#fota-kvittot] Välj **Nytt utlägg** och **Fota kvitto**. Klirr läser beloppet åt dig. ### Skicka in [#skicka-in] Klicka på **Skicka in**. Du kan skicka in direkt, och beloppet fylls i när kvittot är läst. ### Följ utlägget [#följ-utlägget] Under **Utlägg** följer du dina inskickade kvitton. Utlägg som godkänns betalas ut med nästa lön. Utläggen kontrolleras mot företagets [utgiftsregler](/guide/lon/utgiftsregler). ## Lönespecifikationer [#lönespecifikationer] Under **Lönespecifikationer** ser och laddar du ner dina lönebesked. De visas efter att lön har körts, med **Bruttolön**, **Skatteavdrag** och **Nettolön**. ## Anmäl frånvaro [#anmäl-frånvaro] ### Välj typ [#välj-typ] Välj **Anmäl frånvaro** och sedan **Typ av frånvaro**, till exempel sjukdom, VAB eller semester. ### Ange datum [#ange-datum] Fyll i **Från** och **Till och med**, och välj omfattning. ### Skicka in [#skicka-in-1] Frånvaron är inskickad och väntar på godkännande från arbetsgivaren. Vid sjukdom från dag 8 kan du **Ladda upp läkarintyg (krav från dag 8)**. Ångrar du dig väljer du **Annullera frånvaron**. # Utgiftsregler (/guide/lon/utgiftsregler) > Regler med egna ord som kontrollerar anställdas utlägg automatiskt. Med **Utgiftsregler** skriver du regler med egna ord som kontrollerar anställdas utlägg automatiskt. Du hittar dem under . ### Skriv regeln [#skriv-regeln] I fältet **Beskriv din regel på svenska** skriver du till exempel: - Måltider under 500 kr - Ingen alkohol - Max 2 000 kr kontorsmaterial per månad ### Lägg till [#lägg-till] Tryck eller klicka på **Lägg till**. Klirr tolkar regeln som till exempel **Maxbelopp**, **Månadstak**, **Blockerad kategori** eller **Blockerad leverantör**. ### Pausa eller ta bort [#pausa-eller-ta-bort] En regel kan pausas, och då märks den **Pausad**. Med **Ta bort regel** tar du bort den. # Planer och priser (/guide/planer) > Klirrs fem planer, vad de kostar och vilka funktioner som kräver vilken plan. Klirr har fem planer. Varje plan innehåller allt i planen under. Priserna är per månad, exklusive moms. | Plan | Pris | För | |---|---|---| | Gratis | 0 kr | För dig som precis har startat | | AI | 199 kr/mån | När du vill slippa det manuella | | AI Pro | 349 kr/mån | När bolaget växer | | AI Max | 499 kr/mån | En ekonomichef i fickan | | Unlimited | Pris på förfrågan | För större bolag | Betalar du per år betalar du för 10 månader. Du byter plan under . Unlimited beställer du med **Kontakta oss** under Prenumeration, som öppnar ett ärende i . ## Gränser per plan [#gränser-per-plan] | | Gratis | AI | AI Pro | AI Max | Unlimited | |---|---|---|---|---|---| | Användare (+ en redovisningskonsult) | 3 | 5 | 7 | 10 | Obegränsat | | Anställda på lön | 3 | 5 | 7 | 10 | Obegränsat | | Fakturor | Obegränsat | Obegränsat | Obegränsat | Obegränsat | Obegränsat | | AI-avlästa kvitton per månad | 3 | Obegränsat | Obegränsat | Obegränsat | Obegränsat | | Offerter per månad | 3 | 20 | Obegränsat | Obegränsat | Obegränsat | | Resor i körjournalen per månad | 10 | Obegränsat | Obegränsat | Obegränsat | Obegränsat | | Frågor till Birk per timme | – | 50 | 150 | 300 | 500 | | Lagring | 1 GB | 2 GB | 5 GB | 10 GB | Obegränsat | ## Gratis [#gratis] - Bokföring, fakturor och momsrapport - AI läser 3 kvitton i månaden - Bankimport från CSV - Manuella betalningspåminnelser - Logotyp och accentfärg på fakturan - [MCP-servern](/mcp), så att Claude och andra AI-assistenter kan arbeta i Klirr. Den ingår i alla planer. ## AI [#ai] - AI läser alla dina kvitton - [Birk](/guide/birk) svarar på dina bokföringsfrågor - Automatiska betalningspåminnelser - AI konterar bankimporten och matchar den mot kvitton och fakturor - Kvitton och fakturor via e-post - Tidrapportering - Medarbetarportal för utlägg och lönespecar - Klirr Score, Kundhälsa och skattekontot - Delfakturering av offerter ## AI Pro [#ai-pro] - Förifylld momsdeklaration, klar för Skatteverket - Periodisk sammanställning och OSS - 3:12-planerare och K10 för ditt aktiebolag - Budget och leverantörsanalys - Utläggsregler som granskar anställdas kvitton - BankID-signering av offerter - Stripe-försäljningen bokförs automatiskt - Externt API, kompatibelt med Fortnox - Kollektivavtal i lönen - Mallen Minimal, eget typsnitt och egen sidfotstext på fakturan ## AI Max [#ai-max] - Årsredovisning (K2) och inkomstdeklaration 2 - Lönsamhet per kund och anställd - Kassaflödesprognos med egna scenarier - Styrelse- och banklåneunderlag - Bevakning av lån och bankkovenanter - AI-förslag i tidrapporteringen ## Unlimited [#unlimited] - Obegränsat antal användare och anställda - Swish-QR på fakturorna - Prioriterad support - Obegränsad lagring ## När en funktion kräver en högre plan [#när-en-funktion-kräver-en-högre-plan] Öppnar du en funktion som inte ingår i din plan visar Klirr vilken plan som krävs och vad den kostar, till exempel "Ingår i AI Max (från 499 kr/mån)". I guiden markeras sådana funktioner med en etikett, till exempel . # Budget (/guide/planering/budget) > Bygg en budget för räkenskapsåret och följ den mot utfallet. Öppna . Budgeten gäller ett räkenskapsår, så det måste finnas ett. ### Skapa budgeten [#skapa-budgeten] Välj **Ny budget**. ### Låt Klirr föreslå [#låt-klirr-föreslå] Välj **Generera förslag**. Klirr analyserar bokföringen och föreslår belopp. Vill du börja om väljer du **Generera nytt förslag**. ### Justera och spara [#justera-och-spara] Ändra beloppen du inte håller med om och spara. ## Budget mot utfall [#budget-mot-utfall] Vyn **Budget mot utfall** jämför intäkter och kostnader med budgeten för denna månad, kvartalet eller hittills i räkenskapsåret. # Kassaflöde och 13-veckors prognos (/guide/planering/kassaflode-och-13-veckor) > Se hur saldot på banken utvecklas framåt och testa vad som händer om något ändras. ## Kassaflöde [#kassaflöde] Öppna . Prognosen bygger på förväntade kundbetalningar, löner (netto), skattekontobetalningar och återkommande kostnader. Koppla din bank för att få ett aktuellt saldo. Överst ser du tre nyckeltal: | Nyckeltal | Betyder | |---|---| | Saldo i dag | Vad som finns på kontot nu | | Lägsta punkt | Det lägsta prognostiserade saldot under perioden | | Kassan räcker | Hur många dagar saldot håller | Välj **Uppdatera** för att räkna om prognosen. ## 13-veckors prognos [#13-veckors-prognos] Öppna . Prognosen visar inflöden och utflöden vecka för vecka med ett osäkerhetsband. ### Stresstest [#stresstest] I panelen **Stresstest** justerar du reglagen och ser direkt hur prognosen påverkas. Inga ändringar sparas, det är bara en simulering. # KBR Guardian (/guide/planering/kbr-guardian) > Bevaka det egna kapitalet mot halva aktiekapitalet. Öppna . KBR Guardian följer ditt eget kapital i realtid, ger prognoser månader i förväg och låter dig räkna på ett kapitaltillskott innan det egna kapitalet understiger halva aktiekapitalet. Då gäller reglerna om kontrollbalansräkning i aktiebolagslagen. Bevakningen kräver att registrerat aktiekapital är ifyllt under Inställningar. ## Nivåer [#nivåer] Nivåerna är, från sämst till bäst, **Kritisk**, **Varning**, **Tunn buffert** och **Trygg**. Kritisk betyder att eget kapital redan är under halva aktiekapitalet. Du ser också **Andel av aktiekapitalet**. ## Varna styrelsen [#varna-styrelsen] Välj **Mejla varningen till styrelsen** och sedan **Skicka mejlet**. Bara ägare och administratörer kan skicka. # Lån och skulder (/guide/planering/lan-och-skulder) > Följ skuldtjänsttäckningen (DSCR) och lägg upp skulder och åtaganden. ## Lån [#lån] Öppna . Appen visar **Skuldtjänsttäckning (DSCR)**: EBITDA (rörelseresultat + avskrivningar) delat med den schemalagda skuldservicen de kommande 12 månaderna. Banker vill ofta se minst 1,2 gånger. Bara ägare och administratörer har tillgång. Nivåerna är Trygg, Tunn marginal, Varning och Kritisk. Klirr föreslår åtgärder, till exempel **Refinansiera till längre löptid**, **Öka EBITDA** eller **Ta fram ett banklåneunderlag i Rapporter**. ## Skulder & åtaganden [#skulder--åtaganden] Öppna och välj **Lägg till skuld** för att lägga in ett lån eller annat åtagande med amorteringsschema. Skulderna används i DSCR-beräkningen. # Lönsamhet (/guide/planering/lonsamhet) > Se vilka kunder, anställda och artikelgrupper som tjänar pengar. ## Delarna i Lönsamhet [#delarna-i-lönsamhet] Öppna . Startsidan leder vidare till sex delar: | Del | Innehåll | |---|---| | Kunder | Lönsamhet per kund | | Anställda | Lönsamhet per anställd | | Artikelgrupper | Lönsamhet per tjänst eller produktlinje | | Granska | Kostnader och intäkter som behöver kopplas rätt | | Kalender | Import av tid från kalendern | | Metodologi | Hur lönsamheten räknas | ## Startsidan och lönsamhet per kund [#startsidan-och-lönsamhet-per-kund] ## Hur siffrorna räknas [#hur-siffrorna-räknas] Vill du veta hur siffrorna tas fram, välj **Läs hur det räknas** eller öppna Metodologi. # Scenarier (/guide/planering/scenarier) > Räkna på vad som händer om du anställer, höjer priserna eller får sena betalningar. Öppna . Ett scenario är en egen version av prognosen där du ändrar antaganden. ### Skapa ett scenario [#skapa-ett-scenario] Välj **Nytt scenario**, ge det ett namn och välj **Skapa scenario**. Du kan utgå från en fråga, till exempel "Vad händer om jag anställer 2 utvecklare i Q3?". ### Ändra antagandena [#ändra-antagandena] Under **Antaganden** justerar du siffrorna. Under **Nya anställningar** lägger du till personer du planerar att anställa. ### Läs resultatet [#läs-resultatet] **Påverkan på året** visar hur scenariot ändrar året jämfört med prognosen. Du kan byta namn på ett scenario eller ta bort det från listan. # Styrelse (/guide/planering/styrelse) > Ta fram ett styrelseunderlag och skicka det till styrelsen. Öppna . Klirr skriver ett utkast till styrelseunderlag för en period. Du kan redigera utkastet innan PDF:en skickas. Underlaget är informativt, inte ett protokoll enligt 8 kap. 24 § aktiebolagslagen. ### Generera [#generera] Välj perioden och sedan **Generera**. ### Redigera [#redigera] Öppna **Styrelseunderlag**, ändra texten och välj **Spara**. Välj **Slutför** när det är klart. ### Skicka [#skicka] Välj **Skicka till styrelsen** och sedan **Skicka mejlet**. # Analys (/guide/rapporter/analys) > Resultatrapport, balansrapport, banklåneunderlag och factoringanalys. Analyserna finns under i gruppen Analys. ## Resultatrapport och balansrapport [#resultatrapport-och-balansrapport] Resultatrapporten visar intäkter och kostnader för en period. Balansrapporten ger en översikt över tillgångar och skulder. ## Banklåneunderlag [#banklåneunderlag] En komplett PDF för en ansökan hos banken eller Almi: tre års resultat- och balansräkning, nyckeltal och en likviditetsbudget för tolv månader. Bara ägare och administratörer kan skapa underlaget, och organisationsnumret måste vara ifyllt. ### Granska prognosen [#granska-prognosen] Läs igenom underlaget under **Granska innan inlämning** och bekräfta att du har granskat prognosen. ### Ladda ner [#ladda-ner] Välj **Ladda ner PDF**. ## Factoringanalys [#factoringanalys] Birk hjälper dig avgöra om det lönar sig att sälja en faktura. Du ser alternativ, kostnad och avkastning per obetald faktura, till exempel **Kostnad att vänta** mot **Kostnad för factoring**. Bara ägare och administratörer kan använda analysen. Du kan välja **Registrera factoringbeslut** och ange om du sålde, avstod eller skjuter upp. Analysen är ett beslutsstöd, inte rådgivning. Jämför kostnaden med räntan på en checkkredit eller ett lån. # Årsbokslut (/guide/rapporter/arsbokslut) > Stäng räkenskapsåret och skapa bokslutsverifikationerna. Öppna . När du stänger räkenskapsåret nollställs resultatkontona och ingående balans bokförs automatiskt i nästa år. Att stänga ett år är permanent. Bokslutet bokförs i serie Å, som går förbi periodlåsningen. Det går inte att ångra. Finns inget räkenskapsår lägger du upp ett under Inställningar först. ### Välj räkenskapsår [#välj-räkenskapsår] Välj det år du vill stänga. ### Gå igenom Bokslutskontroll [#gå-igenom-bokslutskontroll] Klirr kontrollerar bokföringen. Punkter markerade **Stoppar bokslutet** måste du åtgärda innan du kan stänga året. Punkter markerade **Varning** bör du titta på. Välj **Kontrollera igen** när du har rättat något. ### Förhandsgranska bokslutet [#förhandsgranska-bokslutet] Under **Förhandsgranska bokslutet** ser du bokslutsverifikationerna med konto, debet och kredit. Välj **Räkna om** om du har ändrat i bokföringen. ### Stäng räkenskapsåret [#stäng-räkenskapsåret] Välj **Stäng året** och bekräfta i dialogen **Stänga räkenskapsåret?**. Ett stängt år behövs för [årsredovisningen](/guide/rapporter/arsredovisning-k2). # Årsredovisning (K2) (/guide/rapporter/arsredovisning-k2) > Sammanställ, granska och förbered inlämning av årsredovisningen för aktiebolag. Öppna . Bara ägare och administratörer kan hantera årsredovisningen. Årsredovisningen bygger på ett stängt räkenskapsår, så gör [årsbokslutet](/guide/rapporter/arsbokslut) först. Klirr lämnar inte in åt dig. Du skickar in på papper eller digitalt via en godkänd tjänst. ### Välj räkenskapsår [#välj-räkenskapsår] Välj ett stängt räkenskapsår. ### Förvaltningsberättelse [#förvaltningsberättelse] Fyll i förvaltningsberättelsen. ### Resultatdisposition [#resultatdisposition] Ange hur resultatet ska disponeras. ### Styrelse & underskrifter [#styrelse--underskrifter] Lägg in styrelsen och den som ska skriva under. ### Granska [#granska] Granska årsredovisningen. Du kan välja **Ladda ner granskningskopia (PDF)**. Kopian är märkt UTKAST – EJ FASTSTÄLLD. ### Välj inlämningsväg [#välj-inlämningsväg] Välj papper eller en digital tjänst. ## Lämna in på papper [#lämna-in-på-papper] 1. Ladda ner den utskriftsfärdiga årsredovisningen. 2. Styrelsen (och ev. VD) skriver under originalet. 3. Årsstämman fastställer resultat- och balansräkning. 4. Bestyrk kopian och skriv fastställelseintyg. 5. Posta till Bolagsverket, 851 81 Sundsvall. Den måste vara framme inom 7 månader efter räkenskapsårets slut. Saknas underskriftsblock eller medelantal anställda säger Klirr vad som fattas innan du kan fastställa. ## Lämna in digitalt [#lämna-in-digitalt] Klirr listar godkända tjänster som du kan använda. Exportera då bokföringen som [SIE4](/guide/rapporter/sie4-export) och läs in den i tjänsten. # Bankavstämning (/guide/rapporter/bankavstamning) > Stäm av huvudbokens saldo mot bankutdraget. Öppna . Du jämför huvudbokens saldo mot ditt bankutdrag, i kontots egen valuta. En differens på ett valutakonto bokförs i kronor till Riksbankens kurs på utdragsdagen. ### Välj konto och datum [#välj-konto-och-datum] Välj **Bankkonto** och **Utdragsdatum**. Huvudbokens saldo hämtas av sig självt. ### Fyll i slutsaldot [#fyll-i-slutsaldot] Skriv bankutdragets slutsaldo. ### Bekräfta [#bekräfta] - Stämmer saldona, välj **Bekräfta avstämningen**. Avstämningen sparas. - Finns en differens, välj **Justera och bekräfta**. Välj ett motkonto och skriv en beskrivning, och välj sedan **Bokför justering**. Justeringen bokförs och avstämningen sparas. # Rapporter (/guide/rapporter) > Bokslut, löpande kontroller och analyser av bokföringen. Öppna . Rapporterna är ordnade i fyra grupper. ## Moms och skatt [#moms-och-skatt] Momsen och deklarationerna finns i Skatter. Rutorna i den här gruppen öppnar Skatter. ## Bokslut [#bokslut] Stäng året, ta fram årsredovisningen och exportera bokföringen. - [Årsbokslut](/guide/rapporter/arsbokslut): stäng räkenskapsåret och skapa bokslutsverifikationerna. - [Årsredovisning (K2)](/guide/rapporter/arsredovisning-k2) : sammanställ, granska och förbered inlämningen. - [Exportera SIE4](/guide/rapporter/sie4-export): exportera bokföringen i SIE4-format. ## Löpande kontroll [#löpande-kontroll] Stäm av konton, reskontror och bank. - [Saldobalans, huvudbok, grundbok, reskontror och kontoutdrag](/guide/rapporter/lopande-rapporter) - [Bankavstämning](/guide/rapporter/bankavstamning) ## Analys [#analys] Hur det går för företaget, och underlag till banken. - [Resultatrapport, balansrapport, banklåneunderlag och factoringanalys](/guide/rapporter/analys) # Löpande rapporter (/guide/rapporter/lopande-rapporter) > Saldobalans, huvudbok, grundbok, reskontror och kontoutdrag. Rapporterna finns under i grupperna Löpande kontroll och Bokslut. | Rapport | Visar | |---|---| | Saldobalans | Alla konton med ingående, debet, kredit och utgående saldo | | Huvudbok | Kontosaldon och transaktioner per konto | | Grundbok | Alla verifikationer i kronologisk ordning | | Kundreskontra | Obetalda kundfordringar med åldersanalys | | Leverantörsreskontra | Obetalda leverantörsskulder med åldersanalys | | Kontoutdrag | Löpande saldo för ett specifikt konto med klickbara underlag | ## Saldobalans [#saldobalans] Saldobalansen visar om debet och kredit stämmer. Klicka på ett konto för att se dess kontoutdrag. ## Huvudbok och grundbok [#huvudbok-och-grundbok] ## Reskontror [#reskontror] ## Kontoutdrag [#kontoutdrag] Kontoutdraget visar det löpande saldot för ett konto. Underlagen är klickbara, så du kommer direkt till verifikationen. # Exportera SIE4 (/guide/rapporter/sie4-export) > Exportera bokföringen i SIE4-format. Öppna . SIE4 är standardformatet för att flytta bokföring mellan program, till exempel till din revisor eller en tjänst för årsredovisning. ### Välj räkenskapsår [#välj-räkenskapsår] Välj det år du vill exportera. ### Ladda ner [#ladda-ner] Välj **Ladda ner SIE4** för filen, eller **Ladda ner arkiv (ZIP)** för ett arkiv. Klirr visar eventuella varningar och en historik över tidigare exporter med datum, antal verifikationer och filstorlek. # Arbetsgivardeklaration (AGI) (/guide/skatter/agi) > Underlaget för skatteavdrag och arbetsgivaravgifter varje månad. Arbetsgivardeklarationen lämnas månadsvis till Skatteverket. Den finns under och går också att öppna från rutan AGI i **Löner**. Vyn bygger på periodens lönekörningar och visar per anställd **Bruttolön**, **Förmåner**, **Skatteavdrag**, **Arbetsgivaravgift** och **Nettolön**. **Sjuklönekostnad i perioden** visas separat. ### Välj period [#välj-period] Välj månad. Finns det inga lönekörningar visas "Det finns inga lönekörningar för denna period att deklarera." ### Kontrollera [#kontrollera] Gå igenom avsnittet **Kontrollera innan du lämnar deklarationen**. Om rutan **Det här måste rättas innan deklarationen kan lämnas** visas, rättar du det först. ### Lämna in [#lämna-in] För in uppgifterna i Skatteverkets e-tjänst för arbetsgivardeklaration. # Inkomstdeklaration (/guide/skatter/inkomstdeklaration) > INK2 för aktiebolag och NE-bilaga för enskild firma. Inkomstdeklarationen lämnas en gång om året. Aktiebolag lämnar Inkomstdeklaration 2, och en enskild firma deklarerar med NE-bilagan. Gå till . Bara ägare, administratörer och redovisningskonsulter kan hantera bolagets deklaration. ### Gå igenom [#gå-igenom] Välj **Räkenskapsår** och gå igenom deklarationen. Under **Poster som behöver ditt besked** väljer du till exempel **Avdragsgill** eller **Ej avdragsgill**. Svara också på **Två frågor från blanketten**. Under **Egna justeringar** lägger du till fler punkter på INK2S. ### Boka skatten [#boka-skatten] Klicka på **Boka skatten**. Bolagsskatten bokförs på balansdagen. ### Stäng räkenskapsåret [#stäng-räkenskapsåret] Stängningen görs i Årsbokslut. Klicka på **Till årsbokslut** om året inte är stängt. ### Slutför [#slutför] Klicka på **Slutför deklarationen**. Det låser siffrorna, och ett underskott förs vidare till nästa år. Ladda sedan ner filerna till Skatteverket. Packa upp filen och ladda upp INFO.SRU och BLANKETTER.SRU under **Filöverföring** på skatteverket.se. Deklarationen blir ett utkast som firmatecknaren sedan signerar under Mina sidor. Gå till och välj **Räkenskapsår**. Under **Rutorna på NE-bilagan** visas beloppen för resultaträkningens rutor. R3 (bil- och bostadsförmån) bokförs inte och fylls i för hand. Med **Ladda ner XML** får du en fil med R1–R11 för ditt eget underlag. Skatteverket tar inte emot filen. För in beloppen för hand i e-tjänsten för inkomstdeklarationen. # Moms (/guide/skatter/moms) > Momsdeklaration med XML-fil, momsrapport, periodisk sammanställning och OSS. Appen **Skatter** är indelad i grupperna **Moms**, **Arbetsgivare**, **Inkomstdeklaration**, **Skattepilot** och **Inställningar**. Rutor som inte gäller din bolagsform visas inte. Momsen hittar du under . ## Momsdeklaration [#momsdeklaration] Momsdeklarationen visar rutorna som Skatteverket vill ha, till exempel **Momspliktig försäljning**, **Utgående moms**, **Ingående moms att dra av** och **Att betala (ruta 49)**. Den förifyllda momsdeklarationen. ### Kontrollera rutorna [#kontrollera-rutorna] Välj period och gå igenom rutorna. Klicka på en ruta för att se vilka bokningar som ingår. ### Ladda ner XML-fil [#ladda-ner-xml-fil] Klicka på **Ladda ner XML-fil**. Organisationsnumret måste finnas i inställningarna. ### Lämna in hos Skatteverket [#lämna-in-hos-skatteverket] Ladda upp XML-filen i Skatteverkets e-tjänst Lämna momsdeklaration. ### Stäm av momsen [#stäm-av-momsen] Klicka på **Stäm av momsen**. Det skapas en verifikation som nollställer momskontona och bokför nettot på 2650. ## Momsrapport [#momsrapport] **Momsrapport** är en förenklad sammanställning av försäljning och inköp per momssats med **Utgående moms** och **Ingående moms**. Kontrollera siffrorna innan du betalar eller deklarerar. ## Periodisk sammanställning [#periodisk-sammanställning] Säljer du varor eller tjänster till företag i andra EU-länder redovisar du det i en periodisk sammanställning. Vyn listar **Köpare** med **Momsnummer** och belopp för **Varor (ruta 35)**, **Tjänster (ruta 39)** och **Trepartshandel (ruta 38)**. Fyll i **Kontaktperson** och skapa filen till Skatteverket. Klirr har ingen uppgift om trepartshandel. Fyll i den hos Skatteverket om du haft sådan. ## OSS-deklaration [#oss-deklaration] **OSS-deklaration** visar underlaget för försäljning till konsumenter i andra EU-länder per **Kvartal**, med **Land** och **Typ och momssats**. Med **Hämta underlaget som CSV** får du en fil att utgå från i Skatteverkets e-tjänst. Vyn visar **Sista dag att deklarera och betala**. När du har betalat väljer du **Registrera OSS-betalning** och fyller i **Belopp i euro** och **Belopp i kronor (kontoutdraget)**. # Skatteinställningar (/guide/skatter/skatteinstallningar) > Momsregistrering, momsmetod, momsperiod och F-skatt. Under finns uppgifterna som momsdeklarationen, skattekontot och kassaflödesprognosen räknas från. ## Momsregistrering [#momsregistrering] Ange om företaget är **Momsregistrerad hos Skatteverket** och från vilken dag. Varje bokföring använder registreringen som gällde den dagen. ## Momsredovisningsmetod [#momsredovisningsmetod] | Metod | När momsen redovisas | |---|---| | Fakturametoden | När fakturan skickas eller tas emot, oavsett om den betalats. Vanligast för de flesta företag. | | Kontantmetoden | Först när betalning sker. Tillåtet om omsättningen är under 3 miljoner kr/år. | Momsmetoden är låst sedan första momsrapporten. ## Momsperiod [#momsperiod] Välj hur ofta du lämnar momsdeklaration till Skatteverket: **Månadsvis**, **Kvartalsvis** eller **Årsvis**. ## F-skatt [#f-skatt] Fyll i beloppet från Skatteverkets senaste beslut. Lämna tomt om ditt företag inte har F-skatt. Uppgiften används för skattekontot och i kassaflödesprognosen. # Skattekontot (/guide/skatter/skattekontot) > Följ prognosen för årets skatt och hur mycket du bör avsätta. **Skattekontot** under jämför det du har betalat in med prognosen för årets skatt. ## Det här visar vyn [#det-här-visar-vyn] Vyn visar: - **Prognos för året** och **Inbetalningar hittills**. - **Du borde ha avsatt**, alltså hur stor din **Skattereserv** bör vara. - **Rekommenderad månadssparning**, en föreslagen månadssparning för att ligga i nivå med årets slutskatt. - Under **Vad kan du göra nu?** finns förslag, till exempel en extra inbetalning före 12 februari om det finns en kvarskatterisk. ## Ange F-skatt [#ange-f-skatt] Med **Ange F-skatt** eller **Ändra F-skatt** fyller du i beloppet från Skatteverkets senaste beslut. Om Klirr hittar en **Återkommande betalning upptäckt** i banken kan du spara den som månadsbetalning. Kontrollera siffrorna tillsammans med din redovisningskonsult. # Skattepilot (/guide/skatter/skattepilot) > Räkna på avdrag, utdelning och pension innan året är slut. Under räknar du på avdrag, utdelning och pension innan året är slut. Skattepilot behöver ett räkenskapsår. Det skapas automatiskt när du bokför din första verifikation. ## Rutorna i Skattepilot [#rutorna-i-skattepilot] | Ruta | Vad den gör | Gäller | |---|---|---| | 3:12 och K10 | Räknar ut gränsbeloppet för utdelning per delägare och föreslår en fördelning mellan lön och utdelning. | | | Pension | Visar hur mycket pension du kan sätta av med avdrag i år och vad det sparar i skatt. | | | Egenavgifter | Räknar på egenavgifterna. | | | Avskrivning | Jämför huvudregeln och kompletteringsregeln per inventariekonto och visar vilken som ger störst avdrag. | | ## Räkna ut [#räkna-ut] Klicka på **Beräkna**, och på **Visa beräkningen** för att se hur resultatet räknats fram. # Körjournal (/guide/tid-korjournal/korjournal) > Logga tjänsteresor och få underlag för milersättning och schablonavdrag. Öppna . På Gratis-planen kan du logga 10 resor per månad. ## Lägg till ett fordon [#lägg-till-ett-fordon] Du måste registrera ett fordon innan du kan logga en resa. Öppna **Fordon** och välj typ: | Typ | I enskild firma, HB och KB | |---|---| | Egen bil | Egen bil | | Förmånsbil | Firmans bil | | Elbil (förmån) | Firmans elbil | | Motorcykel | Motorcykel | I en enskild firma, ett handelsbolag eller kommanditbolag ger bara ägarens egen bil schablonavdrag. Firmans bil har sina faktiska kostnader och ger 0 kr, men körjournalen visar ändå fördelningen mellan tjänst och privat. ## Logga en resa [#logga-en-resa] ### Ny resa [#ny-resa] Välj **Ny resa**. ### Fyll i [#fyll-i] Välj **Tjänsteresa** eller **Privat**, och fyll i sträckan. Du kan ange mätarställning, kontaktperson och anteckningar. ### Spara [#spara] Välj **Spara & bokför** för att bokföra resan direkt, eller **Spara**. ## Sammanställning [#sammanställning] **Sammanställning** visar årets resor. Kortet **NE-bilaga (R14)** bilkostnaderna med schablonavdrag. # Tidrapportering (/guide/tid-korjournal/tidrapportering) > Registrera tid med timer och fakturera den, manuellt eller enligt schema. Öppna . ## Registrera tid med timer [#registrera-tid-med-timer] ### Starta [#starta] Välj **Starta timer**. ### Stoppa [#stoppa] Välj **Stoppa timer**. Rutan **Tid registrerad** visas. ### Spara eller fakturera [#spara-eller-fakturera] Välj kund. Välj **Spara** för att spara tiden, eller **Fakturera direkt** för att skapa ett fakturautkast. ## Att fakturera [#att-fakturera] Vyn **Att fakturera** samlar ofakturerad tid. Välj **Fakturera veckan** för att fakturera veckans tid. ## Schemalagd fakturering [#schemalagd-fakturering] Under finns **Schemalagd fakturering**. Slå på **Fakturera tid enligt schema** så samlar Klirr ihop den ofakturerade tiden på fakturadagen och skapar en faktura per kund. Bara tid som är markerad som fakturerbar och har ett timpris kommer med. # Felsökning (/mcp/felsokning) > Vanliga problem, varför de uppstår och hur du löser dem. **Orsak:** klienten stöder inte OAuth-upptäckt eller dynamisk registrering. Servern svarar `401` med `WWW-Authenticate` och väntar på att klienten ska logga in. **Lösning:** uppdatera klienten, eller använd [mcp-remote](/mcp/klienter/generisk). **Orsak:** klienten registrerade en `http`-adress som inte är localhost/loopback. **Lösning:** klienten måste använda `https` eller en loopback-adress. Rapportera felet till klientens utvecklare. **Orsak:** publika klienter måste skicka PKCE med S256. **Lösning:** använd en klient som stöder PKCE, eller mcp-remote. **Orsak:** en klient som registrerat sig men aldrig använts raderas efter ett dygn. **Lösning:** ta bort och lägg till servern igen i klienten så registrerar den sig på nytt. **Orsak:** bara ägare och admin kan godkänna en koppling. **Lösning:** be en ägare eller admin i företaget lägga till kopplingen. **Orsak:** kopplingen är borttagen under Anslutna appar, eller token har gått ut. **Lösning:** logga in igen från klienten. Förslag som väntade när kopplingen togs bort är återkallade och måste göras om. **Orsak:** fler än 25 anrop på 5 sekunder för klienten och företaget. Gränsen delas med API:et. Ett tillfälligt databasfel kan också ge 429. **Lösning:** vänta 5 sekunder (`Retry-After: 5`) och be assistenten göra färre anrop åt gången. **Orsak:** klienten försöker öppna en SSE-ström med `GET`. Servern stöder bara Streamable HTTP med `POST`. **Lösning:** välj transport `http` (Streamable HTTP) i klienten, inte `sse`. **Orsak:** högst 50 väntande förslag per företag. **Lösning:** gå igenom , eller be assistenten återkalla felaktiga förslag med `cancel_action_request`. **Orsak:** förslag går ut efter 7 dagar. **Lösning:** be assistenten föreslå igen. **Orsak:** utkastet ändrades efter förslaget, så fingeravtrycket stämmer inte. **Lösning:** be assistenten göra ett nytt `propose_issue_invoice`. **Orsak:** planens fakturakvot är slut. MCP-servern är gratis men går inte runt planens gränser. **Lösning:** vänta till nästa period eller uppgradera planen. **Orsak:** verktygsfel skickas som Klirrs svenska användarmeddelanden. **Lösning:** inget fel. Assistenten kan läsa och översätta dem. ## För dig som kör Klirr själv [#för-dig-som-kör-klirr-själv] Gäller bara staging eller lokal utveckling, inte app.klirr.ai. - **Resursen nekas:** `NEXT_PUBLIC_APP_URL` har en annan origin än adressen klienten ansluter till. Sätt den till exakt samma origin. - **`.well-known` skickas till /login:** segmentet saknas i `NON_SLUG_PUBLIC_SEGMENTS`. Lägg till det. # Godkännanden (/mcp/godkannanden) > Så fungerar flödet föreslå, granska och godkänna. Allt som skapar bokföringsposter kan assistenten bara **föreslå**. Bokföring kan rättas men inte ändras i efterhand, så en människa tar alltid sista steget. ## Flödet [#flödet] ### Assistenten föreslår [#assistenten-föreslår] Ett `propose_*`-verktyg kontrollerar mot bokföringen, till exempel att utkastet har rätt status, att verifikationen balanserar och att kontona finns. Sedan skapas ett förslag med status **Väntar**. Svaret innehåller `approve_url`. ### Du granskar [#du-granskar] Öppna länken eller gå till . Du ser Klirrs egen sammanfattning av förslaget, byggd från databasen. Assistentens motivering (`reason`) visas separat och märkt som assistentens. ### Du godkänner eller avvisar [#du-godkänner-eller-avvisar] Vid godkännande genomförs åtgärden med samma kod som knappen i appen, och med din session. Samma roller, plangränser och periodlås gäller. ### Assistenten följer upp [#assistenten-följer-upp] Med `get_action_request` ser assistenten utfallet, till exempel fakturanumret. ## Vem kan godkänna [#vem-kan-godkänna] Ägare, administratörer och redovisningskonsulter. Andra roller får felet "Bara ägare, administratörer och redovisningskonsulter kan godkänna förslag." Godkännande kräver att du är inloggad i Klirr. Det går inte att godkänna med en token, och det finns inget MCP-verktyg som godkänner. ## Status [#status] | Status | Betyder | |---|---| | Väntar (`pending`) | Någon måste ta ställning | | Genomförs (`executing`) | Godkänt, körs just nu | | Genomfört (`executed`) | Klart | | Misslyckades (`failed`) | Godkänt men gick inte att genomföra | | Avvisat (`rejected`) | Du sa nej | | Återkallat (`cancelled`) | Assistenten återkallade det, eller kopplingen togs bort | | Utgånget (`expired`) | Ingen tog ställning inom 7 dagar | ## Skydd [#skydd] - **Går ut efter 7 dagar.** Ett förslag som inte avgjorts upphör. - **Max 50 väntande per företag.** Försöker assistenten skapa fler får den ett fel och ska be dig gå igenom listan först. - **Låst innehåll.** Vad förslaget gör och vad som visas kan inte ändras efter att det skapats. - **Fingeravtryck.** Har fakturautkastet ändrats sedan förslaget skapades (status, belopp eller senast ändrat) ställs det inte ut. Be assistenten göra ett nytt förslag. - **Exakt en gång.** Ett förslag kan bara gå från Väntar till Genomförs en gång, även om du klickar två gånger. - **Återkallas med kopplingen.** Tar du bort kopplingen under återkallas dess väntande förslag. # MCP (/mcp) > Koppla en AI-assistent som Claude till din bokföring i Klirr via Model Context Protocol. Med Klirrs MCP-server kan en AI-assistent läsa din bokföring, skapa kunder och fakturautkast och **föreslå** bokföring som du sedan godkänner i Klirr. MCP-servern ingår i alla planer, även Gratis. Planens övriga gränser gäller fortfarande, till exempel fakturakvoten. ## Serveradress [#serveradress] ```txt https://app.klirr.ai/api/mcp ``` Du hittar samma adress med en kopieringsknapp under . ## Vad assistenten kan göra [#vad-assistenten-kan-göra] | Grupp | Vad | Exempel | |---|---|---| | [Läsa](/mcp/verktyg/lasa) | Företagsinfo, kunder, fakturor, leverantörsfakturor, kontoplan, verifikationer, resultat- och balansräkning | "Vilka fakturor är förfallna?" | | [Skapa](/mcp/verktyg/skapa) | Kunder och fakturautkast. Inget bokförs. | "Skapa ett utkast till Acme på 10 timmar à 950 kr." | | [Förslag](/mcp/verktyg/forslag) | Ställa ut fakturor, registrera betalningar, verifikationer m.m. Kräver ditt godkännande. | "Föreslå en verifikation för kontorsmaterialet." | | [Uppföljning](/mcp/verktyg/uppfoljning) | Se och återkalla assistentens egna förslag | "Har jag godkänt förslaget än?" | Totalt 23 verktyg. Servern har inga resurser eller promptmallar, bara verktyg. ## Så fungerar det [#så-fungerar-det] - **Transport:** Streamable HTTP, tillståndslös. Ingen stdio, ingen SSE. - **Inloggning:** OAuth 2.0 med PKCE. Klienten registrerar sig själv, så du behöver ingen API-nyckel. Se [Säkerhet](/mcp/sakerhet). - **Ett företag per koppling:** du väljer organisation när du godkänner kopplingen. - **Inget bokförs utan dig:** allt som skapar bokföringsposter är förslag som en människa godkänner. Se [Godkännanden](/mcp/godkannanden). # claude.ai och Claude Desktop (/mcp/klienter/claude-ai-desktop) > Lägg till Klirr som anpassad connector i Claude. ## Lägg till connectorn [#lägg-till-connectorn] Öppna **Settings → Connectors** och välj **Add custom connector**. Ange namnet `Klirr` och URL:en: ```txt https://app.klirr.ai/api/mcp ``` Klicka **Connect**. Claude skickar dig till Klirrs samtyckessida. En ägare eller admin loggar in, väljer företag och godkänner. ## Claude Desktop [#claude-desktop] Connectorn du lägger till i claude.ai följer med till Claude Desktop när du är inloggad med samma konto. Du behöver inte redigera `claude_desktop_config.json`. Den filen är för lokala stdio-servrar. Vill du ändå gå den vägen, se [Generisk klient](/mcp/klienter/generisk). Vilka planer i Claude som tillåter anpassade connectors bestäms av Anthropic, inte av Klirr. # Claude Code (/mcp/klienter/claude-code) > Lägg till Klirr i Claude Code med en kommandorad. ```bash claude mcp add --transport http klirr https://app.klirr.ai/api/mcp ``` Starta Claude Code och kör `/mcp`. Välj `klirr` och logga in. Webbläsaren öppnar Klirrs samtyckessida där du väljer företag och godkänner. ## Bara för ett projekt [#bara-för-ett-projekt] Lägg till `--scope project` så sparas servern i `.mcp.json` i projektet och delas med dem som använder repot: ```bash claude mcp add --transport http --scope project klirr https://app.klirr.ai/api/mcp ``` Otestat. Flaggan `--scope project` kommer från Claude Codes dokumentation och är inte testad mot Klirr. # Cursor (/mcp/klienter/cursor) > Lägg till Klirr i Cursor via mcp.json. Otestat. Konfigurationen följer Cursors dokumentation men finns inte i Klirrs repo och är inte testad mot Klirr. ## Konfiguration [#konfiguration] Lägg till servern i `~/.cursor/mcp.json` (alla projekt) eller `.cursor/mcp.json` (ett projekt): ```json title="~/.cursor/mcp.json" { "mcpServers": { "klirr": { "url": "https://app.klirr.ai/api/mcp" } } } ``` ## Inloggning [#inloggning] Du behöver inga `headers` och ingen `auth`-sektion. Klirr stöder dynamisk klientregistrering, så Cursor registrerar sig och kör OAuth själv. Klicka på inloggning för `klirr` under MCP-inställningarna i Cursor när den visas. # Generisk klient (/mcp/klienter/generisk) > Krav på klienten, och mcp-remote för klienter som bara stöder stdio. ## Krav [#krav] Klienten måste stödja: - **Streamable HTTP** mot `https://app.klirr.ai/api/mcp`. Servern är tillståndslös och svarar med JSON. `GET` och `DELETE` ger `405`. - **OAuth 2.0-upptäckt** via `WWW-Authenticate` och `/.well-known/oauth-protected-resource/api/mcp` (RFC 9728) samt `/.well-known/oauth-authorization-server` (RFC 8414). - **Dynamisk klientregistrering** (RFC 7591) på `POST /api/v1/oauth-v1/register`. - **PKCE med S256.** Krävs för publika klienter. - Scope `mcp`. ## Klienter som bara stöder stdio [#klienter-som-bara-stöder-stdio] Otestat. `mcp-remote` nämns inte i Klirrs repo och är inte testat mot Klirr. Paketet `mcp-remote` startar en lokal stdio-process som pratar HTTP och OAuth med Klirr åt klienten. Du behöver Node.js. Testa från terminalen: ```bash npx mcp-remote https://app.klirr.ai/api/mcp ``` I en klient som konfigureras med `command` och `args`, till exempel `claude_desktop_config.json`: ```json { "mcpServers": { "klirr": { "command": "npx", "args": ["-y", "mcp-remote", "https://app.klirr.ai/api/mcp"] } } } ``` Första gången öppnas webbläsaren för inloggning i Klirr. # VS Code (/mcp/klienter/vscode) > Lägg till Klirr i VS Code (GitHub Copilot) via mcp.json. Otestat. Konfigurationen följer VS Codes dokumentation men finns inte i Klirrs repo och är inte testad mot Klirr. VS Codes dokumentation beskriver inte OAuth-flödet för HTTP-servrar på samma sida. ## Konfiguration [#konfiguration] Skapa `.vscode/mcp.json` i projektet: ```json title=".vscode/mcp.json" { "servers": { "klirr": { "type": "http", "url": "https://app.klirr.ai/api/mcp" } } } ``` ## Starta och logga in [#starta-och-logga-in] Starta servern från filen eller via kommandot **MCP: List Servers**. Logga in i Klirr när VS Code ber om det. # Säkerhet (/mcp/sakerhet) > OAuth, ett företag per koppling, scope, återkallning och gränser. ## OAuth [#oauth] Klirr använder OAuth 2.0. Du delar aldrig lösenord eller API-nycklar med assistenten. - Klienten registrerar sig själv (RFC 7591). Registreringen är begränsad per IP. - Publika klienter får ingen hemlighet och måste använda PKCE (S256). - Samtyckessidan varnar för självregistrerade klienter: namnet är klientens eget påstående. Sidan visar vart du skickas efter godkännandet. Godkänn bara klienter du själv lagt till. - Bara **ägare eller admin** kan godkänna en koppling. ## Ett företag per koppling [#ett-företag-per-koppling] När du godkänner väljer du ett företag. Token är knuten till det, och klienten kan inte byta. Har du flera företag lägger du till en koppling per företag. ## Scope [#scope] Självregistrerade klienter får bara scope `mcp`, aldrig scopes för det Fortnox-kompatibla API:et. Scope `mcp` ger exakt de [23 verktygen](/mcp/verktyg): läsa, skapa kunder och fakturautkast, samt föreslå. Inget bokförs utan [godkännande](/mcp/godkannanden). Personnummer på fakturor och anställdas personnummer, lön och kontaktuppgifter skickas aldrig. ## Återkalla [#återkalla] Gå till och ta bort kopplingen. Nästa anrop från klienten får `401`, och kopplingens väntande förslag återkallas. ## Gränser [#gränser] | Gräns | Värde | |---|---| | Anrop | 25 per 5 sekunder per klient och företag, delat med API:et. Över gränsen: `429` med `Retry-After: 5`. | | Väntande förslag | 50 per företag | | Förslagens livslängd | 7 dagar | | Oanvänd klientregistrering | Raderas efter ett dygn | ## Felkoder [#felkoder] | Status | Fel | Betyder | |---|---|---| | 401 | `invalid_token` | Token saknas, har gått ut eller är återkallad | | 403 | `insufficient_scope` | Token saknar scope `mcp` | | 429 | | För många anrop | | 500 | `server_error` | Internt fel | # Snabbstart (/mcp/snabbstart) > Anslut Claude till Klirr på under fem minuter. Du behöver ett Klirr-konto med rollen **ägare** eller **admin** i företaget du vill koppla. ### Kopiera adressen [#kopiera-adressen] ```txt https://app.klirr.ai/api/mcp ``` Den finns också under . ### Lägg till servern i din klient [#lägg-till-servern-i-din-klient] I claude.ai eller Claude Desktop: **Settings → Connectors → Add custom connector**, klistra in adressen. Använder du Claude Code: ```bash claude mcp add --transport http klirr https://app.klirr.ai/api/mcp ``` Andra klienter: se [Klienter](/mcp/klienter/claude-ai-desktop). ### Godkänn i Klirr [#godkänn-i-klirr] Klienten öppnar Klirrs samtyckessida i webbläsaren. Logga in, välj företag och godkänn. ### Testa [#testa] Skriv till exempel: > Vilket företag är du kopplad till, och vilka räkenskapsår finns? Assistenten anropar `get_organization` och svarar med företagets uppgifter. Kopplingen syns nu under . Där kan du också ta bort den. När assistenten föreslår något, till exempel att ställa ut en faktura, får du en länk till där du godkänner. Läs mer i [Godkännanden](/mcp/godkannanden). # Förslag (/mcp/verktyg/forslag) > Verktyg som skapar ett förslag du godkänner i Klirr. Inget genomförs av anropet. Inget av de här verktygen genomför något. De kontrollerar mot bokföringen och skapar ett förslag med status `pending`. Du godkänner det i . Se [Godkännanden](/mcp/godkannanden). Alla förslagsverktyg tar även: | Parameter | Typ | Krävs | Begränsning | |---|---|---|---| | `reason` | string | nej | max 1000 tecken. Kort motivering som visas bredvid förslaget i Klirr. | **Alla returnerar:** `id`, `status` (`pending`), `expires_at`, `approve_url` (länk till godkännandevyn), `action`, `preview` (Klirrs egen sammanfattning) och `message`. ## propose_issue_invoice [#propose_issue_invoice] **Föreslå att ställa ut en faktura.** Föreslår att ett fakturautkast ställs ut: fakturan numreras, bokförs och skickas till kunden. | Parameter | Typ | Krävs | Begränsning | Standard | |---|---|---|---|---| | `invoice_id` | string | ja | UUID, utkastets id | | | `channel` | enum | nej | `email` = skicka till kundens e-post, `manual` = markera som skickad utan e-post | `email` | > Skicka utkastet till Acme när det ser rätt ut. ## propose_invoice_payment [#propose_invoice_payment] **Föreslå en inbetalning på en kundfaktura.** Föreslår att en inbetalning registreras och bokförs på en utställd kundfaktura. | Parameter | Typ | Krävs | Begränsning | Standard | |---|---|---|---|---| | `invoice_id` | string | ja | UUID | | | `payment_date` | string | ja | `ÅÅÅÅ-MM-DD`, inte i framtiden | | | `amount` | number | nej | positivt | hela återstående beloppet | | `payment_reference` | string | nej | max 200 tecken, t.ex. OCR | | > Acme betalade INV-0012 i går, registrera det. ## propose_voucher [#propose_voucher] **Föreslå en verifikation.** Föreslår en manuell verifikation (fri kontering) i serie A. Varje rad har antingen debet eller kredit, och summan av debet måste vara lika med summan av kredit. Använd kontonummer ur `list_accounts`. | Parameter | Typ | Krävs | Begränsning | Standard | |---|---|---|---|---| | `entry_date` | string | ja | `ÅÅÅÅ-MM-DD` | | | `description` | string | ja | 1–500 tecken | | | `lines` | array | ja | 2–100 rader | | | `notes` | string | nej | max 2000 tecken | | Varje rad i `lines`: | Fält | Typ | Krävs | Begränsning | Standard | |---|---|---|---|---| | `account_number` | string | ja | exakt fyra siffror | | | `debit` | number | nej | min 0 | 0 | | `credit` | number | nej | min 0 | 0 | | `description` | string | nej | max 500 tecken | | > Bokför kontorsmaterial för 1 250 kr inkl. moms, betalt med företagskortet den 3 maj. ## propose_supplier_invoice_registration [#propose_supplier_invoice_registration] **Föreslå att registrera en leverantörsfaktura.** Föreslår att en inläst leverantörsfaktura (status draft) registreras och bokförs som leverantörsskuld. | Parameter | Typ | Krävs | Begränsning | |---|---|---|---| | `supplier_invoice_id` | string | ja | UUID | > Registrera de inlästa leverantörsfakturorna från förra veckan. ## propose_supplier_invoice_payment [#propose_supplier_invoice_payment] **Föreslå betalning av en leverantörsfaktura.** Föreslår att betalningen av en registrerad leverantörsfaktura bokförs. Pengar skickas inte. Det här registrerar en betalning som redan gjorts. | Parameter | Typ | Krävs | Begränsning | |---|---|---|---| | `supplier_invoice_id` | string | ja | UUID | | `payment_date` | string | ja | `ÅÅÅÅ-MM-DD` | | `payment_reference` | string | nej | max 200 tecken | > Jag betalade elräkningen i fredags, bokför betalningen. ## propose_payroll_deduction [#propose_payroll_deduction] **Föreslå att fordran på delägare dras från lönen.** Föreslår att en oreglerad fordran på delägare (privata köp på företagets kort) dras från nettolönen i nästa lönekörning. Avdraget görs från lönen för **den som godkänner**. Kvittning mot lön kräver personens eget samtycke (lag 1970:215). Läs beloppet med `get_owner_receivable`. | Parameter | Typ | Krävs | Begränsning | |---|---|---|---| | `amount` | number | ja | positivt, kronor, högst fordran | > Dra mina privata köp från nästa lön. ## propose_interest_benefit [#propose_interest_benefit] **Föreslå en ränteförmån för ett lån till en anställd.** Föreslår att en oreglerad fordran på en anställd förmånsbeskattas som ett räntefritt lån (ränteförmån, IL 61 kap. 15–16 §§). Bara för en anställd som inte är delägare, VD eller närstående. För dem är lånet förbjudet (ABL 21 kap. 1 §) och förslaget avvisas. Välj den anställde med `list_employees`. | Parameter | Typ | Krävs | Begränsning | Standard | |---|---|---|---|---| | `employee_id` | string | ja | UUID | | | `lanebelopp` | number | ja | positivt, kronor | | | `valid_from` | string | nej | `ÅÅÅÅ-MM-DD` | första dagen i innevarande månad | > Anna har 3 000 kr oreglerat på företagskortet. Föreslå ränteförmån. # Verktyg (/mcp/verktyg) > Alla 23 verktyg i Klirrs MCP-server, grupperade. ## Format och fel [#format-och-fel] Servern exponerar 23 verktyg och inga resurser eller promptmallar. Titlar och beskrivningar är på svenska. Alla svar är JSON i textform. Fel kommer tillbaka som verktygsfel med ett svenskt meddelande, så assistenten kan läsa varför och försöka igen. Datum anges alltid som `ÅÅÅÅ-MM-DD`. Allt filtreras på företaget kopplingen gäller. ## Verktygsgrupper [#verktygsgrupper] | Grupp | Verktyg | |---|---| | [Läsa](/mcp/verktyg/lasa) (11) | `get_organization`, `list_customers`, `list_invoices`, `get_invoice`, `list_supplier_invoices`, `list_accounts`, `list_vouchers`, `get_income_statement`, `get_balance_sheet`, `get_owner_receivable`, `list_employees` | | [Skapa](/mcp/verktyg/skapa) (2) | `create_customer`, `create_invoice_draft` | | [Förslag](/mcp/verktyg/forslag) (7) | `propose_issue_invoice`, `propose_invoice_payment`, `propose_voucher`, `propose_supplier_invoice_registration`, `propose_supplier_invoice_payment`, `propose_payroll_deduction`, `propose_interest_benefit` | | [Uppföljning](/mcp/verktyg/uppfoljning) (3) | `list_action_requests`, `get_action_request`, `cancel_action_request` | ## Godkännanden [#godkännanden] Det finns inget verktyg som godkänner ett förslag. Det gör du i Klirr. # Läsa (/mcp/verktyg/lasa) > Verktyg som bara läser. Alla har readOnlyHint. ## get_organization [#get_organization] **Hämta företagsinformation.** Hämtar grunduppgifter om företaget som kopplingen gäller: namn, organisationsnummer, bolagsform, momsuppgifter och räkenskapsår. Anropa det här först för att veta vilket företag och vilka räkenskapsår du arbetar med. **Indata:** inga. **Returnerar:** `name`, `org_number`, `organization_type`, `vat_number`, `vat_registered`, `vat_method`, `vat_filing_frequency`, `city`, `books_through`, `fiscal_years[]` (`start_date`, `end_date`, `is_closed`) och `today` (dagens datum i Stockholm). > Vilka räkenskapsår har vi, och är förra året stängt? ## list_customers [#list_customers] **Lista kunder.** Listar kunder i kundregistret. Sök med fritext över namn, organisationsnummer och e-post. Använd kundnumret eller id:t i svaret när du skapar ett fakturautkast. | Parameter | Typ | Krävs | Begränsning | Standard | |---|---|---|---|---| | `search` | string | nej | max 200 tecken | | | `include_inactive` | boolean | nej | | nej | | `limit` | integer | nej | 1–100 | 50 | | `offset` | integer | nej | min 0 | 0 | **Returnerar:** `total` och `customers[]` med `id`, `customer_number`, `name`, `org_number`, `vat_number`, `email`, `phone`, `address`, `postal_code`, `city`, `country_code`, `is_active`. Sorterat på namn. > Finns det någon kund som heter Acme? ## list_invoices [#list_invoices] **Lista kundfakturor.** Listar kundfakturor, nyast först. Filtrera på status, kund och fakturadatum. Status: draft (utkast), sent (skickad/obetald), overdue (förfallen), paid (betald), cancelled (makulerad), written_off (avskriven). | Parameter | Typ | Krävs | Begränsning | Standard | |---|---|---|---|---| | `status` | enum | nej | `draft`, `sent`, `overdue`, `paid`, `cancelled`, `written_off` | | | `customer_number` | string | nej | max 50 tecken | | | `from_date` | string | nej | `ÅÅÅÅ-MM-DD`, fakturadatum från och med | | | `to_date` | string | nej | `ÅÅÅÅ-MM-DD`, fakturadatum till och med | | | `limit` | integer | nej | 1–100 | 50 | | `offset` | integer | nej | min 0 | 0 | **Returnerar:** `total` och `invoices[]` med `id`, `document_number`, `invoice_number`, `status`, `invoice_date`, `due_date`, `paid_date`, `currency`, `subtotal`, `vat_amount`, `total` och kundens `customer_number` och `name`. Personnummer skickas aldrig. > Vilka fakturor är förfallna just nu? ## get_invoice [#get_invoice] **Hämta kundfaktura.** Hämtar en kundfaktura med alla rader. Ange fakturans id, fakturanummer (t.ex. INV-0012) eller dokumentnummer. | Parameter | Typ | Krävs | Begränsning | Standard | |---|---|---|---|---| | `id` | string | ett av tre | UUID | | | `invoice_number` | string | ett av tre | max 50 tecken. Finns bara på utfärdade fakturor. | | | `document_number` | integer | ett av tre | positivt. Finns även på utkast. | | Anger du flera används `id` först, sedan `invoice_number`, sedan `document_number`. Anger du inget blir det fel. **Returnerar:** fakturan med bland annat `ocr_number`, `exchange_rate`, `vat_treatment`, `rounding_amount`, `notes`, `payment_reference`, `is_advance_invoice`, `tax_reduction_type`, kunden (`customer_number`, `name`, `org_number`, `email`) och `invoice_items[]` (`description`, `quantity`, `unit`, `unit_price`, `vat_rate`, `total`) i radordning. > Visa raderna på faktura INV-0012. ## list_supplier_invoices [#list_supplier_invoices] **Lista leverantörsfakturor.** Listar leverantörsfakturor (inköp), nyast först. Status: draft (ej registrerad), registered (registrerad/obetald), paid (betald), cancelled (makulerad). | Parameter | Typ | Krävs | Begränsning | Standard | |---|---|---|---|---| | `status` | enum | nej | `draft`, `registered`, `paid`, `cancelled` | | | `from_date` | string | nej | `ÅÅÅÅ-MM-DD` | | | `to_date` | string | nej | `ÅÅÅÅ-MM-DD` | | | `limit` | integer | nej | 1–100 | 50 | | `offset` | integer | nej | min 0 | 0 | **Returnerar:** `total` och `supplier_invoices[]` med `id`, `given_number`, `invoice_number`, `status`, `invoice_date`, `due_date`, `payment_date`, `currency`, `subtotal`, `vat_amount`, `total` och leverantörens `supplier_number` och `name`. > Vilka leverantörsfakturor är registrerade men obetalda? ## list_accounts [#list_accounts] **Lista konton.** Listar konton i företagets kontoplan (BAS). Sök på kontonummer (början) eller namn. Kontotyp: tillgang, skuld, eget_kapital, intakt, kostnad. | Parameter | Typ | Krävs | Begränsning | Standard | |---|---|---|---|---| | `search` | string | nej | max 100 tecken. Bara siffror = början av kontonumret, annars del av namnet. | | | `account_type` | enum | nej | `tillgang`, `skuld`, `eget_kapital`, `intakt`, `kostnad` | | **Returnerar:** `accounts[]` (`account_number`, `name`, `account_type`, `vat_code`), `total` och `truncated`. Bara aktiva konton, högst 500 per svar. Är listan kapad följer en `hint` om att söka smalare. > Vilket konto ska jag använda för bankavgifter? ## list_vouchers [#list_vouchers] **Lista verifikationer.** Listar bokförda verifikationer med konteringsrader (konto, debet, kredit) för en period, nyast först. Använd för att se vad som bokförts, t.ex. på ett visst konto eller en viss dag. | Parameter | Typ | Krävs | Begränsning | Standard | |---|---|---|---|---| | `from_date` | string | ja | `ÅÅÅÅ-MM-DD`, bokföringsdatum | | | `to_date` | string | ja | `ÅÅÅÅ-MM-DD`, inte före `from_date` | | | `account_number` | string | nej | exakt fyra siffror | | | `limit` | integer | nej | 1–50 | 25 | | `offset` | integer | nej | min 0 | 0 | **Returnerar:** `total` och `vouchers[]` med `id`, `series`, `number`, `date`, `description`, `source` och `lines[]` (`account_number`, `account_name`, `debit`, `credit`, `description`). Med kontofilter får du ändå alla rader på varje verifikation. > Vad har bokförts på 1930 i mars? ## get_income_statement [#get_income_statement] **Resultaträkning.** Beräknar resultaträkningen för en period: intäkter, kostnader per kategori, rörelseresultat och årets resultat. Belopp i kronor. | Parameter | Typ | Krävs | Begränsning | Standard | |---|---|---|---|---| | `from_date` | string | ja | `ÅÅÅÅ-MM-DD` | | | `to_date` | string | ja | `ÅÅÅÅ-MM-DD`, inte före `from_date` | | **Returnerar:** samma beräkning som resultaträkningen i appen. > Vad är resultatet hittills i år? ## get_balance_sheet [#get_balance_sheet] **Balansräkning.** Beräknar balansräkningen per ett datum: tillgångar, skulder och eget kapital per konto samt summor. Belopp i kronor. | Parameter | Typ | Krävs | Begränsning | Standard | |---|---|---|---|---| | `date` | string | nej | `ÅÅÅÅ-MM-DD` | i dag | **Returnerar:** samma beräkning som balansräkningen i appen. > Hur mycket eget kapital hade vi vid årsskiftet? ## get_owner_receivable [#get_owner_receivable] **Hämta fordran på delägare.** Visar hur mycket privata köp på företagets kort som står oreglerade som fordran på delägare (konto 1685), hur gammal fordran är och om den stoppar nästa lönekörning. Används för att föreslå hur den regleras: återbetalning, `propose_payroll_deduction` eller, bara för en anställd som inte är delägare eller VD, `propose_interest_benefit`. **Indata:** inga. **Returnerar:** `outstanding_sek`, `receivables[]` (`kind` = delägare (1685) eller anställd (1619), `outstanding_sek`, `age_days`, `blocks_payroll`), `age_days`, `crosses_fiscal_year_end`, `blocks_payroll` och `message`. > Stoppar fordran på delägare nästa lönekörning? ## list_employees [#list_employees] **Lista anställda.** Listar företagets aktiva anställda med id och namn, inget mer. Används för att välja vem ett förslag gäller, t.ex. `propose_interest_benefit`. **Indata:** inga. **Returnerar:** `employees[]` med `id`, `first_name`, `last_name`. Personnummer, lön och kontaktuppgifter lämnar inte Klirr. > Vilka anställda har vi? # Skapa (/mcp/verktyg/skapa) > De två verktyg som skriver direkt, utan godkännande. De här verktygen skriver direkt, men skapar inga bokföringsposter. Ett fakturautkast har inget fakturanummer och ingen verifikation. Båda går genom samma regler som appen. ## create_customer [#create_customer] **Skapa kund.** Skapar en ny kund i kundregistret. Kontrollera först med `list_customers` att kunden inte redan finns. Kundnumret tilldelas automatiskt. | Parameter | Typ | Krävs | Begränsning | Standard | |---|---|---|---|---| | `name` | string | ja | 1–1024 tecken | | | `org_number` | string | nej | max 20 tecken | | | `vat_number` | string | nej | max 20 tecken | | | `email` | string | nej | max 320 tecken | | | `phone` | string | nej | max 50 tecken | | | `address` | string | nej | max 1024 tecken | | | `postal_code` | string | nej | max 10 tecken | | | `city` | string | nej | max 200 tecken | | | `country_code` | string | nej | max 2 tecken, ISO 3166-1 | `SE` | | `notes` | string | nej | max 1024 tecken | | Värden trimmas, och tomma strängar räknas som inte angivna. **Returnerar:** `id`, `customer_number`, `name` och `message`. > Lägg upp Acme AB, org.nr 556677-8899, faktura@acme.se, som ny kund. ## create_invoice_draft [#create_invoice_draft] **Skapa fakturautkast.** Skapar ett UTKAST till kundfaktura. Utkastet får inget fakturanummer, bokförs inte och skickas inte. Användaren granskar och skickar det själv i Klirr. Beloppen anges exklusive moms; Klirr räknar ut moms och summor. Använd vanlig svensk moms (25, 12, 6 eller 0 procent). | Parameter | Typ | Krävs | Begränsning | Standard | |---|---|---|---|---| | `customer_number` | string | ett av två | max 50 tecken | | | `customer_id` | string | ett av två | UUID. Används före `customer_number`. | | | `invoice_date` | string | nej | `ÅÅÅÅ-MM-DD` | i dag | | `due_date` | string | nej | `ÅÅÅÅ-MM-DD`, inte före fakturadatum | fakturadatum + 30 dagar | | `notes` | string | nej | max 2000 tecken, visas på fakturan | | | `items` | array | ja | 1–200 rader | | Varje rad i `items`: | Fält | Typ | Krävs | Begränsning | |---|---|---|---| | `description` | string | ja | 1–1000 tecken | | `quantity` | number | ja | | | `unit_price` | number | ja | kronor exklusive moms | | `vat_rate` | number | ja | 25, 12, 6 eller 0 | Utkastet räknas mot planens fakturakvot. När kvoten är slut får du ett fel. **Returnerar:** `id`, `document_number`, `status`, `invoice_date`, `due_date`, `subtotal`, `vat_amount`, `total` och `message`. > Gör ett fakturautkast till kund 1004: 12 timmar konsulting à 950 kr, 25 % moms. # Uppföljning (/mcp/verktyg/uppfoljning) > Följ upp och återkalla assistentens egna förslag. De här verktygen ser bara förslag som gjorts via **samma koppling**. En assistent ser inte vad en annan koppling har föreslagit. Fälten i svaren: `id`, `action`, `preview`, `reason`, `status`, `expires_at`, `decided_at`, `result`, `error`, `created_at`. ## list_action_requests [#list_action_requests] **Lista mina förslag.** Listar förslagen du gjort via den här kopplingen och deras status: pending (väntar på godkännande), executed (godkänt och genomfört), failed (godkänt men misslyckades), rejected (avvisat), cancelled, expired. | Parameter | Typ | Krävs | Begränsning | Standard | |---|---|---|---|---| | `status` | enum | nej | `pending`, `executing`, `executed`, `failed`, `rejected`, `cancelled`, `expired` | | | `limit` | integer | nej | 1–50 | 20 | **Returnerar:** `action_requests[]`, nyast först. Ingen `offset`. > Vilka av dina förslag väntar fortfarande på mig? ## get_action_request [#get_action_request] **Hämta ett förslag.** Hämtar status och utfall för ett av dina förslag, t.ex. för att se om användaren har godkänt det och vilket fakturanummer eller verifikationsnummer det gav. | Parameter | Typ | Krävs | Begränsning | |---|---|---|---| | `id` | string | ja | UUID | **Returnerar:** förslaget med fälten ovan. `result` innehåller utfallet när det är genomfört. > Jag har godkänt nu. Vilket fakturanummer fick den? ## cancel_action_request [#cancel_action_request] **Återkalla ett förslag.** Återkallar ett av dina förslag som fortfarande väntar på godkännande, t.ex. om det var fel. Ett godkänt förslag kan inte återkallas. | Parameter | Typ | Krävs | Begränsning | |---|---|---|---| | `id` | string | ja | UUID | **Returnerar:** `id` och `status: "cancelled"`. Är förslaget redan avgjort får du felet "Förslaget hittades inte eller är redan avgjort." > Det förslaget var fel, ta bort det.