{"openapi":"3.1.0","info":{"title":"CRMdata API","version":"1.0.0","description":"Med CRMdatas API kan era egna system läsa och skriva det ni har i CRM:et: sparade företag, kontakter, anteckningar, händelser, uppgifter, affärer, ordrar, artiklar, taggar och ringlistor.\n\n## Nyckel\nVarje anrop skickar en API-nyckel i huvudet `Authorization: Bearer crmd_…`. Nycklar skapas av en administratör under Integrationer i appen. En nyckel hör till organisationen och kan antingen bara läsa (`read`) eller läsa och skriva (`write`). Nyckeln visas en gång när den skapas. Spara den på en server, aldrig i en webbsida eller app som andra kan läsa. Prova nyckeln med `GET /me`.\n\n## Format\nAllt är JSON (`Content-Type: application/json`). Fältnamn är på engelska. Id är uuid. Tidpunkter är ISO 8601 i UTC (`2026-10-05T12:00:00.000Z`), datum `ÅÅÅÅ-MM-DD`. Belopp är kronor med högst två decimaler i fält som slutar på `Sek`. Svar innehåller alltid alla fält; ett tomt värde är `null`. Med `PATCH` lämnas fält som inte skickas orörda, och `null` tömmer fältet. Okända fält nekas, så att stavfel inte går obemärkta förbi.\n\n## Listor\nListor svarar med `{ \"data\": [...], \"nextCursor\": \"…\" }`. Skicka `nextCursor` som `cursor` för att hämta nästa sida; `null` betyder att det inte finns fler rader. `limit` är 1 till 200 (standard 50). För stegvis synk: `sort=updatedAt&order=asc&updatedSince=<tidpunkt>`.\n\n## Fel\nFel svarar med `{ \"error\": { \"code\", \"message\", \"details\", \"requestId\" } }`. `code` är till för ert system, `message` är en text på svenska, och `details` pekar ut fälten som inte stämmer. Ange `requestId` (finns också i huvudet `X-Request-Id`) om ni hör av er till oss.\n\n## Säkra omförsök\nSkicka huvudet `Idempotency-Key` (till exempel ett uuid) med `POST`. Samma nyckel och samma innehåll inom 24 timmar ger samma svar igen, med `Idempotent-Replayed: true`, utan att något skapas två gånger. Gäller inte `POST /webhooks`: svaret har webhookens hemlighet och sparas därför aldrig.\n\n## Gränser\nHögst 300 anrop per minut och nyckel. Svaren visar läget i `X-RateLimit-Limit`, `X-RateLimit-Remaining` och `X-RateLimit-Reset` (sekunder tills räkningen börjar om). Över gränsen svarar API:t 429 med `Retry-After`. Är API:t tillfälligt upptaget (ingen ledig anslutning i tid) svarar det 503 `busy` med `Retry-After`: gör om anropet efter väntetiden. Ett anrop får vara högst 1 MB.\n\n## Personuppgifter\nPersonnummer lämnar aldrig API:t och sparas aldrig. Organisationsnummer för enskilda firmor visas maskerat (`ÅÅMMDD-xxxx`), och personnummer i text som skickas in maskeras på samma sätt.\n\n## Webhooks\n\nCRMdata kan själv meddela era system när något händer: skapa en webhook under Integrationer i appen eller med `POST /webhooks`. Varje händelse skickas som `POST` med JSON `{ \"id\", \"type\", \"occurredAt\", \"organizationId\", \"data\" }`, där `data` är objektet i samma form som API:t ger det (ett företag för `company.*`, en affär för `deal.*` och så vidare). Huvuden: `CRMdata-Event` (händelsetypen), `CRMdata-Delivery` (leveransens id), `CRMdata-Signature` och `User-Agent: CRMdata-Webhooks/1`. Svara 2xx inom 10 sekunder. Allt annat räknas som misslyckat (omdirigeringar följs inte) och vi försöker igen efter 1, 5, 30, 120, 360, 720 minuter, utom 410 Gone: då stängs webhooken av direkt (`status` `disabled`), utan nya försök. När 20 leveranser i rad inte har gått fram pausas webhooken; starta den igen i appen eller med `PATCH /webhooks/{id}`. Samma händelse kan i sällsynta fall komma två gånger: hantera dubbletter på `id`. Händelsetyperna finns i `GET /webhook-events`, och meddelandena beskrivs under `webhooks` i den här filen.\n\n**Kontrollera signaturen.** `CRMdata-Signature` är `t=<unix-sekunder>,v1=<hex hmac-sha256(hemlighet, t + \".\" + innehållet)>`. Räkna summan på innehållet exakt som det kom (de råa byten, inte en omskriven JSON), jämför med `v1`, och godta bara en tidsstämpel `t` som är högst 300 sekunder gammal.\n\n```js\n// Node.js. rawBody är innehållet som text eller Buffer, exakt som det kom (i Express: express.raw()).\nconst crypto = require(\"node:crypto\");\nfunction verifyCrmdataSignature(secret, header, rawBody) {\n  const m = /^t=(\\d+),v1=([0-9a-f]{64})$/.exec(header ?? \"\");\n  if (!m) return false;\n  if (Math.abs(Date.now() / 1000 - Number(m[1])) > 300) return false;\n  const expected = crypto.createHmac(\"sha256\", secret).update(`${m[1]}.`).update(rawBody).digest(\"hex\");\n  return crypto.timingSafeEqual(Buffer.from(expected, \"hex\"), Buffer.from(m[2], \"hex\"));\n}\n```\n\n```python\n# Python. raw_body är innehållet som bytes, exakt som det kom.\nimport hmac, hashlib, re, time\n\ndef verify_crmdata_signature(secret: str, header: str, raw_body: bytes) -> bool:\n    m = re.fullmatch(r\"t=(\\d+),v1=([0-9a-f]{64})\", header or \"\")\n    if not m or abs(time.time() - int(m.group(1))) > 300:\n        return False\n    expected = hmac.new(secret.encode(), f\"{m.group(1)}.\".encode() + raw_body, hashlib.sha256).hexdigest()\n    return hmac.compare_digest(expected, m.group(2))\n```"},"servers":[{"url":"https://tycho.crmdata.se/api/v1"}],"tags":[{"name":"Allmänt","description":"Prova att nyckeln fungerar och hämta beskrivningen av API:t."},{"name":"Företag","description":"Era sparade företag, med uppgifterna från företagsdatan (bransch, nyckeltal, köpkraft) och era egna fält."},{"name":"Kontakter","description":"Kontaktpersoner på era sparade företag."},{"name":"Anteckningar","description":"Anteckningar på företag."},{"name":"Händelser","description":"Tidslinjen på ett företag: samtal, möten, mejl och annat som har hänt."},{"name":"Uppgifter","description":"Uppgifter och påminnelser, med ansvarig och datum."},{"name":"Affärer","description":"Affärer i era pipelines, och pipelines med sina steg."},{"name":"Ordrar","description":"Ordrar med rader. Att göra om en order till faktura och skicka den till Fortnox görs i appen."},{"name":"Artiklar","description":"Artiklarna som används på orderrader."},{"name":"Ringlistor","description":"Ringlistor med företagen som ska ringas."},{"name":"Taggar","description":"Taggarna som finns i organisationen. Taggar sätts på företag."},{"name":"Användare","description":"Användarna i organisationen, för att kunna ange ansvarig."},{"name":"Webhooks","description":"Låt CRMdata meddela era system när något händer."}],"security":[{"bearerAuth":[]}],"paths":{"/me":{"get":{"operationId":"getMe","tags":["Allmänt"],"summary":"Prova nyckeln","description":"Visar vilken organisation nyckeln hör till, vad nyckeln får göra och vilka gränser som gäller. Ändrar ingenting: bra som första anrop för att se att nyckeln fungerar.","x-scope":"read","responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"},"example":{"organization":{"id":"7d2f9c4a1b8e4f06a3c5d9e2b1f04a77","name":"Exempelbolaget AB","slug":"exempelbolaget"},"key":{"id":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","name":"Webbformulär","scope":"write","prefix":"crmd_Ab12Cd34"},"limits":{"requestsPerMinute":300,"maxBodyBytes":1048576,"pageSizeDefault":50,"pageSizeMax":200}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/openapi.json":{"get":{"operationId":"getOpenapiJson","tags":["Allmänt"],"summary":"Hämta beskrivningen av API:t","description":"Hela API:t beskrivet som OpenAPI 3.1, för verktyg som läser sådana filer (till exempel för att skapa en klient eller prova anrop). Kräver ingen nyckel.","security":[],"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"OpenAPI-dokumentet."}}}},"400":{"$ref":"#/components/responses/BadRequest"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/companies":{"get":{"operationId":"getCompanies","tags":["Företag"],"summary":"Lista företag","description":"Era sparade företag, nyast först. Filtren går att kombinera: ett företag ska stämma med alla som anges. Arkiverade företag kommer bara med när archived=true. För att hämta det som ändrats sedan sist: sort=updatedAt&order=asc&updatedSince=<tidpunkt>.","x-scope":"read","parameters":[{"name":"limit","in":"query","required":false,"description":"Antal rader per sida, 1 till 200. Standard 50.","schema":{"default":50,"type":"integer","minimum":1,"maximum":200}},{"name":"cursor","in":"query","required":false,"description":"Värdet i nextCursor från förra svaret, för att hämta nästa sida. Utelämnas för första sidan.","schema":{"type":"string","minLength":1,"maxLength":400}},{"name":"sort","in":"query","required":false,"description":"Sortering: createdAt eller updatedAt. Standard createdAt.","schema":{"default":"createdAt","type":"string","enum":["createdAt","updatedAt"]}},{"name":"order","in":"query","required":false,"description":"Ordning: desc (nyast först, standard) eller asc (äldst först).","schema":{"default":"desc","type":"string","enum":["asc","desc"]}},{"name":"updatedSince","in":"query","required":false,"description":"Bara det som ändrats efter den här tidpunkten: rader med updatedAt senare än den, räknat i millisekunder (raden med exakt samma updatedAt som ni skickar kommer inte med igen). För stegvis synk: sort=updatedAt&order=asc&updatedSince=<senaste updatedAt ni fått>.","schema":{"type":"string","format":"date-time"}},{"name":"q","in":"query","required":false,"description":"Sökord: träffar företag vars namn eller alias innehåller texten. Innehåller sökordet minst fyra siffror söks också organisationsnumret, utom för enskilda firmor (sök dem på namnet eller med orgNr). Ett personnummer i sökordet söks maskerat, ÅÅMMDD-xxxx, så som det visas.","schema":{"type":"string","maxLength":200}},{"name":"orgNr","in":"query","required":false,"description":"Organisationsnummer, i vilket vanligt skrivsätt som helst: 556123-4567, 5561234567 eller 165561234567. En enskild firma söks med det maskerade numret, ÅÅMMDD-xxxx; ett helt personnummer söks på samma sätt, som sitt maskerade nummer.","schema":{"type":"string","maxLength":30}},{"name":"tag","in":"query","required":false,"description":"Bara företag med den här taggen (taggens namn, utan hänsyn till stora och små bokstäver).","schema":{"type":"string","maxLength":200}},{"name":"ownerUserId","in":"query","required":false,"description":"Bara företag där den här användaren är ansvarig.","schema":{"type":"string","minLength":1,"maxLength":64}},{"name":"countyCode","in":"query","required":false,"description":"Bara företag i det här länet. SCB-kod med två siffror, till exempel 03 för Uppsala län.","schema":{"type":"string","pattern":"^\\d{2}$"}},{"name":"municipalityCode","in":"query","required":false,"description":"Bara företag i den här kommunen. SCB-kod med fyra siffror, till exempel 0380 för Uppsala.","schema":{"type":"string","pattern":"^\\d{4}$"}},{"name":"archived","in":"query","required":false,"description":"true = bara arkiverade företag. Utelämnat eller false = bara företag som inte är arkiverade, som listan i appen.","schema":{"type":"string","enum":["true","false"]}}],"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Company"},"description":"Raderna på den här sidan."},"nextCursor":{"description":"Skicka som cursor för att hämta nästa sida. null när det inte finns fler rader.","type":["string","null"]}},"required":["data","nextCursor"]},"example":{"data":[{"id":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","customerNumber":1042,"name":"Nordisk Fönsterteknik AB","alias":"Fönsterteknik","orgNr":"559900-1236","isSoleProprietor":false,"legalFormCode":"AB","legalForm":"Aktiebolag","linkedToCompanyData":true,"companyDataDate":"2026-09-28","sniCode":"43320","sniLabel":"Byggnadssnickeriarbeten","industryCode":"4120","industryLabel":"Fönster och dörrar","purchasingPower":"PP","purchasingPowerLevel":4,"keyFigures":{"fiscalYear":2025,"revenueKsek":48200,"netProfitKsek":3100,"employees":24,"previousRevenueKsek":44750,"previousNetProfitKsek":2650,"previousEmployees":22},"status":"Offert","ownerUserId":"pQ7mX2kV9sLwT4bN8cRd3fGh","phone":"018-555 01 20","email":"info@nordiskfonsterteknik.example","website":"https://nordiskfonsterteknik.example","visitStreet":"Verkstadsgatan 12","visitPostalCode":"753 23","visitCity":"Uppsala","countyCode":"03","countyName":"Uppsala län","municipalityCode":"0380","municipalityName":"Uppsala","invoiceName":"Nordisk Fönsterteknik AB","invoiceStreet":"Box 1234","invoicePostalCode":"751 42","invoiceCity":"Uppsala","invoiceEmail":"faktura@nordiskfonsterteknik.example","paymentTermsDays":30,"description":"Tillverkar och monterar fönster åt bostadsrättsföreningar i Mälardalen.","doNotContact":false,"doNotContactReason":null,"doNotContactAt":null,"tags":["Mässa 2026","VIP"],"lastContactAt":"2026-10-02T08:15:00.000Z","fortnoxCustomerNumber":"1042","archivedAt":null,"createdBy":"pQ7mX2kV9sLwT4bN8cRd3fGh","createdAt":"2026-03-14T09:30:00.000Z","updatedAt":"2026-10-02T08:15:00.000Z"}],"nextCursor":null}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}},"post":{"operationId":"postCompanies","tags":["Företag"],"summary":"Lägg till ett företag","description":"Sparar ett nytt företag, på samma sätt som Nytt företag i appen. Med organisationsnummer letas företaget upp i företagsdatan: finns det där sparas det därifrån, med officiellt namn, bolagsform, bransch, nyckeltal och köpkraft, och det ni skickade fyller i det som saknas (telefon, e-post, webbplats och besöksadress). Finns det inte där, eller skickas inget organisationsnummer, sparas företaget med det ni skickade. Har ni redan ett sparat företag med samma organisationsnummer skapas inget nytt: svaret är 409 med det befintliga företagets id i existingId. Företaget får ett kundnummer och händelsen syns i tidslinjen. Ansvarig, alias och taggar sätts efteråt med PATCH. Högst 500 nya företag per nyckel och dag (svensk tid): över det svarar API:t 429 rate_limited med Retry-After, sekunderna till midnatt. Ett anrop som inte skapar något företag (till exempel 409) räknas inte.","x-scope":"write","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Företagets namn. Finns organisationsnumret i företagsdatan används det officiella namnet därifrån i stället.","type":"string","minLength":1,"maxLength":200},"orgNr":{"description":"Organisationsnummer med 10 siffror, med eller utan bindestreck (556123-4567). Valfritt. För en enskild firma är numret ägarens personnummer: det används bara för att känna igen firman och sparas maskerat (ÅÅMMDD-xxxx).","anyOf":[{"type":"string","maxLength":30},{"type":"null"}]},"visitStreet":{"description":"Besöksadress: gata.","anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"visitPostalCode":{"description":"Besöksadress: postnummer.","anyOf":[{"type":"string","maxLength":20},{"type":"null"}]},"visitCity":{"description":"Besöksadress: ort. Heter orten som en kommun sätts län och kommun efter den.","anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"phone":{"description":"Telefonnummer (växel). Ett personnummer godtas inte.","anyOf":[{"type":"string","maxLength":50},{"type":"null"}]},"email":{"description":"E-postadress till företaget.","anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"website":{"description":"Webbplats.","anyOf":[{"type":"string","maxLength":300},{"type":"null"}]}},"required":["name"],"additionalProperties":false},"example":{"name":"Nordisk Fönsterteknik AB","orgNr":"559900-1236","phone":"018-555 01 20","email":"info@nordiskfonsterteknik.example","visitCity":"Uppsala"}}}},"responses":{"201":{"description":"Skapat. Location har adressen till det som skapades.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Location":{"$ref":"#/components/headers/Location"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Company"},"example":{"id":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","customerNumber":1042,"name":"Nordisk Fönsterteknik AB","alias":null,"orgNr":"559900-1236","isSoleProprietor":false,"legalFormCode":"AB","legalForm":"Aktiebolag","linkedToCompanyData":true,"companyDataDate":"2026-09-28","sniCode":"43320","sniLabel":"Byggnadssnickeriarbeten","industryCode":"4120","industryLabel":"Fönster och dörrar","purchasingPower":"PP","purchasingPowerLevel":4,"keyFigures":{"fiscalYear":2025,"revenueKsek":48200,"netProfitKsek":3100,"employees":24,"previousRevenueKsek":44750,"previousNetProfitKsek":2650,"previousEmployees":22},"status":"Obearbetad","ownerUserId":null,"phone":"018-555 01 20","email":"info@nordiskfonsterteknik.example","website":"https://nordiskfonsterteknik.example","visitStreet":"Verkstadsgatan 12","visitPostalCode":"753 23","visitCity":"Uppsala","countyCode":"03","countyName":"Uppsala län","municipalityCode":"0380","municipalityName":"Uppsala","invoiceName":"Nordisk Fönsterteknik AB","invoiceStreet":"Box 1234","invoicePostalCode":"751 42","invoiceCity":"Uppsala","invoiceEmail":"faktura@nordiskfonsterteknik.example","paymentTermsDays":30,"description":"Tillverkar och monterar fönster åt bostadsrättsföreningar i Mälardalen.","doNotContact":false,"doNotContactReason":null,"doNotContactAt":null,"tags":[],"lastContactAt":null,"fortnoxCustomerNumber":null,"archivedAt":null,"createdBy":null,"createdAt":"2026-10-05T12:00:00.000Z","updatedAt":"2026-10-05T12:00:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/companies/{id}":{"get":{"operationId":"getCompaniesById","tags":["Företag"],"summary":"Hämta ett företag","description":"Ett sparat företag med uppgifterna från företagsdatan, era egna fält, status och taggar.","x-scope":"read","parameters":[{"name":"id","in":"path","required":true,"description":"Id (uuid).","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Company"},"example":{"id":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","customerNumber":1042,"name":"Nordisk Fönsterteknik AB","alias":"Fönsterteknik","orgNr":"559900-1236","isSoleProprietor":false,"legalFormCode":"AB","legalForm":"Aktiebolag","linkedToCompanyData":true,"companyDataDate":"2026-09-28","sniCode":"43320","sniLabel":"Byggnadssnickeriarbeten","industryCode":"4120","industryLabel":"Fönster och dörrar","purchasingPower":"PP","purchasingPowerLevel":4,"keyFigures":{"fiscalYear":2025,"revenueKsek":48200,"netProfitKsek":3100,"employees":24,"previousRevenueKsek":44750,"previousNetProfitKsek":2650,"previousEmployees":22},"status":"Offert","ownerUserId":"pQ7mX2kV9sLwT4bN8cRd3fGh","phone":"018-555 01 20","email":"info@nordiskfonsterteknik.example","website":"https://nordiskfonsterteknik.example","visitStreet":"Verkstadsgatan 12","visitPostalCode":"753 23","visitCity":"Uppsala","countyCode":"03","countyName":"Uppsala län","municipalityCode":"0380","municipalityName":"Uppsala","invoiceName":"Nordisk Fönsterteknik AB","invoiceStreet":"Box 1234","invoicePostalCode":"751 42","invoiceCity":"Uppsala","invoiceEmail":"faktura@nordiskfonsterteknik.example","paymentTermsDays":30,"description":"Tillverkar och monterar fönster åt bostadsrättsföreningar i Mälardalen.","doNotContact":false,"doNotContactReason":null,"doNotContactAt":null,"tags":["Mässa 2026","VIP"],"lastContactAt":"2026-10-02T08:15:00.000Z","fortnoxCustomerNumber":"1042","archivedAt":null,"createdBy":"pQ7mX2kV9sLwT4bN8cRd3fGh","createdAt":"2026-03-14T09:30:00.000Z","updatedAt":"2026-10-02T08:15:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}},"patch":{"operationId":"patchCompaniesById","tags":["Företag"],"summary":"Ändra ett företag","description":"Ändrar era egna uppgifter på företaget: alias, ansvarig, telefon, e-post, webbplats, adresser, fakturauppgifter, betalningsvillkor, beskrivning, spärren för kontakt och taggarna. Fält som inte skickas lämnas orörda, och null tömmer fältet. Uppgifterna från företagsdatan (namn, organisationsnummer, bolagsform, bransch, nyckeltal och köpkraft) går inte att ändra, och inte heller län och kommun på ett företag som är kopplat dit. Ett företag går inte att arkivera eller ta bort via API:t. Allt kontrolleras innan något sparas.","x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"Id (uuid).","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"alias":{"description":"Ert eget namn på företaget. null tar bort aliaset.","anyOf":[{"type":"string","maxLength":120},{"type":"null"}]},"ownerUserId":{"description":"Ansvarig användare. Måste vara en användare i organisationen (GET /users). null = ingen ansvarig.","anyOf":[{"type":"string","minLength":1,"maxLength":64,"description":"Användarens id. Hämtas med GET /users."},{"type":"null"}]},"phone":{"description":"Telefonnummer (växel). Ett personnummer godtas inte.","anyOf":[{"type":"string","maxLength":50},{"type":"null"}]},"email":{"description":"E-postadress till företaget.","anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"website":{"description":"Webbplats.","anyOf":[{"type":"string","maxLength":300},{"type":"null"}]},"visitStreet":{"description":"Besöksadress: gata.","anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"visitPostalCode":{"description":"Besöksadress: postnummer.","anyOf":[{"type":"string","maxLength":20},{"type":"null"}]},"visitCity":{"description":"Besöksadress: ort.","anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"countyCode":{"description":"Län som SCB-kod, två siffror. Går bara att ändra på företag som inte är kopplade till företagsdatan. Ett annat län tar bort en kommun som inte ligger där; null tar bort både län och kommun.","anyOf":[{"type":"string","pattern":"^\\d{2}$"},{"type":"null"}]},"municipalityCode":{"description":"Kommun som SCB-kod, fyra siffror. Går bara att ändra på företag som inte är kopplade till företagsdatan. Kommunen bestämmer länet. null tar bort kommunen.","anyOf":[{"type":"string","pattern":"^\\d{4}$"},{"type":"null"}]},"invoiceName":{"description":"Fakturauppgifter: mottagarens namn.","anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"invoiceStreet":{"description":"Fakturauppgifter: gata eller box.","anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"invoicePostalCode":{"description":"Fakturauppgifter: postnummer.","anyOf":[{"type":"string","maxLength":20},{"type":"null"}]},"invoiceCity":{"description":"Fakturauppgifter: ort.","anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"invoiceEmail":{"description":"Fakturauppgifter: e-postadress som fakturor skickas till.","anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"paymentTermsDays":{"description":"Betalningsvillkor i dagar, 0 till 120. Går inte att tömma.","type":"integer","minimum":0,"maximum":120},"description":{"description":"Beskrivning av företaget.","anyOf":[{"type":"string","maxLength":5000},{"type":"null"}]},"doNotContact":{"description":"true spärrar företaget för kontakt (det kommer inte med i ringlistor och utskick). false tar bort spärren.","type":"boolean"},"doNotContactReason":{"description":"Skälet till spärren, till exempel Begärt av företaget. Kan bara anges tillsammans med doNotContact: true.","anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"tags":{"description":"Hela listan med företagets taggar, som namn. Taggar som inte står med tas bort från företaget, och de som saknas läggs till. En tagg som inte finns i organisationen skapas (högst 40 tecken). En tom lista tar bort alla taggar.","maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}}},"additionalProperties":false},"example":{"alias":"Fönsterteknik","ownerUserId":"pQ7mX2kV9sLwT4bN8cRd3fGh","invoiceEmail":"faktura@nordiskfonsterteknik.example","paymentTermsDays":30,"tags":["VIP","Mässa 2026"]}}}},"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Company"},"example":{"id":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","customerNumber":1042,"name":"Nordisk Fönsterteknik AB","alias":"Fönsterteknik","orgNr":"559900-1236","isSoleProprietor":false,"legalFormCode":"AB","legalForm":"Aktiebolag","linkedToCompanyData":true,"companyDataDate":"2026-09-28","sniCode":"43320","sniLabel":"Byggnadssnickeriarbeten","industryCode":"4120","industryLabel":"Fönster och dörrar","purchasingPower":"PP","purchasingPowerLevel":4,"keyFigures":{"fiscalYear":2025,"revenueKsek":48200,"netProfitKsek":3100,"employees":24,"previousRevenueKsek":44750,"previousNetProfitKsek":2650,"previousEmployees":22},"status":"Offert","ownerUserId":"pQ7mX2kV9sLwT4bN8cRd3fGh","phone":"018-555 01 20","email":"info@nordiskfonsterteknik.example","website":"https://nordiskfonsterteknik.example","visitStreet":"Verkstadsgatan 12","visitPostalCode":"753 23","visitCity":"Uppsala","countyCode":"03","countyName":"Uppsala län","municipalityCode":"0380","municipalityName":"Uppsala","invoiceName":"Nordisk Fönsterteknik AB","invoiceStreet":"Box 1234","invoicePostalCode":"751 42","invoiceCity":"Uppsala","invoiceEmail":"faktura@nordiskfonsterteknik.example","paymentTermsDays":30,"description":"Tillverkar och monterar fönster åt bostadsrättsföreningar i Mälardalen.","doNotContact":false,"doNotContactReason":null,"doNotContactAt":null,"tags":["Mässa 2026","VIP"],"lastContactAt":"2026-10-02T08:15:00.000Z","fortnoxCustomerNumber":"1042","archivedAt":null,"createdBy":"pQ7mX2kV9sLwT4bN8cRd3fGh","createdAt":"2026-03-14T09:30:00.000Z","updatedAt":"2026-10-02T08:15:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/contacts":{"get":{"operationId":"getContacts","tags":["Kontakter"],"summary":"Lista kontakter","description":"Kontakterna på organisationens sparade företag, nyast först. Med companyId: bara kontakterna på det företaget. Med email går det att slå upp vem en e-postadress hör till, och q söker i namn och e-postadress.","x-scope":"read","parameters":[{"name":"limit","in":"query","required":false,"description":"Antal rader per sida, 1 till 200. Standard 50.","schema":{"default":50,"type":"integer","minimum":1,"maximum":200}},{"name":"cursor","in":"query","required":false,"description":"Värdet i nextCursor från förra svaret, för att hämta nästa sida. Utelämnas för första sidan.","schema":{"type":"string","minLength":1,"maxLength":400}},{"name":"sort","in":"query","required":false,"description":"Sortering: createdAt eller updatedAt. Standard createdAt.","schema":{"default":"createdAt","type":"string","enum":["createdAt","updatedAt"]}},{"name":"order","in":"query","required":false,"description":"Ordning: desc (nyast först, standard) eller asc (äldst först).","schema":{"default":"desc","type":"string","enum":["asc","desc"]}},{"name":"updatedSince","in":"query","required":false,"description":"Bara det som ändrats efter den här tidpunkten: rader med updatedAt senare än den, räknat i millisekunder (raden med exakt samma updatedAt som ni skickar kommer inte med igen). För stegvis synk: sort=updatedAt&order=asc&updatedSince=<senaste updatedAt ni fått>.","schema":{"type":"string","format":"date-time"}},{"name":"companyId","in":"query","required":false,"description":"Bara kontakter på det här företaget.","schema":{"type":"string","format":"uuid"}},{"name":"email","in":"query","required":false,"description":"Bara kontakter med exakt den här e-postadressen. Stora och små bokstäver spelar ingen roll.","schema":{"type":"string","minLength":1,"maxLength":200}},{"name":"q","in":"query","required":false,"description":"Sök i namn och e-postadress. En del av texten räcker. Ett personnummer söks maskerat, ÅÅMMDD-xxxx, så som det visas.","schema":{"type":"string","minLength":1,"maxLength":100}}],"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Contact"},"description":"Raderna på den här sidan."},"nextCursor":{"description":"Skicka som cursor för att hämta nästa sida. null när det inte finns fler rader.","type":["string","null"]}},"required":["data","nextCursor"]},"example":{"data":[{"id":"7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f","companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","name":"Anna Lindqvist","firstName":"Anna","lastName":"Lindqvist","title":"Inköpschef","email":"anna.lindqvist@exempelbolaget.se","phone":"08-465 004 12","mobile":"070-174 06 12","linkedinUrl":"https://www.linkedin.com/in/anna-lindqvist-exempel","notes":"Nås bäst på förmiddagar.","isPrimary":true,"source":"manual","createdBy":null,"createdAt":"2026-10-05T12:00:00.000Z","updatedAt":"2026-10-05T12:00:00.000Z"}],"nextCursor":null}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}},"post":{"operationId":"postContacts","tags":["Kontakter"],"summary":"Lägg till en kontakt","description":"Lägger till en kontakt på ett sparat företag, precis som + Ny kontakt i appen. Namnet måste finnas: antingen name, eller firstName och lastName som då sätts ihop. Företagets första kontakt blir huvudkontakt. Kontakten syns i företagets tidslinje. Har någon i organisationen kopplat sin Outlook hämtas äldre mejl till och från e-postadressen i bakgrunden. Samma person kan läggas till flera gånger: slå upp e-postadressen med GET /contacts?email=… först om ni vill undvika dubbletter.","x-scope":"write","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","description":"Företaget som kontakten ska läggas på."},"name":{"description":"Fullständigt namn. Utelämnas det sätts namnet ihop av firstName och lastName. Namnet eller minst en av delarna måste finnas.","anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"firstName":{"description":"Förnamn.","anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"lastName":{"description":"Efternamn.","anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"title":{"description":"Titel eller roll, till exempel Inköpschef.","anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"email":{"description":"E-postadress.","anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"phone":{"description":"Telefonnummer. Ett personnummer godtas inte.","anyOf":[{"type":"string","maxLength":50},{"type":"null"}]},"mobile":{"description":"Mobilnummer. Ett personnummer godtas inte.","anyOf":[{"type":"string","maxLength":50},{"type":"null"}]},"linkedinUrl":{"description":"Länk till kontaktens sida på LinkedIn. Bara adresser på linkedin.com godtas (annars 422 med fältet linkedinUrl); länken sparas med https://.","anyOf":[{"type":"string","maxLength":300},{"type":"null"}]},"notes":{"description":"Egen notering om kontakten. Personnummer i texten maskeras.","anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]}},"required":["companyId"],"additionalProperties":false},"example":{"companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","firstName":"Anna","lastName":"Lindqvist","title":"Inköpschef","email":"anna.lindqvist@exempelbolaget.se","mobile":"070-174 06 12"}}}},"responses":{"201":{"description":"Skapat. Location har adressen till det som skapades.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Location":{"$ref":"#/components/headers/Location"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"},"example":{"id":"7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f","companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","name":"Anna Lindqvist","firstName":"Anna","lastName":"Lindqvist","title":"Inköpschef","email":"anna.lindqvist@exempelbolaget.se","phone":null,"mobile":"070-174 06 12","linkedinUrl":null,"notes":null,"isPrimary":true,"source":"manual","createdBy":null,"createdAt":"2026-10-05T12:00:00.000Z","updatedAt":"2026-10-05T12:00:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/contacts/{id}":{"get":{"operationId":"getContactsById","tags":["Kontakter"],"summary":"Hämta en kontakt","description":"En kontakt med alla sina uppgifter.","x-scope":"read","parameters":[{"name":"id","in":"path","required":true,"description":"Id (uuid).","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"},"example":{"id":"7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f","companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","name":"Anna Lindqvist","firstName":"Anna","lastName":"Lindqvist","title":"Inköpschef","email":"anna.lindqvist@exempelbolaget.se","phone":"08-465 004 12","mobile":"070-174 06 12","linkedinUrl":"https://www.linkedin.com/in/anna-lindqvist-exempel","notes":"Nås bäst på förmiddagar.","isPrimary":true,"source":"manual","createdBy":null,"createdAt":"2026-10-05T12:00:00.000Z","updatedAt":"2026-10-05T12:00:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}},"patch":{"operationId":"patchContactsById","tags":["Kontakter"],"summary":"Ändra en kontakt","description":"Ändrar en kontakts uppgifter. Fält som inte skickas lämnas orörda, och null tömmer fältet. Namnet går inte att ta bort: med name null sätts det ihop av firstName och lastName. name ändras inte av att bara firstName eller lastName ändras. isPrimary true gör kontakten till företagets huvudkontakt. På en styrelsekontakt (source board) kommer namn och roll från företagsdatan: name och title går inte att ändra där, övriga fält går bra. En ny e-postadress gör att äldre mejl till och från den hämtas i bakgrunden, om någon har kopplat sin Outlook.","x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"Id (uuid).","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Fullständigt namn. null: namnet sätts ihop av firstName och lastName. Går inte att ändra på en styrelsekontakt (source board).","anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"firstName":{"description":"Förnamn.","anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"lastName":{"description":"Efternamn.","anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"title":{"description":"Titel eller roll. Går inte att ändra på en styrelsekontakt (source board).","anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"email":{"description":"E-postadress.","anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"phone":{"description":"Telefonnummer. Ett personnummer godtas inte.","anyOf":[{"type":"string","maxLength":50},{"type":"null"}]},"mobile":{"description":"Mobilnummer. Ett personnummer godtas inte.","anyOf":[{"type":"string","maxLength":50},{"type":"null"}]},"linkedinUrl":{"description":"Länk till kontaktens sida på LinkedIn. Bara adresser på linkedin.com godtas (annars 422 med fältet linkedinUrl); länken sparas med https://.","anyOf":[{"type":"string","maxLength":300},{"type":"null"}]},"notes":{"description":"Egen notering om kontakten. Personnummer i texten maskeras.","anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"isPrimary":{"description":"true gör kontakten till företagets huvudkontakt; den som var det förut slutar vara det. En huvudkontakt tas inte bort med false: gör en annan kontakt till huvudkontakt i stället.","type":"boolean"}},"additionalProperties":false},"example":{"title":"Inköpsdirektör","mobile":"070-174 06 12","isPrimary":true}}}},"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"},"example":{"id":"7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f","companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","name":"Anna Lindqvist","firstName":"Anna","lastName":"Lindqvist","title":"Inköpsdirektör","email":"anna.lindqvist@exempelbolaget.se","phone":"08-465 004 12","mobile":"070-174 06 12","linkedinUrl":"https://www.linkedin.com/in/anna-lindqvist-exempel","notes":"Nås bäst på förmiddagar.","isPrimary":true,"source":"manual","createdBy":null,"createdAt":"2026-10-05T12:00:00.000Z","updatedAt":"2026-10-06T08:30:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}},"delete":{"operationId":"deleteContactsById","tags":["Kontakter"],"summary":"Radera en kontakt","description":"Raderar kontakten för gott. Det går inte att ångra. Anteckningar, uppgifter och händelser som pekade på kontakten finns kvar, utan kontakt. Raderas huvudkontakten står företaget utan huvudkontakt tills en annan kontakt görs till det.","x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"Id (uuid).","schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Det gick bra. Svaret har inget innehåll.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/notes":{"get":{"operationId":"getNotes","tags":["Anteckningar"],"summary":"Lista anteckningar","description":"Anteckningarna i organisationen, nyast först. Med companyId: bara anteckningarna på det företaget.","x-scope":"read","parameters":[{"name":"limit","in":"query","required":false,"description":"Antal rader per sida, 1 till 200. Standard 50.","schema":{"default":50,"type":"integer","minimum":1,"maximum":200}},{"name":"cursor","in":"query","required":false,"description":"Värdet i nextCursor från förra svaret, för att hämta nästa sida. Utelämnas för första sidan.","schema":{"type":"string","minLength":1,"maxLength":400}},{"name":"sort","in":"query","required":false,"description":"Sortering: createdAt eller updatedAt. Standard createdAt.","schema":{"default":"createdAt","type":"string","enum":["createdAt","updatedAt"]}},{"name":"order","in":"query","required":false,"description":"Ordning: desc (nyast först, standard) eller asc (äldst först).","schema":{"default":"desc","type":"string","enum":["asc","desc"]}},{"name":"updatedSince","in":"query","required":false,"description":"Bara det som ändrats efter den här tidpunkten: rader med updatedAt senare än den, räknat i millisekunder (raden med exakt samma updatedAt som ni skickar kommer inte med igen). För stegvis synk: sort=updatedAt&order=asc&updatedSince=<senaste updatedAt ni fått>.","schema":{"type":"string","format":"date-time"}},{"name":"companyId","in":"query","required":false,"description":"Bara anteckningar på det här företaget.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Note"},"description":"Raderna på den här sidan."},"nextCursor":{"description":"Skicka som cursor för att hämta nästa sida. null när det inte finns fler rader.","type":["string","null"]}},"required":["data","nextCursor"]},"example":{"data":[{"id":"9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d","companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","contactId":"7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f","title":"Möte online","body":"Gick igenom offerten med Anna. De vill ha ett pris på tre år i stället för två och återkommer efter styrelsemötet i november.","createdBy":null,"createdAt":"2026-10-05T12:00:00.000Z","updatedAt":"2026-10-05T12:00:00.000Z"}],"nextCursor":null}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}},"post":{"operationId":"postNotes","tags":["Anteckningar"],"summary":"Skriv en anteckning","description":"Skriver en anteckning på ett sparat företag. Den syns under Anteckningar och i företagets tidslinje, precis som en anteckning skriven i appen. En anteckning räknas inte som kontakt: ska ett samtal, möte eller mejl loggas, använd POST /activities.","x-scope":"write","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","description":"Företaget som anteckningen ska ligga på."},"title":{"description":"Rubrik (valfri), till exempel Möte online.","anyOf":[{"type":"string","maxLength":120},{"type":"null"}]},"body":{"description":"Anteckningens text. Personnummer i texten maskeras.","type":"string","minLength":1,"maxLength":20000},"contactId":{"description":"Kontakten som anteckningen gäller (valfri). Ska vara en av företagets kontakter.","anyOf":[{"type":"string","format":"uuid","description":"Id (uuid)."},{"type":"null"}]}},"required":["companyId","body"],"additionalProperties":false},"example":{"companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","title":"Möte online","body":"Gick igenom offerten med Anna. De vill ha ett pris på tre år i stället för två och återkommer efter styrelsemötet i november.","contactId":"7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f"}}}},"responses":{"201":{"description":"Skapat. Location har adressen till det som skapades.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Location":{"$ref":"#/components/headers/Location"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Note"},"example":{"id":"9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d","companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","contactId":"7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f","title":"Möte online","body":"Gick igenom offerten med Anna. De vill ha ett pris på tre år i stället för två och återkommer efter styrelsemötet i november.","createdBy":null,"createdAt":"2026-10-05T12:00:00.000Z","updatedAt":"2026-10-05T12:00:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/notes/{id}":{"get":{"operationId":"getNotesById","tags":["Anteckningar"],"summary":"Hämta en anteckning","description":"En anteckning med hela sin text.","x-scope":"read","parameters":[{"name":"id","in":"path","required":true,"description":"Id (uuid).","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Note"},"example":{"id":"9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d","companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","contactId":"7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f","title":"Möte online","body":"Gick igenom offerten med Anna. De vill ha ett pris på tre år i stället för två och återkommer efter styrelsemötet i november.","createdBy":null,"createdAt":"2026-10-05T12:00:00.000Z","updatedAt":"2026-10-05T12:00:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}},"delete":{"operationId":"deleteNotesById","tags":["Anteckningar"],"summary":"Radera en anteckning","description":"Raderar anteckningen för gott, också ur företagets tidslinje. Det går inte att ångra.","x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"Id (uuid).","schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Det gick bra. Svaret har inget innehåll.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/activities":{"get":{"operationId":"getActivities","tags":["Händelser"],"summary":"Lista händelser (tidslinjen)","description":"Tidslinjen: allt som har hänt på organisationens sparade företag, det senaste först. Med companyId: tidslinjen för det företaget, som på kundkortet i appen. Med type: bara en sorts händelse. Listan sorteras på när det hände (occurredAt). Händelser går inte att ändra eller ta bort, så för stegvis synk räcker det att hämta det som lagts till: sort=createdAt&order=asc&updatedSince=<tidpunkt>. Mejl och möten som hämtats från Outlook visas inte i API:t.","x-scope":"read","parameters":[{"name":"limit","in":"query","required":false,"description":"Antal rader per sida, 1 till 200. Standard 50.","schema":{"default":50,"type":"integer","minimum":1,"maximum":200}},{"name":"cursor","in":"query","required":false,"description":"Värdet i nextCursor från förra svaret, för att hämta nästa sida. Utelämnas för första sidan.","schema":{"type":"string","minLength":1,"maxLength":400}},{"name":"sort","in":"query","required":false,"description":"Sortering: occurredAt eller createdAt. Standard occurredAt.","schema":{"default":"occurredAt","type":"string","enum":["occurredAt","createdAt"]}},{"name":"order","in":"query","required":false,"description":"Ordning: desc (nyast först, standard) eller asc (äldst först).","schema":{"default":"desc","type":"string","enum":["asc","desc"]}},{"name":"updatedSince","in":"query","required":false,"description":"Bara händelser som sparats i CRM:et efter den här tidpunkten (createdAt). För stegvis synk: sort=createdAt&order=asc&updatedSince=…","schema":{"type":"string","format":"date-time"}},{"name":"companyId","in":"query","required":false,"description":"Bara händelser på det här företaget.","schema":{"type":"string","format":"uuid"}},{"name":"type","in":"query","required":false,"description":"Bara händelser av den här typen. call = samtal, email_in = mejl in, email_out = mejl ut, meeting = möte, note = anteckning, task_completed = avslutad uppgift, deal_created = ny affär, deal_stage_changed = affär flyttad till ett annat steg, deal_won = vunnen affär, deal_lost = förlorad affär, order_event = något hände med en order, company_saved = företaget sparades, contact_added = ny kontakt, file_uploaded = uppladdad fil, master_update = nya uppgifter från företagsdatan, call_list_status = ny status i en ringlista.","schema":{"type":"string","enum":["call","email_in","email_out","meeting","note","task_completed","deal_created","deal_stage_changed","deal_won","deal_lost","order_event","company_saved","contact_added","file_uploaded","master_update","call_list_status"]}}],"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Activity"},"description":"Raderna på den här sidan."},"nextCursor":{"description":"Skicka som cursor för att hämta nästa sida. null när det inte finns fler rader.","type":["string","null"]}},"required":["data","nextCursor"]},"example":{"data":[{"id":"4b3c2d1e-0f9a-4b8c-9d7e-6f5a4b3c2d1e","companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","contactId":"7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f","dealId":null,"type":"call","occurredAt":"2026-10-05T12:00:00.000Z","summary":"Samtal: Uppföljning av offerten – Anna återkommer efter styrelsemötet i november","actorUserId":null,"refType":null,"refId":null,"createdAt":"2026-10-05T12:00:00.000Z"}],"nextCursor":null}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}},"post":{"operationId":"postActivities","tags":["Händelser"],"summary":"Logga ett samtal, möte eller mejl","description":"Loggar en kontakt med ett sparat företag, precis som Logga kontakt i appen: ett samtal, ett möte eller ett mejl. Händelsen får tiden nu (det går inte att logga i efterhand med en annan tid) och hamnar i företagets tidslinje, och företagets senaste kontakt sätts till nu. Texten i tidslinjen sätts ihop av typen, rubriken och sammanfattningen. Annat i tidslinjen skapas av det som görs i CRM:et: en anteckning skrivs med POST /notes.","x-scope":"write","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","description":"Företaget som kontakten togs med."},"type":{"type":"string","enum":["call","email_out","email_in","meeting"],"description":"Vad som loggas: call = samtal, meeting = möte, email_out = mejl som ni har skickat, email_in = mejl som ni har fått."},"title":{"description":"Rubrik (valfri), till exempel Uppföljning av offerten.","anyOf":[{"type":"string","maxLength":120},{"type":"null"}]},"summary":{"description":"Kort sammanfattning (valfri). Personnummer i texten maskeras.","anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"contactId":{"description":"Kontakten som det gäller (valfri). Ska vara en av företagets kontakter.","anyOf":[{"type":"string","format":"uuid","description":"Id (uuid)."},{"type":"null"}]}},"required":["companyId","type"],"additionalProperties":false},"example":{"companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","type":"call","title":"Uppföljning av offerten","summary":"Anna återkommer efter styrelsemötet i november","contactId":"7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f"}}}},"responses":{"201":{"description":"Skapat.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Activity"},"example":{"id":"4b3c2d1e-0f9a-4b8c-9d7e-6f5a4b3c2d1e","companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","contactId":"7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f","dealId":null,"type":"call","occurredAt":"2026-10-05T12:00:00.000Z","summary":"Samtal: Uppföljning av offerten – Anna återkommer efter styrelsemötet i november","actorUserId":null,"refType":null,"refId":null,"createdAt":"2026-10-05T12:00:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/tasks":{"get":{"operationId":"getTasks","tags":["Uppgifter"],"summary":"Lista uppgifter","description":"Organisationens uppgifter, nyast först. Alla uppgifter visas, oavsett ansvarig och status. Filtren går att kombinera: till exempel status=open och dueBefore för det som är försenat. Med sort=dueAt&order=asc kommer det som ska göras först överst. För stegvis synk: sort=updatedAt&order=asc&updatedSince=<tidpunkt>.","x-scope":"read","parameters":[{"name":"limit","in":"query","required":false,"description":"Antal rader per sida, 1 till 200. Standard 50.","schema":{"default":50,"type":"integer","minimum":1,"maximum":200}},{"name":"cursor","in":"query","required":false,"description":"Värdet i nextCursor från förra svaret, för att hämta nästa sida. Utelämnas för första sidan.","schema":{"type":"string","minLength":1,"maxLength":400}},{"name":"sort","in":"query","required":false,"description":"Sortering: createdAt eller updatedAt eller dueAt. Standard createdAt.","schema":{"default":"createdAt","type":"string","enum":["createdAt","updatedAt","dueAt"]}},{"name":"order","in":"query","required":false,"description":"Ordning: desc (nyast först, standard) eller asc (äldst först).","schema":{"default":"desc","type":"string","enum":["asc","desc"]}},{"name":"updatedSince","in":"query","required":false,"description":"Bara det som ändrats efter den här tidpunkten: rader med updatedAt senare än den, räknat i millisekunder (raden med exakt samma updatedAt som ni skickar kommer inte med igen). För stegvis synk: sort=updatedAt&order=asc&updatedSince=<senaste updatedAt ni fått>.","schema":{"type":"string","format":"date-time"}},{"name":"companyId","in":"query","required":false,"description":"Bara uppgifter på det här företaget.","schema":{"type":"string","format":"uuid"}},{"name":"assignedTo","in":"query","required":false,"description":"Bara uppgifter med den här ansvariga användaren.","schema":{"type":"string","minLength":1,"maxLength":64}},{"name":"status","in":"query","required":false,"description":"Bara uppgifter med den här statusen: open (ska göras), done (klar) eller cancelled (struken).","schema":{"type":"string","enum":["open","done","cancelled"]}},{"name":"dueBefore","in":"query","required":false,"description":"Bara uppgifter som ska vara gjorda före den här tidpunkten.","schema":{"type":"string","format":"date-time"}},{"name":"dueAfter","in":"query","required":false,"description":"Bara uppgifter som ska vara gjorda vid eller efter den här tidpunkten.","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Task"},"description":"Raderna på den här sidan."},"nextCursor":{"description":"Skicka som cursor för att hämta nästa sida. null när det inte finns fler rader.","type":["string","null"]}},"required":["data","nextCursor"]},"example":{"data":[{"id":"b4e1c2d3-5f6a-4b7c-8d9e-0f1a2b3c4d5e","companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","contactId":null,"type":"call","title":"Ring Anna om offerten","description":"Hon ville ha besked före månadsskiftet.","dueAt":"2026-10-12T07:00:00.000Z","assignedTo":"Xk3mPq8RtV2wYz5aBc7dEf9gHj1LnN4s","status":"open","completedAt":null,"createdBy":null,"createdAt":"2026-10-05T08:15:00.000Z","updatedAt":"2026-10-05T08:15:00.000Z"}],"nextCursor":null}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}},"post":{"operationId":"postTasks","tags":["Uppgifter"],"summary":"Skapa en uppgift","description":"Skapar en uppgift på ett sparat företag, precis som Ny uppgift på kundkortet i appen. Uppgiften syns på kundkortet och i den ansvarigas att göra-lista. Ett möte (type meeting) läggs inte i någons Outlook-kalender via API:t: det görs i appen.","x-scope":"write","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","description":"Företaget som uppgiften ska ligga på."},"type":{"type":"string","enum":["call","email","meeting","other"],"description":"Vilken sorts uppgift det är: call = ring, email = mejla, meeting = möte, other = övrigt."},"title":{"description":"Uppgiftens rubrik, högst 200 tecken. Personnummer i texten maskeras.","type":"string","minLength":1,"maxLength":200},"description":{"description":"Beskrivning, högst 2000 tecken (valfri). Personnummer i texten maskeras.","anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"dueAt":{"description":"När uppgiften ska vara gjord: tidpunkt med tidszon, till exempel 2026-10-12T09:00:00+02:00.","type":"string","format":"date-time"},"assignedTo":{"description":"Ansvarig användare (id från GET /users). Utelämnat: uppgiften får ingen ansvarig och syns då på kundkortet, men inte i någons egen att göra-lista.","anyOf":[{"type":"string","minLength":1,"maxLength":64,"description":"Användarens id. Hämtas med GET /users."},{"type":"null"}]},"contactId":{"description":"En kontaktperson på företaget som uppgiften gäller (valfri).","anyOf":[{"type":"string","format":"uuid","description":"Id (uuid)."},{"type":"null"}]}},"required":["companyId","type","title","dueAt"],"additionalProperties":false},"example":{"companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","type":"call","title":"Ring Anna om offerten","description":"Hon ville ha besked före månadsskiftet.","dueAt":"2026-10-12T09:00:00+02:00","assignedTo":"Xk3mPq8RtV2wYz5aBc7dEf9gHj1LnN4s"}}}},"responses":{"201":{"description":"Skapat. Location har adressen till det som skapades.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Location":{"$ref":"#/components/headers/Location"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"},"example":{"id":"b4e1c2d3-5f6a-4b7c-8d9e-0f1a2b3c4d5e","companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","contactId":null,"type":"call","title":"Ring Anna om offerten","description":"Hon ville ha besked före månadsskiftet.","dueAt":"2026-10-12T07:00:00.000Z","assignedTo":"Xk3mPq8RtV2wYz5aBc7dEf9gHj1LnN4s","status":"open","completedAt":null,"createdBy":null,"createdAt":"2026-10-05T08:15:00.000Z","updatedAt":"2026-10-05T08:15:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/tasks/{id}":{"get":{"operationId":"getTasksById","tags":["Uppgifter"],"summary":"Hämta en uppgift","description":"En uppgift.","x-scope":"read","parameters":[{"name":"id","in":"path","required":true,"description":"Id (uuid).","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"},"example":{"id":"b4e1c2d3-5f6a-4b7c-8d9e-0f1a2b3c4d5e","companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","contactId":null,"type":"call","title":"Ring Anna om offerten","description":"Hon ville ha besked före månadsskiftet.","dueAt":"2026-10-12T07:00:00.000Z","assignedTo":"Xk3mPq8RtV2wYz5aBc7dEf9gHj1LnN4s","status":"open","completedAt":null,"createdBy":null,"createdAt":"2026-10-05T08:15:00.000Z","updatedAt":"2026-10-05T08:15:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}},"patch":{"operationId":"patchTasksById","tags":["Uppgifter"],"summary":"Ändra, skjut upp eller klarmarkera en uppgift","description":"Ändrar en uppgift. Skicka bara det som ska ändras; allt i anropet sparas tillsammans eller inte alls. Tre saker går att göra, var för sig eller i samma anrop. Ändra: type, title, description och dueAt. Skjuta upp, som Skjut upp i appen: postponeDays (så många dagar framåt, räknat från det senare av uppgiftens datum och i dag) eller postponeToDate (till ett visst datum, i dag eller senare). Klockslaget behålls, och dueAt anges inte samtidigt. Klarmarkera: status done. Då läggs en händelse i företagets tidslinje, och för ring, mejl och möte räknas det som en kontakt med företaget (senaste kontakt sätts till nu) om inte logContact är false. En uppgift som redan är klar går inte att ändra, skjuta upp eller klarmarkera igen (409), och den går inte att öppna på nytt. Ansvarig, företag och kontakt går inte att byta. Ligger uppgiften som ett möte i någons Outlook-kalender ändras kalendern inte via API:t.","x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"Id (uuid).","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"description":"Vilken sorts uppgift det är: call = ring, email = mejla, meeting = möte, other = övrigt.","type":"string","enum":["call","email","meeting","other"]},"title":{"description":"Ny rubrik, högst 200 tecken. Personnummer i texten maskeras.","type":"string","minLength":1,"maxLength":200},"description":{"description":"Ny beskrivning, högst 2000 tecken. null tar bort beskrivningen. Personnummer i texten maskeras.","anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"dueAt":{"description":"Ny tidpunkt då uppgiften ska vara gjord, med tidszon. Går inte att ange tillsammans med postponeDays eller postponeToDate.","type":"string","format":"date-time"},"postponeDays":{"description":"Skjut upp så här många dagar (1 till 365), räknat från det senare av uppgiftens datum och i dag. Klockslaget behålls.","type":"integer","minimum":1,"maximum":365},"postponeToDate":{"description":"Skjut upp till det här datumet (ÅÅÅÅ-MM-DD), i dag eller senare. Klockslaget behålls.","type":"string","format":"date"},"status":{"description":"done klarmarkerar uppgiften. Inget annat värde går att sätta.","type":"string","const":"done"},"logContact":{"description":"Bara tillsammans med status done. true (standard): en klar uppgift av typen ring, mejl eller möte räknas som en kontakt med företaget. false: den räknas bara som en slutförd uppgift.","type":"boolean"}},"additionalProperties":false},"example":{"status":"done"}}}},"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"},"example":{"id":"b4e1c2d3-5f6a-4b7c-8d9e-0f1a2b3c4d5e","companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","contactId":null,"type":"call","title":"Ring Anna om offerten","description":"Hon ville ha besked före månadsskiftet.","dueAt":"2026-10-12T07:00:00.000Z","assignedTo":"Xk3mPq8RtV2wYz5aBc7dEf9gHj1LnN4s","status":"done","completedAt":"2026-10-12T08:05:00.000Z","createdBy":null,"createdAt":"2026-10-05T08:15:00.000Z","updatedAt":"2026-10-12T08:05:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/deals":{"get":{"operationId":"getDeals","tags":["Affärer"],"summary":"Lista affärer","description":"Organisationens affärer, nyast först. Alla affärer visas, oavsett ansvarig, både pågående och avslutade. Filtren går att kombinera. För stegvis synk: sort=updatedAt&order=asc&updatedSince=<tidpunkt>.","x-scope":"read","parameters":[{"name":"limit","in":"query","required":false,"description":"Antal rader per sida, 1 till 200. Standard 50.","schema":{"default":50,"type":"integer","minimum":1,"maximum":200}},{"name":"cursor","in":"query","required":false,"description":"Värdet i nextCursor från förra svaret, för att hämta nästa sida. Utelämnas för första sidan.","schema":{"type":"string","minLength":1,"maxLength":400}},{"name":"sort","in":"query","required":false,"description":"Sortering: createdAt eller updatedAt. Standard createdAt.","schema":{"default":"createdAt","type":"string","enum":["createdAt","updatedAt"]}},{"name":"order","in":"query","required":false,"description":"Ordning: desc (nyast först, standard) eller asc (äldst först).","schema":{"default":"desc","type":"string","enum":["asc","desc"]}},{"name":"updatedSince","in":"query","required":false,"description":"Bara det som ändrats efter den här tidpunkten: rader med updatedAt senare än den, räknat i millisekunder (raden med exakt samma updatedAt som ni skickar kommer inte med igen). För stegvis synk: sort=updatedAt&order=asc&updatedSince=<senaste updatedAt ni fått>.","schema":{"type":"string","format":"date-time"}},{"name":"companyId","in":"query","required":false,"description":"Bara affärer på det här företaget.","schema":{"type":"string","format":"uuid"}},{"name":"pipelineId","in":"query","required":false,"description":"Bara affärer i den här pipelinen.","schema":{"type":"string","format":"uuid"}},{"name":"stageId","in":"query","required":false,"description":"Bara affärer i det här steget.","schema":{"type":"string","format":"uuid"}},{"name":"status","in":"query","required":false,"description":"Bara affärer med den här statusen: open (pågår), won (vunnen) eller lost (förlorad).","schema":{"type":"string","enum":["open","won","lost"]}},{"name":"ownerUserId","in":"query","required":false,"description":"Bara affärer med den här ansvariga säljaren.","schema":{"type":"string","minLength":1,"maxLength":64}}],"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Deal"},"description":"Raderna på den här sidan."},"nextCursor":{"description":"Skicka som cursor för att hämta nästa sida. null när det inte finns fler rader.","type":["string","null"]}},"required":["data","nextCursor"]},"example":{"data":[{"id":"7c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f","companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","title":"Serviceavtal 2027","valueSek":185000,"pipelineId":"b1c2d3e4-f5a6-4b7c-8d9e-0f1a2b3c4d5e","pipelineName":"Standard","stageId":"c2d3e4f5-a6b7-4c8d-9e0f-1a2b3c4d5e6f","stageName":"Offert","status":"open","ownerUserId":"Xk3mPq8RtV2wYz5aBc7dEf9gHj1LnN4s","expectedCloseDate":"2026-11-30","closedAt":null,"closeReason":null,"createdBy":null,"createdAt":"2026-10-05T08:15:00.000Z","updatedAt":"2026-10-05T08:15:00.000Z"}],"nextCursor":null}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}},"post":{"operationId":"postDeals","tags":["Affärer"],"summary":"Skapa en affär","description":"Skapar en affär på ett sparat företag, precis som Ny affär i appen: affären syns på pipelinetavlan och en händelse läggs i företagets tidslinje. Utan pipelineId hamnar affären i standardpipelinen, och utan stageId i pipelinens första steg (det öppna steget med lägst sannolikhet). Steget måste höra till pipelinen: för ett steg i en annan pipeline än standardpipelinen anges också pipelineId. Ett steg med utfallet vunnen eller förlorad ger en affär som är avslutad direkt. Pipelines och steg hämtas med GET /pipelines.","x-scope":"write","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","description":"Företaget som affären ska ligga på."},"title":{"description":"Affärens rubrik, högst 200 tecken. Personnummer i texten maskeras.","type":"string","minLength":1,"maxLength":200},"valueSek":{"description":"Affärens värde i kronor, exklusive moms. Högst två decimaler. Utelämnat: 0.","type":"number","minimum":0,"maximum":1000000000000,"multipleOf":0.01},"expectedCloseDate":{"description":"Förväntat avslut, ÅÅÅÅ-MM-DD (valfritt).","anyOf":[{"type":"string","format":"date","description":"Datum, ÅÅÅÅ-MM-DD, årtal 1900–9999."},{"type":"null"}]},"pipelineId":{"description":"Pipelinen som affären ska ligga i. Utelämnat: standardpipelinen.","anyOf":[{"type":"string","format":"uuid","description":"Id (uuid)."},{"type":"null"}]},"stageId":{"description":"Steget som affären ska börja i. Utelämnat: pipelinens första steg, det öppna steget med lägst sannolikhet.","anyOf":[{"type":"string","format":"uuid","description":"Id (uuid)."},{"type":"null"}]},"ownerUserId":{"description":"Ansvarig säljare (id från GET /users). Utelämnat: affären får ingen ansvarig och syns då i appen bara för dem som ser allas affärer.","anyOf":[{"type":"string","minLength":1,"maxLength":64,"description":"Användarens id. Hämtas med GET /users."},{"type":"null"}]}},"required":["companyId","title"],"additionalProperties":false},"example":{"companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","title":"Serviceavtal 2027","valueSek":185000,"expectedCloseDate":"2026-11-30","ownerUserId":"Xk3mPq8RtV2wYz5aBc7dEf9gHj1LnN4s"}}}},"responses":{"201":{"description":"Skapat. Location har adressen till det som skapades.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Location":{"$ref":"#/components/headers/Location"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deal"},"example":{"id":"7c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f","companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","title":"Serviceavtal 2027","valueSek":185000,"pipelineId":"b1c2d3e4-f5a6-4b7c-8d9e-0f1a2b3c4d5e","pipelineName":"Standard","stageId":"c2d3e4f5-a6b7-4c8d-9e0f-1a2b3c4d5e6f","stageName":"Offert","status":"open","ownerUserId":"Xk3mPq8RtV2wYz5aBc7dEf9gHj1LnN4s","expectedCloseDate":"2026-11-30","closedAt":null,"closeReason":null,"createdBy":null,"createdAt":"2026-10-05T08:15:00.000Z","updatedAt":"2026-10-05T08:15:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/deals/{id}":{"get":{"operationId":"getDealsById","tags":["Affärer"],"summary":"Hämta en affär","description":"En affär, med namnen på pipelinen och steget den ligger i.","x-scope":"read","parameters":[{"name":"id","in":"path","required":true,"description":"Id (uuid).","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deal"},"example":{"id":"7c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f","companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","title":"Serviceavtal 2027","valueSek":185000,"pipelineId":"b1c2d3e4-f5a6-4b7c-8d9e-0f1a2b3c4d5e","pipelineName":"Standard","stageId":"c2d3e4f5-a6b7-4c8d-9e0f-1a2b3c4d5e6f","stageName":"Offert","status":"open","ownerUserId":"Xk3mPq8RtV2wYz5aBc7dEf9gHj1LnN4s","expectedCloseDate":"2026-11-30","closedAt":null,"closeReason":null,"createdBy":null,"createdAt":"2026-10-05T08:15:00.000Z","updatedAt":"2026-10-05T08:15:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}},"patch":{"operationId":"patchDealsById","tags":["Affärer"],"summary":"Ändra eller flytta en affär","description":"Ändrar en affär. Skicka bara det som ska ändras; allt i anropet sparas tillsammans eller inte alls. Med stageId flyttas affären till ett annat steg i samma pipeline, precis som på pipelinetavlan: statusen följer av stegets utfall (vunnen, förlorad eller pågår igen), och en händelse läggs i företagets tidslinje. closeReason är orsaken när affären flyttas till ett steg med utfallet förlorad. Det går inte att ta bort ansvarig, byta företag eller byta pipeline, och status går inte att sätta direkt.","x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"Id (uuid).","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"description":"Ny rubrik, högst 200 tecken. Personnummer i texten maskeras.","type":"string","minLength":1,"maxLength":200},"valueSek":{"description":"Nytt värde i kronor, exklusive moms. Högst två decimaler.","type":"number","minimum":0,"maximum":1000000000000,"multipleOf":0.01},"expectedCloseDate":{"description":"Förväntat avslut, ÅÅÅÅ-MM-DD. null tar bort datumet.","anyOf":[{"type":"string","format":"date","description":"Datum, ÅÅÅÅ-MM-DD, årtal 1900–9999."},{"type":"null"}]},"ownerUserId":{"description":"Ny ansvarig säljare (id från GET /users). Ansvarig går inte att ta bort.","type":"string","minLength":1,"maxLength":64},"stageId":{"description":"Steget som affären ska flyttas till. Måste höra till affärens pipeline. Ligger affären redan där ändras ingenting.","type":"string","format":"uuid"},"closeReason":{"description":"Orsaken till att affären förlorades, högst 500 tecken (valfri). Går bara att ange tillsammans med stageId, när affären flyttas till ett steg med utfallet förlorad.","type":"string","minLength":1,"maxLength":500}},"additionalProperties":false},"example":{"stageId":"e4f5a6b7-c8d9-4e0f-9a1b-2c3d4e5f6a7b","closeReason":"Valde en annan leverantör"}}}},"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deal"},"example":{"id":"7c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f","companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","title":"Serviceavtal 2027","valueSek":185000,"pipelineId":"b1c2d3e4-f5a6-4b7c-8d9e-0f1a2b3c4d5e","pipelineName":"Standard","stageId":"e4f5a6b7-c8d9-4e0f-9a1b-2c3d4e5f6a7b","stageName":"Förlorad","status":"lost","ownerUserId":"Xk3mPq8RtV2wYz5aBc7dEf9gHj1LnN4s","expectedCloseDate":"2026-11-30","closedAt":"2026-10-12T13:40:00.000Z","closeReason":"Valde en annan leverantör","createdBy":null,"createdAt":"2026-10-05T08:15:00.000Z","updatedAt":"2026-10-12T13:40:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/pipelines":{"get":{"operationId":"getPipelines","tags":["Affärer"],"summary":"Lista pipelines med steg","description":"Organisationens pipelines med sina steg i ordning. Stegen ordnas automatiskt: öppna steg efter sannolikhet (lägst först), sedan vunna och sist förlorade; det första steget är alltså det öppna steget med lägst sannolikhet. Använd stegens id som stageId när en affär skapas eller flyttas. Stegets utfall (outcome) avgör affärens status: flyttas en affär till ett steg med utfallet won blir den vunnen, och med lost förlorad. Alla pipelines kommer i ett svar (nextCursor är alltid null). Pipelines och steg ändras av en administratör i appen, inte via API:t.","x-scope":"read","responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Pipeline"},"description":"Raderna på den här sidan."},"nextCursor":{"description":"Skicka som cursor för att hämta nästa sida. null när det inte finns fler rader.","type":["string","null"]}},"required":["data","nextCursor"]},"example":{"data":[{"id":"b1c2d3e4-f5a6-4b7c-8d9e-0f1a2b3c4d5e","name":"Standard","isDefault":true,"stages":[{"id":"d1e2f3a4-b5c6-4d7e-8f9a-0b1c2d3e4f5a","name":"Kontakt","probability":10,"outcome":"open"},{"id":"c2d3e4f5-a6b7-4c8d-9e0f-1a2b3c4d5e6f","name":"Offert","probability":60,"outcome":"open"},{"id":"a3b4c5d6-e7f8-4a9b-8c0d-1e2f3a4b5c6d","name":"Vunnen","probability":100,"outcome":"won"},{"id":"e4f5a6b7-c8d9-4e0f-9a1b-2c3d4e5f6a7b","name":"Förlorad","probability":0,"outcome":"lost"}]}],"nextCursor":null}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/orders":{"get":{"operationId":"getOrders","tags":["Ordrar"],"summary":"Lista ordrar","description":"Ordrarna i organisationen med sina rader, nyast först. Filtrera på företag, status eller säljare. För att följa vad som händer med fakturor och betalningar: hämta stegvis med sort=updatedAt&order=asc&updatedSince=<tidpunkt>.","x-scope":"read","parameters":[{"name":"limit","in":"query","required":false,"description":"Antal rader per sida, 1 till 200. Standard 50.","schema":{"default":50,"type":"integer","minimum":1,"maximum":200}},{"name":"cursor","in":"query","required":false,"description":"Värdet i nextCursor från förra svaret, för att hämta nästa sida. Utelämnas för första sidan.","schema":{"type":"string","minLength":1,"maxLength":400}},{"name":"sort","in":"query","required":false,"description":"Sortering: createdAt eller updatedAt. Standard createdAt.","schema":{"default":"createdAt","type":"string","enum":["createdAt","updatedAt"]}},{"name":"order","in":"query","required":false,"description":"Ordning: desc (nyast först, standard) eller asc (äldst först).","schema":{"default":"desc","type":"string","enum":["asc","desc"]}},{"name":"updatedSince","in":"query","required":false,"description":"Bara det som ändrats efter den här tidpunkten: rader med updatedAt senare än den, räknat i millisekunder (raden med exakt samma updatedAt som ni skickar kommer inte med igen). För stegvis synk: sort=updatedAt&order=asc&updatedSince=<senaste updatedAt ni fått>.","schema":{"type":"string","format":"date-time"}},{"name":"companyId","in":"query","required":false,"description":"Bara ordrar på det här företaget.","schema":{"type":"string","format":"uuid"}},{"name":"status","in":"query","required":false,"description":"Bara ordrar med den här statusen, till exempel order eller invoiced.","schema":{"type":"string","enum":["order","ready_for_invoice","sent_to_fortnox","fortnox_send_failed","invoiced","paid","credited","cancelled"]}},{"name":"ownerUserId","in":"query","required":false,"description":"Bara ordrar med den här säljaren. Id hämtas med GET /users.","schema":{"type":"string","minLength":1,"maxLength":64}}],"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Order"},"description":"Raderna på den här sidan."},"nextCursor":{"description":"Skicka som cursor för att hämta nästa sida. null när det inte finns fler rader.","type":["string","null"]}},"required":["data","nextCursor"]},"example":{"data":[{"id":"c7d8e9f0-1a2b-4c3d-9e4f-5a6b7c8d9e0f","orderNumber":1042,"companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","status":"order","editable":true,"orderDate":"2026-10-05","ownerUserId":null,"ourReference":null,"customerReferenceContactId":"7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f","customerReferenceText":"Inköpsorder 4471","invoiceName":"Nordbygg Entreprenad AB","invoiceStreet":"Box 1234","invoicePostalCode":"751 42","invoiceCity":"Uppsala","invoiceEmail":"faktura@nordbygg.example","paymentTermsDays":30,"vatType":"SEVAT","remark":"Avser serviceavtal 2027.","subtotalSek":16146,"vatSek":4036.5,"roundingSek":0.5,"totalSek":20183,"rows":[{"id":"b3a2c1d0-9e8f-4a7b-8c6d-5e4f3a2b1c0d","orderId":"c7d8e9f0-1a2b-4c3d-9e4f-5a6b7c8d9e0f","productId":"5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a","articleNumber":"1040","description":"Serviceavtal Bas, per månad. Support vardagar 8–17.","quantity":12,"unit":"mån","priceSek":1495,"discountPercent":10,"vatRate":25,"totalSek":16146}],"readyAt":null,"sentAt":null,"invoicedAt":null,"paidAt":null,"fortnoxInvoiceNumber":null,"fortnoxTotalToPaySek":null,"fortnoxSyncedAt":null,"paymentStatus":null,"paymentDueDate":null,"paymentBalanceSek":null,"paymentOverdueDays":null,"createdBy":null,"createdAt":"2026-10-05T12:00:00.000Z","updatedAt":"2026-10-05T12:00:00.000Z"}],"nextCursor":null}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}},"post":{"operationId":"postOrders","tags":["Ordrar"],"summary":"Skapa en order","description":"Skapar en order på ett sparat företag, som knappen Skapa order på kundkortet. Fakturauppgifter och betalvillkor kopieras från företaget och företagets huvudkontakt blir deras referens, om inget annat anges. Raderna kan skickas med direkt (rows): då sparas ordern och alla rader, eller ingenting om något är fel. Ordern får nästa ordernummer, status order och ingen säljare, och i appen syns den för dem som får se allas ordrar. En händelse skrivs i företagets tidslinje. Det går inte att skapa en order på ett företag som är märkt Kontakta inte.","x-scope":"write","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","description":"Företaget som ordern gäller. Ska vara ett av era sparade företag."},"orderDate":{"description":"Orderdatum. Utelämnat när ordern skapas: dagens datum.","type":"string","format":"date"},"ourReference":{"description":"Vår referens, högst 100 tecken. Tom på en order som skapas via API:t; när fakturan skickas till Fortnox står då avsändaren som referens.","anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"customerReferenceContactId":{"description":"Deras referens: en av företagets kontakter. Utelämnat när ordern skapas: företagets huvudkontakt. null = ingen kontakt.","anyOf":[{"type":"string","format":"uuid","description":"Id (uuid)."},{"type":"null"}]},"customerReferenceText":{"description":"Deras referens som fri text, högst 100 tecken.","anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"invoiceName":{"description":"Namnet på fakturan, högst 200 tecken. Utelämnat när ordern skapas: företagets fakturanamn, annars företagets namn.","anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"invoiceStreet":{"description":"Fakturaadress: gata eller box, högst 200 tecken. Utelämnat när ordern skapas: företagets fakturaadress, annars besöksadressen.","anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"invoicePostalCode":{"description":"Fakturaadress: postnummer, högst 20 tecken. Utelämnat när ordern skapas: från företaget.","anyOf":[{"type":"string","maxLength":20},{"type":"null"}]},"invoiceCity":{"description":"Fakturaadress: ort, högst 100 tecken. Utelämnat när ordern skapas: från företaget.","anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"invoiceEmail":{"description":"E-postadressen som fakturan skickas till, högst 200 tecken. Utelämnat när ordern skapas: företagets e-post för fakturor, annars företagets e-post.","anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"paymentTermsDays":{"description":"Betalvillkor i hela dagar, 0 till 120. Utelämnat när ordern skapas: företagets betalvillkor, annars 30.","type":"integer","minimum":0,"maximum":120},"vatType":{"description":"Momstyp: SEVAT (svensk moms, standard), SEREVERSEDVAT, EUREVERSEDVAT, EUVAT eller EXPORT. Med allt utom SEVAT blir momsen 0 på raderna.","type":"string","enum":["SEVAT","SEREVERSEDVAT","EUREVERSEDVAT","EUVAT","EXPORT"]},"remark":{"description":"Fakturatext, högst 1000 tecken.","anyOf":[{"type":"string","maxLength":1000},{"type":"null"}]},"rows":{"description":"Orderns rader, i den ordning de ska stå. Högst 100 i ett anrop; fler läggs till med POST /orders/{id}/rows.","maxItems":100,"type":"array","items":{"type":"object","properties":{"productId":{"description":"Artikeln som raden ska bygga på. Bara aktiva artiklar går att välja. Utelämnat eller null: en rad med fri text.","anyOf":[{"type":"string","format":"uuid","description":"Id (uuid)."},{"type":"null"}]},"description":{"description":"Radens text, högst 300 tecken. Utelämnat med artikel: artikelns beskrivning, annars artikelns namn. Krävs för en rad utan artikel.","anyOf":[{"type":"string","maxLength":300},{"type":"null"}]},"quantity":{"description":"Antal, större än 0 och med högst två decimaler. Utelämnat: 1.","type":"number","minimum":0.01,"maximum":1000000,"multipleOf":0.01},"priceSek":{"description":"Pris per enhet i kronor, exklusive moms. Utelämnat: artikelns pris (0 för en rad utan artikel).","type":"number","minimum":0,"maximum":1000000000,"multipleOf":0.01},"discountPercent":{"description":"Rabatt i procent, 0 till 100. Utelämnat: 0.","type":"number","minimum":0,"maximum":100,"multipleOf":0.01},"vatRate":{"description":"Momssats i procent, 0 till 100. Utelämnat: artikelns moms (25 för en rad utan artikel).","type":"number","minimum":0,"maximum":100,"multipleOf":0.01}},"additionalProperties":false}}},"required":["companyId"],"additionalProperties":false},"example":{"companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","customerReferenceText":"Inköpsorder 4471","remark":"Avser serviceavtal 2027.","rows":[{"productId":"5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a","quantity":12,"discountPercent":10}]}}}},"responses":{"201":{"description":"Skapat. Location har adressen till det som skapades.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Location":{"$ref":"#/components/headers/Location"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Order"},"example":{"id":"c7d8e9f0-1a2b-4c3d-9e4f-5a6b7c8d9e0f","orderNumber":1042,"companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","status":"order","editable":true,"orderDate":"2026-10-05","ownerUserId":null,"ourReference":null,"customerReferenceContactId":"7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f","customerReferenceText":"Inköpsorder 4471","invoiceName":"Nordbygg Entreprenad AB","invoiceStreet":"Box 1234","invoicePostalCode":"751 42","invoiceCity":"Uppsala","invoiceEmail":"faktura@nordbygg.example","paymentTermsDays":30,"vatType":"SEVAT","remark":"Avser serviceavtal 2027.","subtotalSek":16146,"vatSek":4036.5,"roundingSek":0.5,"totalSek":20183,"rows":[{"id":"b3a2c1d0-9e8f-4a7b-8c6d-5e4f3a2b1c0d","orderId":"c7d8e9f0-1a2b-4c3d-9e4f-5a6b7c8d9e0f","productId":"5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a","articleNumber":"1040","description":"Serviceavtal Bas, per månad. Support vardagar 8–17.","quantity":12,"unit":"mån","priceSek":1495,"discountPercent":10,"vatRate":25,"totalSek":16146}],"readyAt":null,"sentAt":null,"invoicedAt":null,"paidAt":null,"fortnoxInvoiceNumber":null,"fortnoxTotalToPaySek":null,"fortnoxSyncedAt":null,"paymentStatus":null,"paymentDueDate":null,"paymentBalanceSek":null,"paymentOverdueDays":null,"createdBy":null,"createdAt":"2026-10-05T12:00:00.000Z","updatedAt":"2026-10-05T12:00:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/orders/{id}":{"get":{"operationId":"getOrdersById","tags":["Ordrar"],"summary":"Hämta en order","description":"En order med rader, summor, status och betalningsläge. Fakturanummer och betalning visas så som de senast hämtades från Fortnox.","x-scope":"read","parameters":[{"name":"id","in":"path","required":true,"description":"Id (uuid).","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Order"},"example":{"id":"c7d8e9f0-1a2b-4c3d-9e4f-5a6b7c8d9e0f","orderNumber":1042,"companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","status":"order","editable":true,"orderDate":"2026-10-05","ownerUserId":null,"ourReference":null,"customerReferenceContactId":"7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f","customerReferenceText":"Inköpsorder 4471","invoiceName":"Nordbygg Entreprenad AB","invoiceStreet":"Box 1234","invoicePostalCode":"751 42","invoiceCity":"Uppsala","invoiceEmail":"faktura@nordbygg.example","paymentTermsDays":30,"vatType":"SEVAT","remark":"Avser serviceavtal 2027.","subtotalSek":16146,"vatSek":4036.5,"roundingSek":0.5,"totalSek":20183,"rows":[{"id":"b3a2c1d0-9e8f-4a7b-8c6d-5e4f3a2b1c0d","orderId":"c7d8e9f0-1a2b-4c3d-9e4f-5a6b7c8d9e0f","productId":"5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a","articleNumber":"1040","description":"Serviceavtal Bas, per månad. Support vardagar 8–17.","quantity":12,"unit":"mån","priceSek":1495,"discountPercent":10,"vatRate":25,"totalSek":16146}],"readyAt":null,"sentAt":null,"invoicedAt":null,"paidAt":null,"fortnoxInvoiceNumber":null,"fortnoxTotalToPaySek":null,"fortnoxSyncedAt":null,"paymentStatus":null,"paymentDueDate":null,"paymentBalanceSek":null,"paymentOverdueDays":null,"createdBy":null,"createdAt":"2026-10-05T12:00:00.000Z","updatedAt":"2026-10-05T12:00:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}},"patch":{"operationId":"patchOrdersById","tags":["Ordrar"],"summary":"Ändra en order","description":"Ändrar orderns uppgifter: datum, referenser, fakturauppgifter, betalvillkor, momstyp och fakturatext. Fält som inte skickas lämnas orörda och null tömmer fältet. Går bara så länge ordern har status order: därefter är den låst och API:t svarar 409. Företag, säljare och status går inte att ändra här; rader ändras med slutpunkterna under /orders/{id}/rows.","x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"Id (uuid).","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orderDate":{"description":"Orderdatum. Utelämnat när ordern skapas: dagens datum.","type":"string","format":"date"},"ourReference":{"description":"Vår referens, högst 100 tecken. Tom på en order som skapas via API:t; när fakturan skickas till Fortnox står då avsändaren som referens.","anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"customerReferenceContactId":{"description":"Deras referens: en av företagets kontakter. Utelämnat när ordern skapas: företagets huvudkontakt. null = ingen kontakt.","anyOf":[{"type":"string","format":"uuid","description":"Id (uuid)."},{"type":"null"}]},"customerReferenceText":{"description":"Deras referens som fri text, högst 100 tecken.","anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"invoiceName":{"description":"Namnet på fakturan, högst 200 tecken. Utelämnat när ordern skapas: företagets fakturanamn, annars företagets namn.","anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"invoiceStreet":{"description":"Fakturaadress: gata eller box, högst 200 tecken. Utelämnat när ordern skapas: företagets fakturaadress, annars besöksadressen.","anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"invoicePostalCode":{"description":"Fakturaadress: postnummer, högst 20 tecken. Utelämnat när ordern skapas: från företaget.","anyOf":[{"type":"string","maxLength":20},{"type":"null"}]},"invoiceCity":{"description":"Fakturaadress: ort, högst 100 tecken. Utelämnat när ordern skapas: från företaget.","anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"invoiceEmail":{"description":"E-postadressen som fakturan skickas till, högst 200 tecken. Utelämnat när ordern skapas: företagets e-post för fakturor, annars företagets e-post.","anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"paymentTermsDays":{"description":"Betalvillkor i hela dagar, 0 till 120. Utelämnat när ordern skapas: företagets betalvillkor, annars 30.","type":"integer","minimum":0,"maximum":120},"vatType":{"description":"Momstyp: SEVAT (svensk moms, standard), SEREVERSEDVAT, EUREVERSEDVAT, EUVAT eller EXPORT. Med allt utom SEVAT blir momsen 0 på raderna.","type":"string","enum":["SEVAT","SEREVERSEDVAT","EUREVERSEDVAT","EUVAT","EXPORT"]},"remark":{"description":"Fakturatext, högst 1000 tecken.","anyOf":[{"type":"string","maxLength":1000},{"type":"null"}]}},"additionalProperties":false},"example":{"paymentTermsDays":20,"invoiceEmail":"faktura@nordbygg.example","remark":null}}}},"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Order"},"example":{"id":"c7d8e9f0-1a2b-4c3d-9e4f-5a6b7c8d9e0f","orderNumber":1042,"companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","status":"order","editable":true,"orderDate":"2026-10-05","ownerUserId":null,"ourReference":null,"customerReferenceContactId":"7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f","customerReferenceText":"Inköpsorder 4471","invoiceName":"Nordbygg Entreprenad AB","invoiceStreet":"Box 1234","invoicePostalCode":"751 42","invoiceCity":"Uppsala","invoiceEmail":"faktura@nordbygg.example","paymentTermsDays":20,"vatType":"SEVAT","remark":null,"subtotalSek":16146,"vatSek":4036.5,"roundingSek":0.5,"totalSek":20183,"rows":[{"id":"b3a2c1d0-9e8f-4a7b-8c6d-5e4f3a2b1c0d","orderId":"c7d8e9f0-1a2b-4c3d-9e4f-5a6b7c8d9e0f","productId":"5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a","articleNumber":"1040","description":"Serviceavtal Bas, per månad. Support vardagar 8–17.","quantity":12,"unit":"mån","priceSek":1495,"discountPercent":10,"vatRate":25,"totalSek":16146}],"readyAt":null,"sentAt":null,"invoicedAt":null,"paidAt":null,"fortnoxInvoiceNumber":null,"fortnoxTotalToPaySek":null,"fortnoxSyncedAt":null,"paymentStatus":null,"paymentDueDate":null,"paymentBalanceSek":null,"paymentOverdueDays":null,"createdBy":null,"createdAt":"2026-10-05T12:00:00.000Z","updatedAt":"2026-10-06T08:30:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/orders/{id}/rows":{"post":{"operationId":"postOrdersByIdRows","tags":["Ordrar"],"summary":"Lägg till en orderrad","description":"Lägger en rad sist på ordern, som Lägg till rad i appen. Med productId fylls text, pris och moms i från artikeln där de inte anges; utan artikel blir det en rad med fri text och då krävs description. Orderns summor räknas om: hämta ordern för att se dem. Går bara så länge ordern har status order (annars 409).","x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"Orderns id.","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"productId":{"description":"Artikeln som raden ska bygga på. Bara aktiva artiklar går att välja. Utelämnat eller null: en rad med fri text.","anyOf":[{"type":"string","format":"uuid","description":"Id (uuid)."},{"type":"null"}]},"description":{"description":"Radens text, högst 300 tecken. Utelämnat med artikel: artikelns beskrivning, annars artikelns namn. Krävs för en rad utan artikel.","anyOf":[{"type":"string","maxLength":300},{"type":"null"}]},"quantity":{"description":"Antal, större än 0 och med högst två decimaler. Utelämnat: 1.","type":"number","minimum":0.01,"maximum":1000000,"multipleOf":0.01},"priceSek":{"description":"Pris per enhet i kronor, exklusive moms. Utelämnat: artikelns pris (0 för en rad utan artikel).","type":"number","minimum":0,"maximum":1000000000,"multipleOf":0.01},"discountPercent":{"description":"Rabatt i procent, 0 till 100. Utelämnat: 0.","type":"number","minimum":0,"maximum":100,"multipleOf":0.01},"vatRate":{"description":"Momssats i procent, 0 till 100. Utelämnat: artikelns moms (25 för en rad utan artikel).","type":"number","minimum":0,"maximum":100,"multipleOf":0.01}},"additionalProperties":false},"example":{"productId":"5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a","quantity":12,"discountPercent":10}}}},"responses":{"201":{"description":"Skapat.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderRow"},"example":{"id":"b3a2c1d0-9e8f-4a7b-8c6d-5e4f3a2b1c0d","orderId":"c7d8e9f0-1a2b-4c3d-9e4f-5a6b7c8d9e0f","productId":"5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a","articleNumber":"1040","description":"Serviceavtal Bas, per månad. Support vardagar 8–17.","quantity":12,"unit":"mån","priceSek":1495,"discountPercent":10,"vatRate":25,"totalSek":16146}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/orders/{id}/rows/{rowId}":{"patch":{"operationId":"patchOrdersByIdRowsByRowId","tags":["Ordrar"],"summary":"Ändra en orderrad","description":"Ändrar text, antal, pris, rabatt eller moms på en rad. Fält som inte skickas lämnas orörda. Artikeln på raden går inte att byta: ta bort raden och lägg till en ny. Orderns summor räknas om. Går bara så länge ordern har status order (annars 409).","x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"Orderns id.","schema":{"type":"string","format":"uuid"}},{"name":"rowId","in":"path","required":true,"description":"Radens id.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"description":"Radens text, högst 300 tecken. Får inte vara tom.","type":"string","minLength":1,"maxLength":300},"quantity":{"description":"Antal, större än 0 och med högst två decimaler.","type":"number","minimum":0.01,"maximum":1000000,"multipleOf":0.01},"priceSek":{"description":"Pris per enhet i kronor, exklusive moms.","type":"number","minimum":0,"maximum":1000000000,"multipleOf":0.01},"discountPercent":{"description":"Rabatt i procent, 0 till 100.","type":"number","minimum":0,"maximum":100,"multipleOf":0.01},"vatRate":{"description":"Momssats i procent, 0 till 100.","type":"number","minimum":0,"maximum":100,"multipleOf":0.01}},"additionalProperties":false},"example":{"quantity":24,"discountPercent":15}}}},"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderRow"},"example":{"id":"b3a2c1d0-9e8f-4a7b-8c6d-5e4f3a2b1c0d","orderId":"c7d8e9f0-1a2b-4c3d-9e4f-5a6b7c8d9e0f","productId":"5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a","articleNumber":"1040","description":"Serviceavtal Bas, per månad. Support vardagar 8–17.","quantity":24,"unit":"mån","priceSek":1495,"discountPercent":15,"vatRate":25,"totalSek":30498}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}},"delete":{"operationId":"deleteOrdersByIdRowsByRowId","tags":["Ordrar"],"summary":"Ta bort en orderrad","description":"Tar bort raden från ordern och räknar om summorna. Går bara så länge ordern har status order (annars 409).","x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"Orderns id.","schema":{"type":"string","format":"uuid"}},{"name":"rowId","in":"path","required":true,"description":"Radens id.","schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Det gick bra. Svaret har inget innehåll.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/orders/{id}/cancel":{"post":{"operationId":"postOrdersByIdCancel","tags":["Ordrar"],"summary":"Makulera en order","description":"Makulerar ordern: den får status cancelled och en händelse skrivs i företagets tidslinje. Det går inte att ångra. Via API:t går det för ordrar som har skapats via API:t (utan säljare) och som har status order. En order med säljare makuleras av säljaren eller av den som sköter fakturorna, i appen (403 här), och en order som har skickats till Fortnox går inte att makulera (409). Anropet har inget innehåll.","x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"Id (uuid).","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Order"},"example":{"id":"c7d8e9f0-1a2b-4c3d-9e4f-5a6b7c8d9e0f","orderNumber":1042,"companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","status":"cancelled","editable":false,"orderDate":"2026-10-05","ownerUserId":null,"ourReference":null,"customerReferenceContactId":"7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f","customerReferenceText":"Inköpsorder 4471","invoiceName":"Nordbygg Entreprenad AB","invoiceStreet":"Box 1234","invoicePostalCode":"751 42","invoiceCity":"Uppsala","invoiceEmail":"faktura@nordbygg.example","paymentTermsDays":30,"vatType":"SEVAT","remark":"Avser serviceavtal 2027.","subtotalSek":16146,"vatSek":4036.5,"roundingSek":0.5,"totalSek":20183,"rows":[{"id":"b3a2c1d0-9e8f-4a7b-8c6d-5e4f3a2b1c0d","orderId":"c7d8e9f0-1a2b-4c3d-9e4f-5a6b7c8d9e0f","productId":"5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a","articleNumber":"1040","description":"Serviceavtal Bas, per månad. Support vardagar 8–17.","quantity":12,"unit":"mån","priceSek":1495,"discountPercent":10,"vatRate":25,"totalSek":16146}],"readyAt":null,"sentAt":null,"invoicedAt":null,"paidAt":null,"fortnoxInvoiceNumber":null,"fortnoxTotalToPaySek":null,"fortnoxSyncedAt":null,"paymentStatus":null,"paymentDueDate":null,"paymentBalanceSek":null,"paymentOverdueDays":null,"createdBy":null,"createdAt":"2026-10-05T12:00:00.000Z","updatedAt":"2026-10-06T08:30:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/products":{"get":{"operationId":"getProducts","tags":["Artiklar"],"summary":"Lista artiklar","description":"Artiklarna i organisationen, både aktiva och inaktiva, nyast först. Med isActive=true: bara de som går att välja på nya orderrader. Med articleNumber: artikeln med just det numret.","x-scope":"read","parameters":[{"name":"limit","in":"query","required":false,"description":"Antal rader per sida, 1 till 200. Standard 50.","schema":{"default":50,"type":"integer","minimum":1,"maximum":200}},{"name":"cursor","in":"query","required":false,"description":"Värdet i nextCursor från förra svaret, för att hämta nästa sida. Utelämnas för första sidan.","schema":{"type":"string","minLength":1,"maxLength":400}},{"name":"sort","in":"query","required":false,"description":"Sortering: createdAt eller updatedAt. Standard createdAt.","schema":{"default":"createdAt","type":"string","enum":["createdAt","updatedAt"]}},{"name":"order","in":"query","required":false,"description":"Ordning: desc (nyast först, standard) eller asc (äldst först).","schema":{"default":"desc","type":"string","enum":["asc","desc"]}},{"name":"updatedSince","in":"query","required":false,"description":"Bara det som ändrats efter den här tidpunkten: rader med updatedAt senare än den, räknat i millisekunder (raden med exakt samma updatedAt som ni skickar kommer inte med igen). För stegvis synk: sort=updatedAt&order=asc&updatedSince=<senaste updatedAt ni fått>.","schema":{"type":"string","format":"date-time"}},{"name":"isActive","in":"query","required":false,"description":"true = bara aktiva artiklar. false = bara inaktiva. Utelämnat: alla.","schema":{"type":"string","enum":["true","false"]}},{"name":"articleNumber","in":"query","required":false,"description":"Bara artikeln med exakt det här artikelnumret.","schema":{"type":"string","minLength":1,"maxLength":50}}],"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Product"},"description":"Raderna på den här sidan."},"nextCursor":{"description":"Skicka som cursor för att hämta nästa sida. null när det inte finns fler rader.","type":["string","null"]}},"required":["data","nextCursor"]},"example":{"data":[{"id":"5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a","articleNumber":"1040","name":"Serviceavtal Bas","description":"Serviceavtal Bas, per månad. Support vardagar 8–17.","unit":"mån","priceSek":1495,"vatRate":25,"isActive":true,"createdBy":null,"createdAt":"2026-10-05T12:00:00.000Z","updatedAt":"2026-10-05T12:00:00.000Z"}],"nextCursor":null}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}},"post":{"operationId":"postProducts","tags":["Artiklar"],"summary":"Skapa en artikel","description":"Lägger upp en artikel i artikelregistret, precis som Ny artikel i appen. Artikeln är aktiv från början. Finns artikelnumret redan på en annan artikel svarar API:t 409, med den artikelns id i existingId. Artikeln skickas till Fortnox första gången den används på en faktura.","x-scope":"write","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"articleNumber":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"description":"Artikelnummer, högst 50 tecken. Får bara finnas på en artikel i organisationen. null = inget nummer."},"name":{"description":"Artikelns namn, högst 200 tecken.","type":"string","minLength":1,"maxLength":200},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"description":"Beskrivning, högst 2000 tecken. Föreslås som text på orderraden. null = ingen beskrivning."},"unit":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"description":"Enhet, högst 20 tecken, till exempel st eller tim. null eller utelämnat i POST ger st."},"priceSek":{"type":"number","minimum":0,"maximum":1000000000,"multipleOf":0.01,"description":"Pris per enhet i kronor, exklusive moms. Från 0, högst två decimaler."},"vatRate":{"type":"number","minimum":0,"maximum":100,"multipleOf":0.01,"description":"Momssats i procent, 0 till 100. Utelämnat i POST ger 25."}},"required":["name","priceSek"],"additionalProperties":false},"example":{"articleNumber":"1040","name":"Serviceavtal Bas","description":"Serviceavtal Bas, per månad. Support vardagar 8–17.","unit":"mån","priceSek":1495,"vatRate":25}}}},"responses":{"201":{"description":"Skapat. Location har adressen till det som skapades.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Location":{"$ref":"#/components/headers/Location"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Product"},"example":{"id":"5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a","articleNumber":"1040","name":"Serviceavtal Bas","description":"Serviceavtal Bas, per månad. Support vardagar 8–17.","unit":"mån","priceSek":1495,"vatRate":25,"isActive":true,"createdBy":null,"createdAt":"2026-10-05T12:00:00.000Z","updatedAt":"2026-10-05T12:00:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/products/{id}":{"get":{"operationId":"getProductsById","tags":["Artiklar"],"summary":"Hämta en artikel","description":"En artikel, aktiv eller inaktiv.","x-scope":"read","parameters":[{"name":"id","in":"path","required":true,"description":"Id (uuid).","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Product"},"example":{"id":"5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a","articleNumber":"1040","name":"Serviceavtal Bas","description":"Serviceavtal Bas, per månad. Support vardagar 8–17.","unit":"mån","priceSek":1495,"vatRate":25,"isActive":true,"createdBy":null,"createdAt":"2026-10-05T12:00:00.000Z","updatedAt":"2026-10-05T12:00:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}},"patch":{"operationId":"patchProductsById","tags":["Artiklar"],"summary":"Ändra en artikel","description":"Ändrar en artikel. Fält som inte skickas lämnas orörda. null tömmer artikelnummer och beskrivning; null som enhet ger st. Med isActive görs artikeln inaktiv eller aktiv igen. Ordrar som redan har artikeln på en rad ändras inte: raden behåller sin text och sitt pris.","x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"Id (uuid).","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"articleNumber":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"description":"Artikelnummer, högst 50 tecken. Får bara finnas på en artikel i organisationen. null = inget nummer."},"name":{"description":"Artikelns namn, högst 200 tecken.","type":"string","minLength":1,"maxLength":200},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"description":"Beskrivning, högst 2000 tecken. Föreslås som text på orderraden. null = ingen beskrivning."},"unit":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"description":"Enhet, högst 20 tecken, till exempel st eller tim. null eller utelämnat i POST ger st."},"priceSek":{"type":"number","minimum":0,"maximum":1000000000,"multipleOf":0.01,"description":"Pris per enhet i kronor, exklusive moms. Från 0, högst två decimaler."},"vatRate":{"type":"number","minimum":0,"maximum":100,"multipleOf":0.01,"description":"Momssats i procent, 0 till 100. Utelämnat i POST ger 25."},"isActive":{"description":"false gör artikeln inaktiv: den går inte längre att välja på nya orderrader. true gör den aktiv igen.","type":"boolean"}},"additionalProperties":false},"example":{"priceSek":1595,"isActive":true}}}},"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Product"},"example":{"id":"5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a","articleNumber":"1040","name":"Serviceavtal Bas","description":"Serviceavtal Bas, per månad. Support vardagar 8–17.","unit":"mån","priceSek":1595,"vatRate":25,"isActive":true,"createdBy":null,"createdAt":"2026-10-05T12:00:00.000Z","updatedAt":"2026-10-06T08:30:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/call-lists":{"get":{"operationId":"getCallLists","tags":["Ringlistor"],"summary":"Lista ringlistor","description":"Organisationens ringlistor med antal rader per status, nyast först. Arkiverade listor visas bara med archived=true. Raderna i en lista hämtas med GET /call-lists/{id}.","x-scope":"read","parameters":[{"name":"limit","in":"query","required":false,"description":"Antal rader per sida, 1 till 200. Standard 50.","schema":{"default":50,"type":"integer","minimum":1,"maximum":200}},{"name":"cursor","in":"query","required":false,"description":"Värdet i nextCursor från förra svaret, för att hämta nästa sida. Utelämnas för första sidan.","schema":{"type":"string","minLength":1,"maxLength":400}},{"name":"sort","in":"query","required":false,"description":"Sortering: createdAt eller updatedAt. Standard createdAt.","schema":{"default":"createdAt","type":"string","enum":["createdAt","updatedAt"]}},{"name":"order","in":"query","required":false,"description":"Ordning: desc (nyast först, standard) eller asc (äldst först).","schema":{"default":"desc","type":"string","enum":["asc","desc"]}},{"name":"updatedSince","in":"query","required":false,"description":"Bara det som ändrats efter den här tidpunkten: rader med updatedAt senare än den, räknat i millisekunder (raden med exakt samma updatedAt som ni skickar kommer inte med igen). För stegvis synk: sort=updatedAt&order=asc&updatedSince=<senaste updatedAt ni fått>.","schema":{"type":"string","format":"date-time"}},{"name":"ownerUserId","in":"query","required":false,"description":"Bara listor med den här ägaren. Id hämtas med GET /users.","schema":{"type":"string","minLength":1,"maxLength":64}},{"name":"archived","in":"query","required":false,"description":"true = bara arkiverade listor. false eller utelämnat = bara aktiva listor.","schema":{"type":"string","enum":["true","false"]}}],"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CallList"},"description":"Raderna på den här sidan."},"nextCursor":{"description":"Skicka som cursor för att hämta nästa sida. null när det inte finns fler rader.","type":["string","null"]}},"required":["data","nextCursor"]},"example":{"data":[{"id":"a9b8c7d6-e5f4-4a3b-9c2d-1e0f9a8b7c6d","name":"VVS Uppsala oktober","ownerUserId":"Kq3ZxT8mW2pLr9VbN4sYc7JdH1fG6aEu","archivedAt":null,"itemCounts":{"total":3,"notCalled":2,"answered":0,"noAnswer":1,"notInterested":0},"createdBy":null,"createdAt":"2026-10-01T08:00:00.000Z","updatedAt":"2026-10-01T08:00:00.000Z"}],"nextCursor":null}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}},"post":{"operationId":"postCallLists","tags":["Ringlistor"],"summary":"Skapa en ringlista","description":"Skapar en tom ringlista, som Ny ringlista i appen. Ange ownerUserId för att ge listan till en säljare: då ser säljaren den under Ringlistor. Utan ägare syns listan i appen bara för dem som får skapa ringlistor åt andra. Företag läggs till med POST /call-lists/{id}/items.","x-scope":"write","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Listans namn, högst 200 tecken, till exempel VVS Uppsala oktober.","type":"string","minLength":1,"maxLength":200},"ownerUserId":{"description":"Säljaren som ska äga listan. Ska vara en användare i organisationen (GET /users). Utelämnat eller null: ingen ägare.","anyOf":[{"type":"string","minLength":1,"maxLength":64,"description":"Användarens id. Hämtas med GET /users."},{"type":"null"}]}},"required":["name"],"additionalProperties":false},"example":{"name":"VVS Uppsala oktober","ownerUserId":"Kq3ZxT8mW2pLr9VbN4sYc7JdH1fG6aEu"}}}},"responses":{"201":{"description":"Skapat. Location har adressen till det som skapades.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Location":{"$ref":"#/components/headers/Location"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CallList"},"example":{"id":"a9b8c7d6-e5f4-4a3b-9c2d-1e0f9a8b7c6d","name":"VVS Uppsala oktober","ownerUserId":"Kq3ZxT8mW2pLr9VbN4sYc7JdH1fG6aEu","archivedAt":null,"itemCounts":{"total":0,"notCalled":0,"answered":0,"noAnswer":0,"notInterested":0},"createdBy":null,"createdAt":"2026-10-01T08:00:00.000Z","updatedAt":"2026-10-01T08:00:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/call-lists/{id}":{"get":{"operationId":"getCallListsById","tags":["Ringlistor"],"summary":"Hämta en ringlista med rader","description":"En ringlista med antal rader per status och sina rader: vilka företag som står i listan, status, antal försök och anteckning för vart och ett. Raderna kommer sidvis som i andra listor (limit, cursor, sort, order, updatedSince), med 200 rader per sida om inget annat anges: en lista med högst så många rader kommer i ett svar, en större hämtas med nextCursor tills det är null. itemCounts gäller alltid hela listan. För att följa hur det går i en lista: sort=updatedAt&order=asc&updatedSince=<tidpunkt>. Fungerar också för en arkiverad lista.","x-scope":"read","parameters":[{"name":"id","in":"path","required":true,"description":"Id (uuid).","schema":{"type":"string","format":"uuid"}},{"name":"limit","in":"query","required":false,"description":"Antal rader per sida, 1 till 200. Standard 200: en lista med högst så många rader kommer i ett svar.","schema":{"default":200,"type":"integer","minimum":1,"maximum":200}},{"name":"cursor","in":"query","required":false,"description":"Värdet i nextCursor från förra svaret, för att hämta nästa sida. Utelämnas för första sidan.","schema":{"type":"string","minLength":1,"maxLength":400}},{"name":"sort","in":"query","required":false,"description":"Sortering: createdAt eller updatedAt. Standard createdAt.","schema":{"default":"createdAt","type":"string","enum":["createdAt","updatedAt"]}},{"name":"order","in":"query","required":false,"description":"Ordning: asc (listans ordning, standard) eller desc (nyast först).","schema":{"default":"asc","type":"string","enum":["asc","desc"]}},{"name":"updatedSince","in":"query","required":false,"description":"Bara det som ändrats efter den här tidpunkten: rader med updatedAt senare än den, räknat i millisekunder (raden med exakt samma updatedAt som ni skickar kommer inte med igen). För stegvis synk: sort=updatedAt&order=asc&updatedSince=<senaste updatedAt ni fått>.","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CallListWithItems"},"example":{"id":"a9b8c7d6-e5f4-4a3b-9c2d-1e0f9a8b7c6d","name":"VVS Uppsala oktober","ownerUserId":"Kq3ZxT8mW2pLr9VbN4sYc7JdH1fG6aEu","archivedAt":null,"itemCounts":{"total":3,"notCalled":2,"answered":0,"noAnswer":1,"notInterested":0},"createdBy":null,"createdAt":"2026-10-01T08:00:00.000Z","updatedAt":"2026-10-01T08:00:00.000Z","items":[{"id":"e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b","callListId":"a9b8c7d6-e5f4-4a3b-9c2d-1e0f9a8b7c6d","companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","status":"no_answer","attempts":1,"lastCalledAt":"2026-10-05T12:00:00.000Z","note":"Växeln svarade, Anna är tillbaka på torsdag.","createdAt":"2026-10-01T08:00:00.000Z","updatedAt":"2026-10-05T12:00:00.000Z"}],"nextCursor":null}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}},"patch":{"operationId":"patchCallListsById","tags":["Ringlistor"],"summary":"Arkivera en ringlista","description":"Arkiverar listan, som Arkivera lista i appen: den försvinner från Ringlistor i appen och går sedan inte att ändra. Det går inte att ångra, varken här eller i appen. Raderna finns kvar och går att läsa. Uppgifter och händelser som listan har gett upphov till påverkas inte.","x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"Id (uuid).","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"archived":{"type":"boolean","const":true,"description":"true arkiverar listan. Inget annat värde går att skicka: en arkiverad lista går inte att ta fram igen."}},"required":["archived"],"additionalProperties":false},"example":{"archived":true}}}},"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CallList"},"example":{"id":"a9b8c7d6-e5f4-4a3b-9c2d-1e0f9a8b7c6d","name":"VVS Uppsala oktober","ownerUserId":"Kq3ZxT8mW2pLr9VbN4sYc7JdH1fG6aEu","archivedAt":"2026-10-06T08:30:00.000Z","itemCounts":{"total":3,"notCalled":2,"answered":0,"noAnswer":1,"notInterested":0},"createdBy":null,"createdAt":"2026-10-01T08:00:00.000Z","updatedAt":"2026-10-06T08:30:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/call-lists/{id}/items":{"post":{"operationId":"postCallListsByIdItems","tags":["Ringlistor"],"summary":"Lägg till företag i en ringlista","description":"Lägger sparade företag sist i listan, i den ordning de anges. Företag som inte går att lägga till hoppas över och räknas upp i skipped med skälet: not_found (finns inte bland era sparade företag), do_not_contact (märkt Kontakta inte) eller already_in_list (står redan i listan). Anropet lyckas även om alla hoppas över.","x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"Ringlistans id.","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"companyIds":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"string","format":"uuid","description":"Id (uuid)."},"description":"Id för företagen som ska läggas till, 1 till 200 i ett anrop."}},"required":["companyIds"],"additionalProperties":false},"example":{"companyIds":["2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","3a4b5c6d-7e8f-4a9b-8c0d-1e2f3a4b5c6d"]}}}},"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"type":"object","properties":{"added":{"type":"array","items":{"$ref":"#/components/schemas/CallListItem"},"description":"Raderna som lades till, i listans ordning."},"skipped":{"type":"array","items":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid","description":"Företaget som hoppades över."},"reason":{"type":"string","enum":["not_found","do_not_contact","already_in_list"],"description":"Varför: not_found, do_not_contact eller already_in_list."}},"required":["companyId","reason"]},"description":"Företagen som inte lades till, med skälet."}},"required":["added","skipped"]},"example":{"added":[{"id":"e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b","callListId":"a9b8c7d6-e5f4-4a3b-9c2d-1e0f9a8b7c6d","companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","status":"not_called","attempts":0,"lastCalledAt":null,"note":null,"createdAt":"2026-10-05T12:00:00.000Z","updatedAt":"2026-10-05T12:00:00.000Z"}],"skipped":[{"companyId":"3a4b5c6d-7e8f-4a9b-8c0d-1e2f3a4b5c6d","reason":"do_not_contact"}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/call-lists/{id}/items/{itemId}":{"patch":{"operationId":"patchCallListsByIdItemsByItemId","tags":["Ringlistor"],"summary":"Sätt status på en rad","description":"Registrerar hur ett samtal gick, som knapparna Svar, Ej svar och Ej intresserad i appen. Varje anrop med en annan status än not_called räknas som ett samtalsförsök och skrivs i företagets tidslinje. answered räknas dessutom som kontakt med företaget (senaste kontakt uppdateras). no_answer skapar uppgiften Ring igen om två dagar, till listans ägare, utom när företaget är märkt Kontakta inte. not_called återställer raden utan att något annat händer; antalet försök står kvar.","x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"Ringlistans id.","schema":{"type":"string","format":"uuid"}},{"name":"itemId","in":"path","required":true,"description":"Radens id.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["not_called","answered","no_answer","not_interested"],"description":"Den nya statusen: not_called, answered, no_answer eller not_interested."},"note":{"description":"Anteckning om samtalet (valfri), högst 500 tecken. Den sparas på raden och skrivs i tidslinjen. Utelämnad eller tom: radens anteckning lämnas orörd.","type":"string","maxLength":500}},"required":["status"],"additionalProperties":false},"example":{"status":"no_answer","note":"Växeln svarade, Anna är tillbaka på torsdag."}}}},"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CallListItem"},"example":{"id":"e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b","callListId":"a9b8c7d6-e5f4-4a3b-9c2d-1e0f9a8b7c6d","companyId":"2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a","status":"no_answer","attempts":1,"lastCalledAt":"2026-10-05T12:00:00.000Z","note":"Växeln svarade, Anna är tillbaka på torsdag.","createdAt":"2026-10-01T08:00:00.000Z","updatedAt":"2026-10-05T12:00:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}},"delete":{"operationId":"deleteCallListsByIdItemsByItemId","tags":["Ringlistor"],"summary":"Ta bort en rad ur en ringlista","description":"Tar bort företaget ur listan. Företaget självt, dess tidslinje och uppgifter som listan har skapat påverkas inte.","x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"Ringlistans id.","schema":{"type":"string","format":"uuid"}},{"name":"itemId","in":"path","required":true,"description":"Radens id.","schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Det gick bra. Svaret har inget innehåll.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/tags":{"get":{"operationId":"getTags","tags":["Taggar"],"summary":"Lista taggar","description":"Alla taggar i organisationen, i bokstavsordning. Listan kommer alltid på en sida. Taggar sätts på ett företag med PATCH /companies/{id}, och företag med en viss tagg hämtas med GET /companies?tag=<namn>.","x-scope":"read","responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Tag"},"description":"Raderna på den här sidan."},"nextCursor":{"description":"Skicka som cursor för att hämta nästa sida. null när det inte finns fler rader.","type":["string","null"]}},"required":["data","nextCursor"]},"example":{"data":[{"id":"7c1e2b9a-4d3f-4a6b-8c5d-9e0f1a2b3c4d","name":"Mässa 2026","createdAt":"2026-04-21T07:45:00.000Z"},{"id":"0a9b8c7d-6e5f-4a3b-9c2d-1e0f9a8b7c6d","name":"VIP","createdAt":"2026-03-14T09:30:00.000Z"}],"nextCursor":null}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/users":{"get":{"operationId":"getUsers","tags":["Användare"],"summary":"Lista användare","description":"Användarna i organisationen, i bokstavsordning, med id, namn, e-postadress och roll. Listan kommer alltid på en sida. Användarens id är det som anges som ansvarig på företag, affärer, uppgifter och ringlistor.","x-scope":"read","responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/User"},"description":"Raderna på den här sidan."},"nextCursor":{"description":"Skicka som cursor för att hämta nästa sida. null när det inte finns fler rader.","type":["string","null"]}},"required":["data","nextCursor"]},"example":{"data":[{"id":"pQ7mX2kV9sLwT4bN8cRd3fGh","name":"Anna Lindqvist","email":"anna.lindqvist@exempelbolaget.example","role":{"key":"admin","name":"Admin"}},{"id":"Zt5hK8nW3yBq6vJm1xCe9aLp","name":"Erik Sandberg","email":"erik.sandberg@exempelbolaget.example","role":{"key":"sales","name":"Säljare"}}],"nextCursor":null}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/webhooks":{"get":{"operationId":"getWebhooks","tags":["Webhooks"],"summary":"Lista webhooks","description":"Organisationens webhooks, nyast först. Alla ryms på en sida (högst 50 per organisation, avstängda inräknade). Hemligheten visas aldrig här. Kräver en nyckel som får skriva, eftersom adresserna kan fungera som lösenord hos mottagaren.","x-scope":"write","responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Webhook"},"description":"Webhookarna."},"nextCursor":{"type":"null","description":"Alltid null: alla ryms på en sida."}},"required":["data","nextCursor"]},"example":{"data":[{"id":"4e1f6a2b-9c3d-4e5f-8a7b-6c5d4e3f2a1b","name":"Affärssystemet","url":"https://affarssystemet.exempelbolaget.se/crmdata/webhook","events":["deal.won","order.created"],"status":"active","pausedReason":null,"consecutiveFailures":0,"lastSuccessAt":"2026-10-06T09:15:00.000Z","lastFailureAt":null,"createdAt":"2026-10-05T12:00:00.000Z"}],"nextCursor":null}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}},"post":{"operationId":"postWebhooks","tags":["Webhooks"],"summary":"Skapa en webhook","description":"Skapar en webhook: CRMdata skickar ett meddelande (POST med JSON) till adressen varje gång en av händelserna inträffar. Svaret innehåller hemligheten för signaturen, en enda gång: spara den på er server. Adressen måste börja med https:// och nås från internet; adresser in i lokala eller privata nät nekas, liksom en adress som innehåller ett personnummer. Högst 10 webhooks per organisation som är igång eller pausade; avstängda räknas inte, men alla tillsammans får vara högst 50. Över taket: 403. Varje meddelande har huvudena CRMdata-Event (händelsetypen), CRMdata-Delivery (leveransens id) och CRMdata-Signature (t=<unix-sekunder>,v1=<hex hmac-sha256(hemlighet, t + \".\" + innehållet)>). Svara 2xx inom 10 sekunder. Allt annat räknas som misslyckat och vi försöker igen efter 1, 5, 30, 120, 360, 720 minuter. Svarar adressen 410 Gone stängs webhooken av direkt (status disabled), utan nya försök: så avslutar till exempel Zapier en prenumeration. Hur meddelandena ser ut beskrivs under webhooks i OpenAPI-filen. Idempotency-Key gäller inte här. Svaret innehåller hemligheten, och den sparas aldrig hos oss i klartext, inte heller för att kunna skicka samma svar igen. Varje anrop skapar därför en ny webhook. Kom svaret aldrig fram: hämta webhookarna med GET /webhooks, ta bort den som skapades och skapa en ny.","x-scope":"write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Ert namn på kopplingen, till exempel Affärssystemet. Högst 100 tecken.","type":"string","minLength":1,"maxLength":100},"url":{"type":"string","minLength":1,"maxLength":2000,"description":"Adressen meddelandena ska skickas till. Måste börja med https:// och nås från internet (inte ett lokalt eller privat nät). Får inte innehålla ett personnummer. Sparas i normaliserad form (t.ex. små bokstäver i värdnamnet)."},"events":{"description":"Händelsetyperna som ska skickas, till exempel [\"deal.won\", \"order.created\"]. Tom lista = alla händelser. Typerna finns i GET /webhook-events.","maxItems":16,"type":"array","items":{"type":"string"}}},"required":["name","url"],"additionalProperties":false},"example":{"name":"Affärssystemet","url":"https://affarssystemet.exempelbolaget.se/crmdata/webhook","events":["deal.won","order.created"]}}}},"responses":{"201":{"description":"Skapat. Location har adressen till det som skapades.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Location":{"$ref":"#/components/headers/Location"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreated"},"example":{"id":"4e1f6a2b-9c3d-4e5f-8a7b-6c5d4e3f2a1b","name":"Affärssystemet","url":"https://affarssystemet.exempelbolaget.se/crmdata/webhook","events":["deal.won","order.created"],"status":"active","pausedReason":null,"consecutiveFailures":0,"lastSuccessAt":null,"lastFailureAt":null,"createdAt":"2026-10-05T12:00:00.000Z","secret":"whsec_Qm9yYSBpbnRlIHNwYXJhIGhlbWxpZ2hldGVuIGkgZW4gd2ViYnNpZGE"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/webhooks/{id}":{"get":{"operationId":"getWebhooksById","tags":["Webhooks"],"summary":"Hämta en webhook","description":"En webhook med sitt läge och sina räknare. Hemligheten visas aldrig. Kräver en nyckel som får skriva, eftersom adressen kan fungera som lösenord hos mottagaren.","x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"Id (uuid).","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"},"example":{"id":"4e1f6a2b-9c3d-4e5f-8a7b-6c5d4e3f2a1b","name":"Affärssystemet","url":"https://affarssystemet.exempelbolaget.se/crmdata/webhook","events":["deal.won","order.created"],"status":"active","pausedReason":null,"consecutiveFailures":0,"lastSuccessAt":"2026-10-06T09:15:00.000Z","lastFailureAt":null,"createdAt":"2026-10-05T12:00:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}},"patch":{"operationId":"patchWebhooksById","tags":["Webhooks"],"summary":"Ändra en webhook","description":"Ändrar namn, adress, händelser eller läge. Fält som inte skickas lämnas orörda. status active startar en webhook som är avstängd eller som CRMdata har pausat: räknaren nollas och de leveranser som väntar skickas. En avstängd webhook räknas mot taket igen när den startas: är redan 10 andra igång eller pausade svarar API:t 403. status disabled stänger av den: det som händer medan den är avstängd skickas aldrig. En ny adress kontrolleras på samma sätt som när webhooken skapas. Hemligheten går inte att byta: ta bort webhooken och skapa en ny.","x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"Id (uuid).","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Ert namn på kopplingen, till exempel Affärssystemet. Högst 100 tecken.","type":"string","minLength":1,"maxLength":100},"url":{"type":"string","minLength":1,"maxLength":2000,"description":"Adressen meddelandena ska skickas till. Måste börja med https:// och nås från internet (inte ett lokalt eller privat nät). Får inte innehålla ett personnummer. Sparas i normaliserad form (t.ex. små bokstäver i värdnamnet)."},"events":{"description":"Händelsetyperna som ska skickas, till exempel [\"deal.won\", \"order.created\"]. Tom lista = alla händelser. Typerna finns i GET /webhook-events.","maxItems":16,"type":"array","items":{"type":"string"}},"status":{"description":"active startar webhooken (också en som CRMdata pausat: räknaren nollas och väntande leveranser skickas). disabled stänger av den: det som händer medan den är avstängd skickas aldrig, men leveranser som redan väntar ligger kvar tills den startas igen.","type":"string","enum":["active","disabled"]}},"additionalProperties":false},"example":{"events":["deal.won","deal.lost","order.created"],"status":"active"}}}},"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"},"example":{"id":"4e1f6a2b-9c3d-4e5f-8a7b-6c5d4e3f2a1b","name":"Affärssystemet","url":"https://affarssystemet.exempelbolaget.se/crmdata/webhook","events":["deal.won","deal.lost","order.created"],"status":"active","pausedReason":null,"consecutiveFailures":0,"lastSuccessAt":"2026-10-06T09:15:00.000Z","lastFailureAt":null,"createdAt":"2026-10-05T12:00:00.000Z"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}},"delete":{"operationId":"deleteWebhooksById","tags":["Webhooks"],"summary":"Ta bort en webhook","description":"Tar bort webhooken och dess logg över leveranser. Inget mer skickas till adressen. Det går inte att ångra.","x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"Id (uuid).","schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Det gick bra. Svaret har inget innehåll.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/webhooks/{id}/ping":{"post":{"operationId":"postWebhooksByIdPing","tags":["Webhooks"],"summary":"Skicka en testhändelse","description":"Lägger en testhändelse av typen ping i kön till webhooken, med ett påhittat objekt i data. Den skickas inom några sekunder, signerad som alla andra meddelanden, så att ni kan prova mottagaren. Webhooken måste vara igång (status active). En testhändelse räknas inte mot gränsen för att pausa webhooken.","x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"Id (uuid).","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Idempotent-Replayed":{"$ref":"#/components/headers/IdempotentReplayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookPing"},"example":{"deliveryId":"0f9e8d7c-6b5a-4493-8271-605f4e3d2c1b","eventId":"5a4b3c2d-1e0f-4a9b-8c7d-6e5f4a3b2c1d"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/TooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}},"/webhook-events":{"get":{"operationId":"getWebhookEvents","tags":["Webhooks"],"summary":"Lista händelsetyper","description":"Händelsetyperna som webhooks kan prenumerera på, med texter på svenska. Namnen är fasta. Meddelandets data är objektet händelsen gäller, i samma form som API:t ger det (ett företag för company.*, en kontakt för contact.* och så vidare); för en borttagen kontakt är det kontakten som den var.","x-scope":"read","responses":{"200":{"description":"Det gick bra.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEventType"},"description":"Händelsetyperna."},"nextCursor":{"type":"null","description":"Alltid null: alla ryms på en sida."}},"required":["data","nextCursor"]},"example":{"data":[{"type":"company.created","entity":"company","label":"Företag sparat","description":"Ett nytt företag sparades (från Prospektera, för hand eller via API:t)."},{"type":"company.updated","entity":"company","label":"Företag ändrat","description":"Uppgifterna på ett företag ändrades (alias, ansvarig, adresser, taggar, kontakta inte …), också när nya uppgifter från företagsdatan har förts in."}],"nextCursor":null}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/Busy"}}}}},"webhooks":{"company.created":{"post":{"summary":"Företag sparat","description":"Ett nytt företag sparades (från Prospektera, för hand eller via API:t). Skickas till webhooks som prenumererar på company.created (eller på alla händelser).","parameters":[{"name":"CRMdata-Event","in":"header","required":true,"description":"Händelsetypen, samma som type i innehållet.","schema":{"type":"string","const":"company.created"}},{"name":"CRMdata-Delivery","in":"header","required":true,"description":"Leveransens id. Ett nytt försök på samma händelse har samma id.","schema":{"type":"string","format":"uuid"}},{"name":"CRMdata-Signature","in":"header","required":true,"description":"Signaturen: t=<unix-sekunder>,v1=<hex hmac-sha256(hemlighet, t + \".\" + innehållet)>. Kontrollera den innan ni litar på innehållet; godta bara t som är högst 300 sekunder gammal.","schema":{"type":"string","pattern":"^t=\\d+,v1=[0-9a-f]{64}$"},"example":"t=1759750000,v1=5d41402abc4b2a76b9719d911017c592e3b0c44298fc1c149afbf4c8996fb924"},{"name":"User-Agent","in":"header","required":true,"description":"Alltid CRMdata-Webhooks/1.","schema":{"type":"string","const":"CRMdata-Webhooks/1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","type","occurredAt","organizationId","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Händelsens id. Samma händelse kan i sällsynta fall komma två gånger: hantera dubbletter på id."},"type":{"type":"string","const":"company.created","description":"Händelsetypen."},"occurredAt":{"type":"string","format":"date-time","description":"När det hände (UTC, ISO 8601)."},"organizationId":{"type":"string","description":"Er organisations id, samma som organization.id i GET /me."},"data":{"$ref":"#/components/schemas/Company","description":"Objektet händelsen gäller, i samma form som API:t ger det."}}}}}},"responses":{"410":{"description":"Adressen finns inte längre: webhooken stängs av direkt (status disabled, skälet i pausedReason) och inget mer skickas dit, utan nya försök. Så avslutar till exempel Zapier en prenumeration. Starta den igen i appen eller med PATCH /webhooks/{id} om adressen fungerar igen."},"2XX":{"description":"Mottaget. Svara inom 10 sekunder; innehållet i svaret läses inte."},"default":{"description":"Räknas som misslyckat (också 3xx: omdirigeringar följs inte). Vi försöker igen efter 1, 5, 30, 120, 360, 720 minuter, sedan ges leveransen upp."}}}},"company.updated":{"post":{"summary":"Företag ändrat","description":"Uppgifterna på ett företag ändrades (alias, ansvarig, adresser, taggar, kontakta inte …), också när nya uppgifter från företagsdatan har förts in. Skickas till webhooks som prenumererar på company.updated (eller på alla händelser).","parameters":[{"name":"CRMdata-Event","in":"header","required":true,"description":"Händelsetypen, samma som type i innehållet.","schema":{"type":"string","const":"company.updated"}},{"name":"CRMdata-Delivery","in":"header","required":true,"description":"Leveransens id. Ett nytt försök på samma händelse har samma id.","schema":{"type":"string","format":"uuid"}},{"name":"CRMdata-Signature","in":"header","required":true,"description":"Signaturen: t=<unix-sekunder>,v1=<hex hmac-sha256(hemlighet, t + \".\" + innehållet)>. Kontrollera den innan ni litar på innehållet; godta bara t som är högst 300 sekunder gammal.","schema":{"type":"string","pattern":"^t=\\d+,v1=[0-9a-f]{64}$"},"example":"t=1759750000,v1=5d41402abc4b2a76b9719d911017c592e3b0c44298fc1c149afbf4c8996fb924"},{"name":"User-Agent","in":"header","required":true,"description":"Alltid CRMdata-Webhooks/1.","schema":{"type":"string","const":"CRMdata-Webhooks/1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","type","occurredAt","organizationId","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Händelsens id. Samma händelse kan i sällsynta fall komma två gånger: hantera dubbletter på id."},"type":{"type":"string","const":"company.updated","description":"Händelsetypen."},"occurredAt":{"type":"string","format":"date-time","description":"När det hände (UTC, ISO 8601)."},"organizationId":{"type":"string","description":"Er organisations id, samma som organization.id i GET /me."},"data":{"$ref":"#/components/schemas/Company","description":"Objektet händelsen gäller, i samma form som API:t ger det."}}}}}},"responses":{"410":{"description":"Adressen finns inte längre: webhooken stängs av direkt (status disabled, skälet i pausedReason) och inget mer skickas dit, utan nya försök. Så avslutar till exempel Zapier en prenumeration. Starta den igen i appen eller med PATCH /webhooks/{id} om adressen fungerar igen."},"2XX":{"description":"Mottaget. Svara inom 10 sekunder; innehållet i svaret läses inte."},"default":{"description":"Räknas som misslyckat (också 3xx: omdirigeringar följs inte). Vi försöker igen efter 1, 5, 30, 120, 360, 720 minuter, sedan ges leveransen upp."}}}},"contact.created":{"post":{"summary":"Kontakt skapad","description":"En kontakt lades till på ett företag. Skickas till webhooks som prenumererar på contact.created (eller på alla händelser).","parameters":[{"name":"CRMdata-Event","in":"header","required":true,"description":"Händelsetypen, samma som type i innehållet.","schema":{"type":"string","const":"contact.created"}},{"name":"CRMdata-Delivery","in":"header","required":true,"description":"Leveransens id. Ett nytt försök på samma händelse har samma id.","schema":{"type":"string","format":"uuid"}},{"name":"CRMdata-Signature","in":"header","required":true,"description":"Signaturen: t=<unix-sekunder>,v1=<hex hmac-sha256(hemlighet, t + \".\" + innehållet)>. Kontrollera den innan ni litar på innehållet; godta bara t som är högst 300 sekunder gammal.","schema":{"type":"string","pattern":"^t=\\d+,v1=[0-9a-f]{64}$"},"example":"t=1759750000,v1=5d41402abc4b2a76b9719d911017c592e3b0c44298fc1c149afbf4c8996fb924"},{"name":"User-Agent","in":"header","required":true,"description":"Alltid CRMdata-Webhooks/1.","schema":{"type":"string","const":"CRMdata-Webhooks/1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","type","occurredAt","organizationId","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Händelsens id. Samma händelse kan i sällsynta fall komma två gånger: hantera dubbletter på id."},"type":{"type":"string","const":"contact.created","description":"Händelsetypen."},"occurredAt":{"type":"string","format":"date-time","description":"När det hände (UTC, ISO 8601)."},"organizationId":{"type":"string","description":"Er organisations id, samma som organization.id i GET /me."},"data":{"$ref":"#/components/schemas/Contact","description":"Objektet händelsen gäller, i samma form som API:t ger det."}}}}}},"responses":{"410":{"description":"Adressen finns inte längre: webhooken stängs av direkt (status disabled, skälet i pausedReason) och inget mer skickas dit, utan nya försök. Så avslutar till exempel Zapier en prenumeration. Starta den igen i appen eller med PATCH /webhooks/{id} om adressen fungerar igen."},"2XX":{"description":"Mottaget. Svara inom 10 sekunder; innehållet i svaret läses inte."},"default":{"description":"Räknas som misslyckat (också 3xx: omdirigeringar följs inte). Vi försöker igen efter 1, 5, 30, 120, 360, 720 minuter, sedan ges leveransen upp."}}}},"contact.updated":{"post":{"summary":"Kontakt ändrad","description":"En kontakt ändrades, även när den blev huvudkontakt. Skickas till webhooks som prenumererar på contact.updated (eller på alla händelser).","parameters":[{"name":"CRMdata-Event","in":"header","required":true,"description":"Händelsetypen, samma som type i innehållet.","schema":{"type":"string","const":"contact.updated"}},{"name":"CRMdata-Delivery","in":"header","required":true,"description":"Leveransens id. Ett nytt försök på samma händelse har samma id.","schema":{"type":"string","format":"uuid"}},{"name":"CRMdata-Signature","in":"header","required":true,"description":"Signaturen: t=<unix-sekunder>,v1=<hex hmac-sha256(hemlighet, t + \".\" + innehållet)>. Kontrollera den innan ni litar på innehållet; godta bara t som är högst 300 sekunder gammal.","schema":{"type":"string","pattern":"^t=\\d+,v1=[0-9a-f]{64}$"},"example":"t=1759750000,v1=5d41402abc4b2a76b9719d911017c592e3b0c44298fc1c149afbf4c8996fb924"},{"name":"User-Agent","in":"header","required":true,"description":"Alltid CRMdata-Webhooks/1.","schema":{"type":"string","const":"CRMdata-Webhooks/1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","type","occurredAt","organizationId","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Händelsens id. Samma händelse kan i sällsynta fall komma två gånger: hantera dubbletter på id."},"type":{"type":"string","const":"contact.updated","description":"Händelsetypen."},"occurredAt":{"type":"string","format":"date-time","description":"När det hände (UTC, ISO 8601)."},"organizationId":{"type":"string","description":"Er organisations id, samma som organization.id i GET /me."},"data":{"$ref":"#/components/schemas/Contact","description":"Objektet händelsen gäller, i samma form som API:t ger det."}}}}}},"responses":{"410":{"description":"Adressen finns inte längre: webhooken stängs av direkt (status disabled, skälet i pausedReason) och inget mer skickas dit, utan nya försök. Så avslutar till exempel Zapier en prenumeration. Starta den igen i appen eller med PATCH /webhooks/{id} om adressen fungerar igen."},"2XX":{"description":"Mottaget. Svara inom 10 sekunder; innehållet i svaret läses inte."},"default":{"description":"Räknas som misslyckat (också 3xx: omdirigeringar följs inte). Vi försöker igen efter 1, 5, 30, 120, 360, 720 minuter, sedan ges leveransen upp."}}}},"contact.deleted":{"post":{"summary":"Kontakt borttagen","description":"En kontakt togs bort. Meddelandet innehåller kontakten som den var. Skickas till webhooks som prenumererar på contact.deleted (eller på alla händelser).","parameters":[{"name":"CRMdata-Event","in":"header","required":true,"description":"Händelsetypen, samma som type i innehållet.","schema":{"type":"string","const":"contact.deleted"}},{"name":"CRMdata-Delivery","in":"header","required":true,"description":"Leveransens id. Ett nytt försök på samma händelse har samma id.","schema":{"type":"string","format":"uuid"}},{"name":"CRMdata-Signature","in":"header","required":true,"description":"Signaturen: t=<unix-sekunder>,v1=<hex hmac-sha256(hemlighet, t + \".\" + innehållet)>. Kontrollera den innan ni litar på innehållet; godta bara t som är högst 300 sekunder gammal.","schema":{"type":"string","pattern":"^t=\\d+,v1=[0-9a-f]{64}$"},"example":"t=1759750000,v1=5d41402abc4b2a76b9719d911017c592e3b0c44298fc1c149afbf4c8996fb924"},{"name":"User-Agent","in":"header","required":true,"description":"Alltid CRMdata-Webhooks/1.","schema":{"type":"string","const":"CRMdata-Webhooks/1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","type","occurredAt","organizationId","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Händelsens id. Samma händelse kan i sällsynta fall komma två gånger: hantera dubbletter på id."},"type":{"type":"string","const":"contact.deleted","description":"Händelsetypen."},"occurredAt":{"type":"string","format":"date-time","description":"När det hände (UTC, ISO 8601)."},"organizationId":{"type":"string","description":"Er organisations id, samma som organization.id i GET /me."},"data":{"$ref":"#/components/schemas/Contact","description":"Objektet händelsen gäller, i samma form som API:t ger det."}}}}}},"responses":{"410":{"description":"Adressen finns inte längre: webhooken stängs av direkt (status disabled, skälet i pausedReason) och inget mer skickas dit, utan nya försök. Så avslutar till exempel Zapier en prenumeration. Starta den igen i appen eller med PATCH /webhooks/{id} om adressen fungerar igen."},"2XX":{"description":"Mottaget. Svara inom 10 sekunder; innehållet i svaret läses inte."},"default":{"description":"Räknas som misslyckat (också 3xx: omdirigeringar följs inte). Vi försöker igen efter 1, 5, 30, 120, 360, 720 minuter, sedan ges leveransen upp."}}}},"note.created":{"post":{"summary":"Anteckning skapad","description":"En anteckning skrevs på ett företag. Skickas till webhooks som prenumererar på note.created (eller på alla händelser).","parameters":[{"name":"CRMdata-Event","in":"header","required":true,"description":"Händelsetypen, samma som type i innehållet.","schema":{"type":"string","const":"note.created"}},{"name":"CRMdata-Delivery","in":"header","required":true,"description":"Leveransens id. Ett nytt försök på samma händelse har samma id.","schema":{"type":"string","format":"uuid"}},{"name":"CRMdata-Signature","in":"header","required":true,"description":"Signaturen: t=<unix-sekunder>,v1=<hex hmac-sha256(hemlighet, t + \".\" + innehållet)>. Kontrollera den innan ni litar på innehållet; godta bara t som är högst 300 sekunder gammal.","schema":{"type":"string","pattern":"^t=\\d+,v1=[0-9a-f]{64}$"},"example":"t=1759750000,v1=5d41402abc4b2a76b9719d911017c592e3b0c44298fc1c149afbf4c8996fb924"},{"name":"User-Agent","in":"header","required":true,"description":"Alltid CRMdata-Webhooks/1.","schema":{"type":"string","const":"CRMdata-Webhooks/1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","type","occurredAt","organizationId","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Händelsens id. Samma händelse kan i sällsynta fall komma två gånger: hantera dubbletter på id."},"type":{"type":"string","const":"note.created","description":"Händelsetypen."},"occurredAt":{"type":"string","format":"date-time","description":"När det hände (UTC, ISO 8601)."},"organizationId":{"type":"string","description":"Er organisations id, samma som organization.id i GET /me."},"data":{"$ref":"#/components/schemas/Note","description":"Objektet händelsen gäller, i samma form som API:t ger det."}}}}}},"responses":{"410":{"description":"Adressen finns inte längre: webhooken stängs av direkt (status disabled, skälet i pausedReason) och inget mer skickas dit, utan nya försök. Så avslutar till exempel Zapier en prenumeration. Starta den igen i appen eller med PATCH /webhooks/{id} om adressen fungerar igen."},"2XX":{"description":"Mottaget. Svara inom 10 sekunder; innehållet i svaret läses inte."},"default":{"description":"Räknas som misslyckat (också 3xx: omdirigeringar följs inte). Vi försöker igen efter 1, 5, 30, 120, 360, 720 minuter, sedan ges leveransen upp."}}}},"task.created":{"post":{"summary":"Uppgift skapad","description":"En uppgift lades upp. Skickas till webhooks som prenumererar på task.created (eller på alla händelser).","parameters":[{"name":"CRMdata-Event","in":"header","required":true,"description":"Händelsetypen, samma som type i innehållet.","schema":{"type":"string","const":"task.created"}},{"name":"CRMdata-Delivery","in":"header","required":true,"description":"Leveransens id. Ett nytt försök på samma händelse har samma id.","schema":{"type":"string","format":"uuid"}},{"name":"CRMdata-Signature","in":"header","required":true,"description":"Signaturen: t=<unix-sekunder>,v1=<hex hmac-sha256(hemlighet, t + \".\" + innehållet)>. Kontrollera den innan ni litar på innehållet; godta bara t som är högst 300 sekunder gammal.","schema":{"type":"string","pattern":"^t=\\d+,v1=[0-9a-f]{64}$"},"example":"t=1759750000,v1=5d41402abc4b2a76b9719d911017c592e3b0c44298fc1c149afbf4c8996fb924"},{"name":"User-Agent","in":"header","required":true,"description":"Alltid CRMdata-Webhooks/1.","schema":{"type":"string","const":"CRMdata-Webhooks/1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","type","occurredAt","organizationId","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Händelsens id. Samma händelse kan i sällsynta fall komma två gånger: hantera dubbletter på id."},"type":{"type":"string","const":"task.created","description":"Händelsetypen."},"occurredAt":{"type":"string","format":"date-time","description":"När det hände (UTC, ISO 8601)."},"organizationId":{"type":"string","description":"Er organisations id, samma som organization.id i GET /me."},"data":{"$ref":"#/components/schemas/Task","description":"Objektet händelsen gäller, i samma form som API:t ger det."}}}}}},"responses":{"410":{"description":"Adressen finns inte längre: webhooken stängs av direkt (status disabled, skälet i pausedReason) och inget mer skickas dit, utan nya försök. Så avslutar till exempel Zapier en prenumeration. Starta den igen i appen eller med PATCH /webhooks/{id} om adressen fungerar igen."},"2XX":{"description":"Mottaget. Svara inom 10 sekunder; innehållet i svaret läses inte."},"default":{"description":"Räknas som misslyckat (också 3xx: omdirigeringar följs inte). Vi försöker igen efter 1, 5, 30, 120, 360, 720 minuter, sedan ges leveransen upp."}}}},"task.completed":{"post":{"summary":"Uppgift klar","description":"En uppgift klarmarkerades. Skickas till webhooks som prenumererar på task.completed (eller på alla händelser).","parameters":[{"name":"CRMdata-Event","in":"header","required":true,"description":"Händelsetypen, samma som type i innehållet.","schema":{"type":"string","const":"task.completed"}},{"name":"CRMdata-Delivery","in":"header","required":true,"description":"Leveransens id. Ett nytt försök på samma händelse har samma id.","schema":{"type":"string","format":"uuid"}},{"name":"CRMdata-Signature","in":"header","required":true,"description":"Signaturen: t=<unix-sekunder>,v1=<hex hmac-sha256(hemlighet, t + \".\" + innehållet)>. Kontrollera den innan ni litar på innehållet; godta bara t som är högst 300 sekunder gammal.","schema":{"type":"string","pattern":"^t=\\d+,v1=[0-9a-f]{64}$"},"example":"t=1759750000,v1=5d41402abc4b2a76b9719d911017c592e3b0c44298fc1c149afbf4c8996fb924"},{"name":"User-Agent","in":"header","required":true,"description":"Alltid CRMdata-Webhooks/1.","schema":{"type":"string","const":"CRMdata-Webhooks/1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","type","occurredAt","organizationId","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Händelsens id. Samma händelse kan i sällsynta fall komma två gånger: hantera dubbletter på id."},"type":{"type":"string","const":"task.completed","description":"Händelsetypen."},"occurredAt":{"type":"string","format":"date-time","description":"När det hände (UTC, ISO 8601)."},"organizationId":{"type":"string","description":"Er organisations id, samma som organization.id i GET /me."},"data":{"$ref":"#/components/schemas/Task","description":"Objektet händelsen gäller, i samma form som API:t ger det."}}}}}},"responses":{"410":{"description":"Adressen finns inte längre: webhooken stängs av direkt (status disabled, skälet i pausedReason) och inget mer skickas dit, utan nya försök. Så avslutar till exempel Zapier en prenumeration. Starta den igen i appen eller med PATCH /webhooks/{id} om adressen fungerar igen."},"2XX":{"description":"Mottaget. Svara inom 10 sekunder; innehållet i svaret läses inte."},"default":{"description":"Räknas som misslyckat (också 3xx: omdirigeringar följs inte). Vi försöker igen efter 1, 5, 30, 120, 360, 720 minuter, sedan ges leveransen upp."}}}},"deal.created":{"post":{"summary":"Affär skapad","description":"En affär lades upp i pipelinen. Skickas till webhooks som prenumererar på deal.created (eller på alla händelser).","parameters":[{"name":"CRMdata-Event","in":"header","required":true,"description":"Händelsetypen, samma som type i innehållet.","schema":{"type":"string","const":"deal.created"}},{"name":"CRMdata-Delivery","in":"header","required":true,"description":"Leveransens id. Ett nytt försök på samma händelse har samma id.","schema":{"type":"string","format":"uuid"}},{"name":"CRMdata-Signature","in":"header","required":true,"description":"Signaturen: t=<unix-sekunder>,v1=<hex hmac-sha256(hemlighet, t + \".\" + innehållet)>. Kontrollera den innan ni litar på innehållet; godta bara t som är högst 300 sekunder gammal.","schema":{"type":"string","pattern":"^t=\\d+,v1=[0-9a-f]{64}$"},"example":"t=1759750000,v1=5d41402abc4b2a76b9719d911017c592e3b0c44298fc1c149afbf4c8996fb924"},{"name":"User-Agent","in":"header","required":true,"description":"Alltid CRMdata-Webhooks/1.","schema":{"type":"string","const":"CRMdata-Webhooks/1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","type","occurredAt","organizationId","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Händelsens id. Samma händelse kan i sällsynta fall komma två gånger: hantera dubbletter på id."},"type":{"type":"string","const":"deal.created","description":"Händelsetypen."},"occurredAt":{"type":"string","format":"date-time","description":"När det hände (UTC, ISO 8601)."},"organizationId":{"type":"string","description":"Er organisations id, samma som organization.id i GET /me."},"data":{"$ref":"#/components/schemas/Deal","description":"Objektet händelsen gäller, i samma form som API:t ger det."}}}}}},"responses":{"410":{"description":"Adressen finns inte längre: webhooken stängs av direkt (status disabled, skälet i pausedReason) och inget mer skickas dit, utan nya försök. Så avslutar till exempel Zapier en prenumeration. Starta den igen i appen eller med PATCH /webhooks/{id} om adressen fungerar igen."},"2XX":{"description":"Mottaget. Svara inom 10 sekunder; innehållet i svaret läses inte."},"default":{"description":"Räknas som misslyckat (också 3xx: omdirigeringar följs inte). Vi försöker igen efter 1, 5, 30, 120, 360, 720 minuter, sedan ges leveransen upp."}}}},"deal.updated":{"post":{"summary":"Affär ändrad","description":"En affär flyttades till ett annat steg eller ändrades (rubrik, värde, datum, ansvarig). Skickas till webhooks som prenumererar på deal.updated (eller på alla händelser).","parameters":[{"name":"CRMdata-Event","in":"header","required":true,"description":"Händelsetypen, samma som type i innehållet.","schema":{"type":"string","const":"deal.updated"}},{"name":"CRMdata-Delivery","in":"header","required":true,"description":"Leveransens id. Ett nytt försök på samma händelse har samma id.","schema":{"type":"string","format":"uuid"}},{"name":"CRMdata-Signature","in":"header","required":true,"description":"Signaturen: t=<unix-sekunder>,v1=<hex hmac-sha256(hemlighet, t + \".\" + innehållet)>. Kontrollera den innan ni litar på innehållet; godta bara t som är högst 300 sekunder gammal.","schema":{"type":"string","pattern":"^t=\\d+,v1=[0-9a-f]{64}$"},"example":"t=1759750000,v1=5d41402abc4b2a76b9719d911017c592e3b0c44298fc1c149afbf4c8996fb924"},{"name":"User-Agent","in":"header","required":true,"description":"Alltid CRMdata-Webhooks/1.","schema":{"type":"string","const":"CRMdata-Webhooks/1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","type","occurredAt","organizationId","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Händelsens id. Samma händelse kan i sällsynta fall komma två gånger: hantera dubbletter på id."},"type":{"type":"string","const":"deal.updated","description":"Händelsetypen."},"occurredAt":{"type":"string","format":"date-time","description":"När det hände (UTC, ISO 8601)."},"organizationId":{"type":"string","description":"Er organisations id, samma som organization.id i GET /me."},"data":{"$ref":"#/components/schemas/Deal","description":"Objektet händelsen gäller, i samma form som API:t ger det."}}}}}},"responses":{"410":{"description":"Adressen finns inte längre: webhooken stängs av direkt (status disabled, skälet i pausedReason) och inget mer skickas dit, utan nya försök. Så avslutar till exempel Zapier en prenumeration. Starta den igen i appen eller med PATCH /webhooks/{id} om adressen fungerar igen."},"2XX":{"description":"Mottaget. Svara inom 10 sekunder; innehållet i svaret läses inte."},"default":{"description":"Räknas som misslyckat (också 3xx: omdirigeringar följs inte). Vi försöker igen efter 1, 5, 30, 120, 360, 720 minuter, sedan ges leveransen upp."}}}},"deal.won":{"post":{"summary":"Affär vunnen","description":"En affär flyttades till, eller skapades i, ett vunnet-steg. Skickas till webhooks som prenumererar på deal.won (eller på alla händelser).","parameters":[{"name":"CRMdata-Event","in":"header","required":true,"description":"Händelsetypen, samma som type i innehållet.","schema":{"type":"string","const":"deal.won"}},{"name":"CRMdata-Delivery","in":"header","required":true,"description":"Leveransens id. Ett nytt försök på samma händelse har samma id.","schema":{"type":"string","format":"uuid"}},{"name":"CRMdata-Signature","in":"header","required":true,"description":"Signaturen: t=<unix-sekunder>,v1=<hex hmac-sha256(hemlighet, t + \".\" + innehållet)>. Kontrollera den innan ni litar på innehållet; godta bara t som är högst 300 sekunder gammal.","schema":{"type":"string","pattern":"^t=\\d+,v1=[0-9a-f]{64}$"},"example":"t=1759750000,v1=5d41402abc4b2a76b9719d911017c592e3b0c44298fc1c149afbf4c8996fb924"},{"name":"User-Agent","in":"header","required":true,"description":"Alltid CRMdata-Webhooks/1.","schema":{"type":"string","const":"CRMdata-Webhooks/1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","type","occurredAt","organizationId","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Händelsens id. Samma händelse kan i sällsynta fall komma två gånger: hantera dubbletter på id."},"type":{"type":"string","const":"deal.won","description":"Händelsetypen."},"occurredAt":{"type":"string","format":"date-time","description":"När det hände (UTC, ISO 8601)."},"organizationId":{"type":"string","description":"Er organisations id, samma som organization.id i GET /me."},"data":{"$ref":"#/components/schemas/Deal","description":"Objektet händelsen gäller, i samma form som API:t ger det."}}}}}},"responses":{"410":{"description":"Adressen finns inte längre: webhooken stängs av direkt (status disabled, skälet i pausedReason) och inget mer skickas dit, utan nya försök. Så avslutar till exempel Zapier en prenumeration. Starta den igen i appen eller med PATCH /webhooks/{id} om adressen fungerar igen."},"2XX":{"description":"Mottaget. Svara inom 10 sekunder; innehållet i svaret läses inte."},"default":{"description":"Räknas som misslyckat (också 3xx: omdirigeringar följs inte). Vi försöker igen efter 1, 5, 30, 120, 360, 720 minuter, sedan ges leveransen upp."}}}},"deal.lost":{"post":{"summary":"Affär förlorad","description":"En affär flyttades till, eller skapades i, ett förlorat-steg. Skickas till webhooks som prenumererar på deal.lost (eller på alla händelser).","parameters":[{"name":"CRMdata-Event","in":"header","required":true,"description":"Händelsetypen, samma som type i innehållet.","schema":{"type":"string","const":"deal.lost"}},{"name":"CRMdata-Delivery","in":"header","required":true,"description":"Leveransens id. Ett nytt försök på samma händelse har samma id.","schema":{"type":"string","format":"uuid"}},{"name":"CRMdata-Signature","in":"header","required":true,"description":"Signaturen: t=<unix-sekunder>,v1=<hex hmac-sha256(hemlighet, t + \".\" + innehållet)>. Kontrollera den innan ni litar på innehållet; godta bara t som är högst 300 sekunder gammal.","schema":{"type":"string","pattern":"^t=\\d+,v1=[0-9a-f]{64}$"},"example":"t=1759750000,v1=5d41402abc4b2a76b9719d911017c592e3b0c44298fc1c149afbf4c8996fb924"},{"name":"User-Agent","in":"header","required":true,"description":"Alltid CRMdata-Webhooks/1.","schema":{"type":"string","const":"CRMdata-Webhooks/1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","type","occurredAt","organizationId","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Händelsens id. Samma händelse kan i sällsynta fall komma två gånger: hantera dubbletter på id."},"type":{"type":"string","const":"deal.lost","description":"Händelsetypen."},"occurredAt":{"type":"string","format":"date-time","description":"När det hände (UTC, ISO 8601)."},"organizationId":{"type":"string","description":"Er organisations id, samma som organization.id i GET /me."},"data":{"$ref":"#/components/schemas/Deal","description":"Objektet händelsen gäller, i samma form som API:t ger det."}}}}}},"responses":{"410":{"description":"Adressen finns inte längre: webhooken stängs av direkt (status disabled, skälet i pausedReason) och inget mer skickas dit, utan nya försök. Så avslutar till exempel Zapier en prenumeration. Starta den igen i appen eller med PATCH /webhooks/{id} om adressen fungerar igen."},"2XX":{"description":"Mottaget. Svara inom 10 sekunder; innehållet i svaret läses inte."},"default":{"description":"Räknas som misslyckat (också 3xx: omdirigeringar följs inte). Vi försöker igen efter 1, 5, 30, 120, 360, 720 minuter, sedan ges leveransen upp."}}}},"order.created":{"post":{"summary":"Order skapad","description":"En order lades upp. Skickas till webhooks som prenumererar på order.created (eller på alla händelser).","parameters":[{"name":"CRMdata-Event","in":"header","required":true,"description":"Händelsetypen, samma som type i innehållet.","schema":{"type":"string","const":"order.created"}},{"name":"CRMdata-Delivery","in":"header","required":true,"description":"Leveransens id. Ett nytt försök på samma händelse har samma id.","schema":{"type":"string","format":"uuid"}},{"name":"CRMdata-Signature","in":"header","required":true,"description":"Signaturen: t=<unix-sekunder>,v1=<hex hmac-sha256(hemlighet, t + \".\" + innehållet)>. Kontrollera den innan ni litar på innehållet; godta bara t som är högst 300 sekunder gammal.","schema":{"type":"string","pattern":"^t=\\d+,v1=[0-9a-f]{64}$"},"example":"t=1759750000,v1=5d41402abc4b2a76b9719d911017c592e3b0c44298fc1c149afbf4c8996fb924"},{"name":"User-Agent","in":"header","required":true,"description":"Alltid CRMdata-Webhooks/1.","schema":{"type":"string","const":"CRMdata-Webhooks/1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","type","occurredAt","organizationId","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Händelsens id. Samma händelse kan i sällsynta fall komma två gånger: hantera dubbletter på id."},"type":{"type":"string","const":"order.created","description":"Händelsetypen."},"occurredAt":{"type":"string","format":"date-time","description":"När det hände (UTC, ISO 8601)."},"organizationId":{"type":"string","description":"Er organisations id, samma som organization.id i GET /me."},"data":{"$ref":"#/components/schemas/Order","description":"Objektet händelsen gäller, i samma form som API:t ger det."}}}}}},"responses":{"410":{"description":"Adressen finns inte längre: webhooken stängs av direkt (status disabled, skälet i pausedReason) och inget mer skickas dit, utan nya försök. Så avslutar till exempel Zapier en prenumeration. Starta den igen i appen eller med PATCH /webhooks/{id} om adressen fungerar igen."},"2XX":{"description":"Mottaget. Svara inom 10 sekunder; innehållet i svaret läses inte."},"default":{"description":"Räknas som misslyckat (också 3xx: omdirigeringar följs inte). Vi försöker igen efter 1, 5, 30, 120, 360, 720 minuter, sedan ges leveransen upp."}}}},"order.updated":{"post":{"summary":"Order ändrad","description":"Ordern eller dess rader ändrades. Skickas till webhooks som prenumererar på order.updated (eller på alla händelser).","parameters":[{"name":"CRMdata-Event","in":"header","required":true,"description":"Händelsetypen, samma som type i innehållet.","schema":{"type":"string","const":"order.updated"}},{"name":"CRMdata-Delivery","in":"header","required":true,"description":"Leveransens id. Ett nytt försök på samma händelse har samma id.","schema":{"type":"string","format":"uuid"}},{"name":"CRMdata-Signature","in":"header","required":true,"description":"Signaturen: t=<unix-sekunder>,v1=<hex hmac-sha256(hemlighet, t + \".\" + innehållet)>. Kontrollera den innan ni litar på innehållet; godta bara t som är högst 300 sekunder gammal.","schema":{"type":"string","pattern":"^t=\\d+,v1=[0-9a-f]{64}$"},"example":"t=1759750000,v1=5d41402abc4b2a76b9719d911017c592e3b0c44298fc1c149afbf4c8996fb924"},{"name":"User-Agent","in":"header","required":true,"description":"Alltid CRMdata-Webhooks/1.","schema":{"type":"string","const":"CRMdata-Webhooks/1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","type","occurredAt","organizationId","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Händelsens id. Samma händelse kan i sällsynta fall komma två gånger: hantera dubbletter på id."},"type":{"type":"string","const":"order.updated","description":"Händelsetypen."},"occurredAt":{"type":"string","format":"date-time","description":"När det hände (UTC, ISO 8601)."},"organizationId":{"type":"string","description":"Er organisations id, samma som organization.id i GET /me."},"data":{"$ref":"#/components/schemas/Order","description":"Objektet händelsen gäller, i samma form som API:t ger det."}}}}}},"responses":{"410":{"description":"Adressen finns inte längre: webhooken stängs av direkt (status disabled, skälet i pausedReason) och inget mer skickas dit, utan nya försök. Så avslutar till exempel Zapier en prenumeration. Starta den igen i appen eller med PATCH /webhooks/{id} om adressen fungerar igen."},"2XX":{"description":"Mottaget. Svara inom 10 sekunder; innehållet i svaret läses inte."},"default":{"description":"Räknas som misslyckat (också 3xx: omdirigeringar följs inte). Vi försöker igen efter 1, 5, 30, 120, 360, 720 minuter, sedan ges leveransen upp."}}}},"order.invoiced":{"post":{"summary":"Order fakturerad","description":"Ordern gjordes om till faktura i appen. Skickas till webhooks som prenumererar på order.invoiced (eller på alla händelser).","parameters":[{"name":"CRMdata-Event","in":"header","required":true,"description":"Händelsetypen, samma som type i innehållet.","schema":{"type":"string","const":"order.invoiced"}},{"name":"CRMdata-Delivery","in":"header","required":true,"description":"Leveransens id. Ett nytt försök på samma händelse har samma id.","schema":{"type":"string","format":"uuid"}},{"name":"CRMdata-Signature","in":"header","required":true,"description":"Signaturen: t=<unix-sekunder>,v1=<hex hmac-sha256(hemlighet, t + \".\" + innehållet)>. Kontrollera den innan ni litar på innehållet; godta bara t som är högst 300 sekunder gammal.","schema":{"type":"string","pattern":"^t=\\d+,v1=[0-9a-f]{64}$"},"example":"t=1759750000,v1=5d41402abc4b2a76b9719d911017c592e3b0c44298fc1c149afbf4c8996fb924"},{"name":"User-Agent","in":"header","required":true,"description":"Alltid CRMdata-Webhooks/1.","schema":{"type":"string","const":"CRMdata-Webhooks/1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","type","occurredAt","organizationId","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Händelsens id. Samma händelse kan i sällsynta fall komma två gånger: hantera dubbletter på id."},"type":{"type":"string","const":"order.invoiced","description":"Händelsetypen."},"occurredAt":{"type":"string","format":"date-time","description":"När det hände (UTC, ISO 8601)."},"organizationId":{"type":"string","description":"Er organisations id, samma som organization.id i GET /me."},"data":{"$ref":"#/components/schemas/Order","description":"Objektet händelsen gäller, i samma form som API:t ger det."}}}}}},"responses":{"410":{"description":"Adressen finns inte längre: webhooken stängs av direkt (status disabled, skälet i pausedReason) och inget mer skickas dit, utan nya försök. Så avslutar till exempel Zapier en prenumeration. Starta den igen i appen eller med PATCH /webhooks/{id} om adressen fungerar igen."},"2XX":{"description":"Mottaget. Svara inom 10 sekunder; innehållet i svaret läses inte."},"default":{"description":"Räknas som misslyckat (också 3xx: omdirigeringar följs inte). Vi försöker igen efter 1, 5, 30, 120, 360, 720 minuter, sedan ges leveransen upp."}}}},"order.cancelled":{"post":{"summary":"Order makulerad","description":"Ordern makulerades. Skickas till webhooks som prenumererar på order.cancelled (eller på alla händelser).","parameters":[{"name":"CRMdata-Event","in":"header","required":true,"description":"Händelsetypen, samma som type i innehållet.","schema":{"type":"string","const":"order.cancelled"}},{"name":"CRMdata-Delivery","in":"header","required":true,"description":"Leveransens id. Ett nytt försök på samma händelse har samma id.","schema":{"type":"string","format":"uuid"}},{"name":"CRMdata-Signature","in":"header","required":true,"description":"Signaturen: t=<unix-sekunder>,v1=<hex hmac-sha256(hemlighet, t + \".\" + innehållet)>. Kontrollera den innan ni litar på innehållet; godta bara t som är högst 300 sekunder gammal.","schema":{"type":"string","pattern":"^t=\\d+,v1=[0-9a-f]{64}$"},"example":"t=1759750000,v1=5d41402abc4b2a76b9719d911017c592e3b0c44298fc1c149afbf4c8996fb924"},{"name":"User-Agent","in":"header","required":true,"description":"Alltid CRMdata-Webhooks/1.","schema":{"type":"string","const":"CRMdata-Webhooks/1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","type","occurredAt","organizationId","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Händelsens id. Samma händelse kan i sällsynta fall komma två gånger: hantera dubbletter på id."},"type":{"type":"string","const":"order.cancelled","description":"Händelsetypen."},"occurredAt":{"type":"string","format":"date-time","description":"När det hände (UTC, ISO 8601)."},"organizationId":{"type":"string","description":"Er organisations id, samma som organization.id i GET /me."},"data":{"$ref":"#/components/schemas/Order","description":"Objektet händelsen gäller, i samma form som API:t ger det."}}}}}},"responses":{"410":{"description":"Adressen finns inte längre: webhooken stängs av direkt (status disabled, skälet i pausedReason) och inget mer skickas dit, utan nya försök. Så avslutar till exempel Zapier en prenumeration. Starta den igen i appen eller med PATCH /webhooks/{id} om adressen fungerar igen."},"2XX":{"description":"Mottaget. Svara inom 10 sekunder; innehållet i svaret läses inte."},"default":{"description":"Räknas som misslyckat (också 3xx: omdirigeringar följs inte). Vi försöker igen efter 1, 5, 30, 120, 360, 720 minuter, sedan ges leveransen upp."}}}},"ping":{"post":{"summary":"Testhändelse","description":"Skickas när någon trycker Skicka testhändelse i appen eller anropar POST /webhooks/{id}/ping. Signerad som alla andra meddelanden. Går inte att prenumerera på och räknas inte mot gränsen för att pausa webhooken.","parameters":[{"name":"CRMdata-Event","in":"header","required":true,"description":"Händelsetypen, samma som type i innehållet.","schema":{"type":"string","const":"ping"}},{"name":"CRMdata-Delivery","in":"header","required":true,"description":"Leveransens id. Ett nytt försök på samma händelse har samma id.","schema":{"type":"string","format":"uuid"}},{"name":"CRMdata-Signature","in":"header","required":true,"description":"Signaturen: t=<unix-sekunder>,v1=<hex hmac-sha256(hemlighet, t + \".\" + innehållet)>. Kontrollera den innan ni litar på innehållet; godta bara t som är högst 300 sekunder gammal.","schema":{"type":"string","pattern":"^t=\\d+,v1=[0-9a-f]{64}$"},"example":"t=1759750000,v1=5d41402abc4b2a76b9719d911017c592e3b0c44298fc1c149afbf4c8996fb924"},{"name":"User-Agent","in":"header","required":true,"description":"Alltid CRMdata-Webhooks/1.","schema":{"type":"string","const":"CRMdata-Webhooks/1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","type","occurredAt","organizationId","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Händelsens id. Samma händelse kan i sällsynta fall komma två gånger: hantera dubbletter på id."},"type":{"type":"string","const":"ping","description":"Händelsetypen."},"occurredAt":{"type":"string","format":"date-time","description":"När det hände (UTC, ISO 8601)."},"organizationId":{"type":"string","description":"Er organisations id, samma som organization.id i GET /me."},"data":{"type":"object","description":"Ett påhittat objekt.","required":["message","webhookId","webhookName"],"properties":{"message":{"type":"string","description":"En hälsning."},"webhookId":{"type":"string","format":"uuid","description":"Webhookens id."},"webhookName":{"type":"string","description":"Webhookens namn."}}}}},"example":{"id":"5a4b3c2d-1e0f-4a9b-8c7d-6e5f4a3b2c1d","type":"ping","occurredAt":"2026-10-06T09:15:00.000Z","organizationId":"7d2f9c4a1b8e4f06a3c5d9e2b1f04a77","data":{"message":"Det här är en testhändelse från CRMdata. Allt fungerar om ni kan läsa det här och signaturen stämmer.","webhookId":"4e1f6a2b-9c3d-4e5f-8a7b-6c5d4e3f2a1b","webhookName":"Affärssystemet"}}}}},"responses":{"410":{"description":"Adressen finns inte längre: webhooken stängs av direkt (status disabled, skälet i pausedReason) och inget mer skickas dit, utan nya försök. Så avslutar till exempel Zapier en prenumeration. Starta den igen i appen eller med PATCH /webhooks/{id} om adressen fungerar igen."},"2XX":{"description":"Mottaget. Svara inom 10 sekunder; innehållet i svaret läses inte."},"default":{"description":"Räknas som misslyckat (också 3xx: omdirigeringar följs inte). Vi försöker igen efter 1, 5, 30, 120, 360, 720 minuter, sedan ges leveransen upp."}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"API-nyckeln, som börjar på crmd_. Skickas som Authorization: Bearer <nyckel>. Skapas av en administratör under Integrationer i appen."}},"parameters":{"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":false,"description":"Gör anropet säkert att skicka igen: samma nyckel och samma innehåll inom 24 timmar ger samma svar utan att något skapas två gånger. Till exempel ett uuid.","schema":{"type":"string","minLength":1,"maxLength":200}}},"headers":{"RequestId":{"description":"Anropets id. Ange det om ni hör av er till oss.","schema":{"type":"string"},"example":"req_8f3a1c2e9b7d4a6f"},"RateLimitLimit":{"description":"Så många anrop får nyckeln göra per minut.","schema":{"type":"integer"},"example":300},"RateLimitRemaining":{"description":"Så många anrop återstår den här minuten.","schema":{"type":"integer"},"example":299},"RateLimitReset":{"description":"Sekunder tills räkningen börjar om.","schema":{"type":"integer"},"example":42},"RetryAfter":{"description":"Sekunder att vänta innan nästa försök.","schema":{"type":"integer"},"example":30},"Location":{"description":"Adressen till det som skapades.","schema":{"type":"string"},"example":"/api/v1/companies/2f0c7a8e-3b1d-4c5e-9f6a-7b8c9d0e1f2a"},"IdempotentReplayed":{"description":"true när svaret är en upprepning av ett tidigare anrop med samma Idempotency-Key.","schema":{"type":"string","enum":["true"]}}},"responses":{"BadRequest":{"description":"Anropet går inte att läsa eller stämmer inte. `invalid_json`: innehållet är inte JSON. `validation_failed`: ett eller flera fält stämmer inte, se `details`. `unknown_field`: ett fält som inte finns.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"validation_failed","message":"Innehållet stämmer inte. Se details för vad som behöver rättas.","details":[{"field":"email","message":"Ska vara en e-postadress."}],"requestId":"req_8f3a1c2e9b7d4a6f"}}}}},"Unauthorized":{"description":"Ingen eller fel nyckel. `missing_key`: huvudet Authorization saknas. `invalid_key`: nyckeln finns inte. `revoked_key`: nyckeln är indragen.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"invalid_key","message":"API-nyckeln gäller inte. Kontrollera att hela nyckeln kom med.","details":[],"requestId":"req_8f3a1c2e9b7d4a6f"}}}}},"Forbidden":{"description":"Nyckeln får inte göra det här. `read_only_key`: nyckeln får bara läsa. `plan_required`: API:t ingår inte i abonnemanget. `forbidden`: inte tillåtet av en annan regel.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"read_only_key","message":"Den här nyckeln får bara läsa. Skapa en nyckel som får skriva under Integrationer.","details":[],"requestId":"req_8f3a1c2e9b7d4a6f"}}}}},"NotFound":{"description":"Finns inte, eller hör till en annan organisation (samma svar).","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"not_found","message":"Det du letar efter finns inte.","details":[],"requestId":"req_8f3a1c2e9b7d4a6f"}}}}},"Conflict":{"description":"Krockar med något som redan finns eller med läget. `conflict`: till exempel ett företag som redan är sparat (då med `existingId`). `idempotency_key_reused`: samma Idempotency-Key med annat innehåll. `request_in_progress`: det första anropet med samma Idempotency-Key pågår.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"conflict","message":"Det finns redan.","details":[],"requestId":"req_8f3a1c2e9b7d4a6f"}}}}},"TooLarge":{"description":"Innehållet är större än 1 MB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"too_large","message":"Innehållet är för stort. Ett anrop får vara högst 1 MB.","details":[],"requestId":"req_8f3a1c2e9b7d4a6f"}}}}},"Unprocessable":{"description":"Formatet stämmer, men värdet går inte att använda (en regel i CRM:et säger nej).","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"invalid","message":"Värdet går inte att använda.","details":[],"requestId":"req_8f3a1c2e9b7d4a6f"}}}}},"RateLimited":{"description":"För många anrop: högst 300 per minut och nyckel. Retry-After säger hur många sekunder ni ska vänta.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"rate_limited","message":"För många anrop just nu. Vänta en stund och försök igen.","details":[],"requestId":"req_8f3a1c2e9b7d4a6f"}}}}},"InternalError":{"description":"Ett fel hos oss. Svaret har aldrig några detaljer, bara requestId.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"internal_error","message":"Något gick fel hos oss. Försök igen om en stund. Fortsätter det, hör av dig och ange requestId.","details":[],"requestId":"req_8f3a1c2e9b7d4a6f"}}}}},"Busy":{"description":"API:t är upptaget: ingen ledig anslutning till databasen i tid, eller en fråga som tog för lång tid. Inte ett fel i anropet. Retry-After säger hur många sekunder ni ska vänta.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"busy","message":"API:t är upptaget just nu. Vänta en stund och försök igen.","details":[],"requestId":"req_8f3a1c2e9b7d4a6f"}}}}}},"schemas":{"Activity":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Id (uuid)."},"companyId":{"type":"string","format":"uuid","description":"Företaget som händelsen hör till."},"contactId":{"anyOf":[{"type":"string","format":"uuid","description":"Id (uuid)."},{"type":"null"}],"description":"Kontakten som händelsen gäller. null om ingen är utpekad."},"dealId":{"anyOf":[{"type":"string","format":"uuid","description":"Id (uuid)."},{"type":"null"}],"description":"Affären som händelsen gäller. null om den inte gäller en affär."},"type":{"type":"string","enum":["call","email_in","email_out","meeting","note","task_completed","deal_created","deal_stage_changed","deal_won","deal_lost","order_event","company_saved","contact_added","file_uploaded","master_update","call_list_status"],"description":"Vad som hände. call = samtal, email_in = mejl in, email_out = mejl ut, meeting = möte, note = anteckning, task_completed = avslutad uppgift, deal_created = ny affär, deal_stage_changed = affär flyttad till ett annat steg, deal_won = vunnen affär, deal_lost = förlorad affär, order_event = något hände med en order, company_saved = företaget sparades, contact_added = ny kontakt, file_uploaded = uppladdad fil, master_update = nya uppgifter från företagsdatan, call_list_status = ny status i en ringlista. Samtal, möten och mejl räknas som kontakt med företaget."},"occurredAt":{"type":"string","format":"date-time","description":"När det hände."},"summary":{"type":"string","description":"Händelsen som text, så som den står i tidslinjen i appen."},"actorUserId":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"description":"Användarens id. Hämtas med GET /users."},{"type":"null"}],"description":"Användaren som gjorde det. null när det gjordes via API:t eller av systemet."},"refType":{"anyOf":[{"type":"string","enum":["note","task","deal","order","contact","call_list_item"]},{"type":"null"}],"description":"Vad refId pekar på: note = anteckning, task = uppgift, deal = affär, order = order, contact = kontakt, call_list_item = rad i en ringlista. null när händelsen inte pekar på något."},"refId":{"anyOf":[{"type":"string","format":"uuid","description":"Id (uuid)."},{"type":"null"}],"description":"Id för det händelsen pekar på, till exempel anteckningen för en händelse av typen note. null när refType är null."},"createdAt":{"type":"string","format":"date-time","description":"När händelsen sparades i CRM:et. Skiljer sig från occurredAt för sådant som förts in i efterhand."}},"required":["id","companyId","contactId","dealId","type","occurredAt","summary","actorUserId","refType","refId","createdAt"],"description":"En händelse i tidslinjen på ett sparat företag."},"CallList":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Id (uuid)."},"name":{"type":"string","description":"Ringlistans namn."},"ownerUserId":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"description":"Användarens id. Hämtas med GET /users."},{"type":"null"}],"description":"Listans ägare: säljaren som ringer. null för en lista utan ägare; den syns i appen bara för dem som får skapa ringlistor åt andra."},"archivedAt":{"anyOf":[{"type":"string","format":"date-time","description":"Tidpunkt i UTC (ISO 8601)."},{"type":"null"}],"description":"När listan arkiverades. null för en aktiv lista."},"itemCounts":{"type":"object","properties":{"total":{"type":"integer","description":"Alla rader i listan."},"notCalled":{"type":"integer","description":"Rader med status not_called: kvar att ringa."},"answered":{"type":"integer","description":"Rader med status answered."},"noAnswer":{"type":"integer","description":"Rader med status no_answer."},"notInterested":{"type":"integer","description":"Rader med status not_interested."}},"required":["total","notCalled","answered","noAnswer","notInterested"],"description":"Antal rader i listan, totalt och per status."},"createdBy":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"description":"Användarens id. Hämtas med GET /users."},{"type":"null"}],"description":"Användaren som skapade listan. null när den skapades via API:t."},"createdAt":{"type":"string","format":"date-time","description":"När listan skapades."},"updatedAt":{"type":"string","format":"date-time","description":"När listan senast ändrades (skapades eller arkiverades). Ändras inte när rader läggs till eller får ny status."}},"required":["id","name","ownerUserId","archivedAt","itemCounts","createdBy","createdAt","updatedAt"],"description":"En ringlista, med antal rader per status."},"CallListItem":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Id (uuid)."},"callListId":{"type":"string","format":"uuid","description":"Ringlistan som raden hör till."},"companyId":{"type":"string","format":"uuid","description":"Företaget som ska ringas."},"status":{"type":"string","enum":["not_called","answered","no_answer","not_interested"],"description":"Hur det har gått: not_called (Ej ringt), answered (Svar), no_answer (Ej svar) eller not_interested (Ej intresserad)."},"attempts":{"type":"integer","description":"Antal samtalsförsök som har registrerats på raden."},"lastCalledAt":{"anyOf":[{"type":"string","format":"date-time","description":"Tidpunkt i UTC (ISO 8601)."},{"type":"null"}],"description":"När det senaste försöket registrerades. null om företaget inte är ringt."},"note":{"description":"Den senaste anteckningen som skrevs när en status sattes. null om ingen har skrivits.","type":["string","null"]},"createdAt":{"type":"string","format":"date-time","description":"När företaget lades i listan."},"updatedAt":{"type":"string","format":"date-time","description":"När raden senast ändrades."}},"required":["id","callListId","companyId","status","attempts","lastCalledAt","note","createdAt","updatedAt"],"description":"En rad i en ringlista: ett företag och hur det har gått att ringa det."},"CallListWithItems":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Id (uuid)."},"name":{"type":"string","description":"Ringlistans namn."},"ownerUserId":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"description":"Användarens id. Hämtas med GET /users."},{"type":"null"}],"description":"Listans ägare: säljaren som ringer. null för en lista utan ägare; den syns i appen bara för dem som får skapa ringlistor åt andra."},"archivedAt":{"anyOf":[{"type":"string","format":"date-time","description":"Tidpunkt i UTC (ISO 8601)."},{"type":"null"}],"description":"När listan arkiverades. null för en aktiv lista."},"itemCounts":{"type":"object","properties":{"total":{"type":"integer","description":"Alla rader i listan."},"notCalled":{"type":"integer","description":"Rader med status not_called: kvar att ringa."},"answered":{"type":"integer","description":"Rader med status answered."},"noAnswer":{"type":"integer","description":"Rader med status no_answer."},"notInterested":{"type":"integer","description":"Rader med status not_interested."}},"required":["total","notCalled","answered","noAnswer","notInterested"],"description":"Antal rader i listan, totalt och per status."},"createdBy":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"description":"Användarens id. Hämtas med GET /users."},{"type":"null"}],"description":"Användaren som skapade listan. null när den skapades via API:t."},"createdAt":{"type":"string","format":"date-time","description":"När listan skapades."},"updatedAt":{"type":"string","format":"date-time","description":"När listan senast ändrades (skapades eller arkiverades). Ändras inte när rader läggs till eller får ny status."},"items":{"type":"array","items":{"$ref":"#/components/schemas/CallListItem"},"description":"Raderna på den här sidan. Med sort=createdAt och order=asc (standard) i listans ordning: den ordning de lades till, också inom ett anrop."},"nextCursor":{"description":"Skicka som cursor för att hämta nästa sida med rader. null när alla rader är med.","type":["string","null"]}},"required":["id","name","ownerUserId","archivedAt","itemCounts","createdBy","createdAt","updatedAt","items","nextCursor"],"description":"En ringlista med antal rader per status och en sida av sina rader."},"Company":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Företagets id i CRM:et (uuid)."},"customerNumber":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Kundnummer: ett löpnummer i organisationen som sätts när företaget sparas. Går bara att läsa."},"name":{"type":"string","description":"Företagets officiella namn. Kommer från företagsdatan när företaget är kopplat dit. Går bara att läsa; ert eget namn sätts i alias."},"alias":{"description":"Ert eget namn på företaget. Visas under namnet i appen och går att söka på.","type":["string","null"]},"orgNr":{"description":"Organisationsnummer, NNNNNN-NNNN. För en enskild firma är numret ägarens personnummer och visas därför bara maskerat, ÅÅMMDD-xxxx. Går bara att läsa.","type":["string","null"]},"isSoleProprietor":{"type":"boolean","description":"true om företaget är en enskild firma."},"legalFormCode":{"description":"Bolagsform som kod, till exempel AB, HB, KB eller EF. Från företagsdatan: går bara att läsa.","type":["string","null"]},"legalForm":{"description":"Bolagsform i klartext, till exempel Aktiebolag. Från företagsdatan: går bara att läsa.","type":["string","null"]},"linkedToCompanyData":{"type":"boolean","description":"true när företaget är kopplat till företagsdatan (Sveriges företag). Då kommer namn, bolagsform, bransch, nyckeltal, köpkraft, län och kommun därifrån. false för ett företag som lagts till för hand."},"companyDataDate":{"anyOf":[{"type":"string","format":"date","description":"Datum, ÅÅÅÅ-MM-DD, årtal 1900–9999."},{"type":"null"}],"description":"Dagen som uppgifterna från företagsdatan gäller för. null för företag utan koppling dit."},"sniCode":{"description":"Bransch enligt SNI, koden. Från företagsdatan: går bara att läsa.","type":["string","null"]},"sniLabel":{"description":"Bransch enligt SNI, i klartext. Från företagsdatan: går bara att läsa.","type":["string","null"]},"industryCode":{"description":"CRMdatas egen bransch, koden. Från företagsdatan: går bara att läsa.","type":["string","null"]},"industryLabel":{"description":"CRMdatas egen bransch, i klartext. Från företagsdatan: går bara att läsa.","type":["string","null"]},"purchasingPower":{"description":"Köpkraft: ett betyg i fem steg, P-, P, P+, PP eller PPP, där PPP är högst. Från företagsdatan: går bara att läsa.","type":["string","null"]},"purchasingPowerLevel":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Köpkraften som tal, 1 (P-) till 5 (PPP), för den som vill sortera eller jämföra."},"keyFigures":{"type":"object","properties":{"fiscalYear":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Året för det senaste bokslutet."},"revenueKsek":{"description":"Omsättning i tusental kronor, senaste bokslutet.","type":["number","null"]},"netProfitKsek":{"description":"Resultat i tusental kronor, senaste bokslutet.","type":["number","null"]},"employees":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Antal anställda, senaste bokslutet."},"previousRevenueKsek":{"description":"Omsättning i tusental kronor, bokslutet före.","type":["number","null"]},"previousNetProfitKsek":{"description":"Resultat i tusental kronor, bokslutet före.","type":["number","null"]},"previousEmployees":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Antal anställda, bokslutet före."}},"required":["fiscalYear","revenueKsek","netProfitKsek","employees","previousRevenueKsek","previousNetProfitKsek","previousEmployees"],"description":"Nyckeltal ur de två senaste boksluten. Alla värden är null för företag utan bokslut i företagsdatan. Från företagsdatan: går bara att läsa."},"status":{"type":"string","description":"Företagets status, räknad ur affärerna och ordrarna på samma sätt som i appen: Kund (minst en vunnen affär eller en order som inte är makulerad eller krediterad), annars namnet på steget för den senast ändrade öppna affären, annars Förlorad (bara förlorade affärer), annars Obearbetad. Går bara att läsa: ändra den genom att skapa eller flytta en affär."},"ownerUserId":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"description":"Användarens id. Hämtas med GET /users."},{"type":"null"}],"description":"Ansvarig användare. null om ingen är ansvarig. Användarna hämtas med GET /users."},"phone":{"description":"Telefonnummer (växel).","type":["string","null"]},"email":{"description":"E-postadress till företaget.","type":["string","null"]},"website":{"description":"Webbplats.","type":["string","null"]},"visitStreet":{"description":"Besöksadress: gata.","type":["string","null"]},"visitPostalCode":{"description":"Besöksadress: postnummer.","type":["string","null"]},"visitCity":{"description":"Besöksadress: ort.","type":["string","null"]},"countyCode":{"description":"Län som SCB-kod, två siffror (03 = Uppsala län). På kopplade företag från företagsdatan.","type":["string","null"]},"countyName":{"description":"Länets namn.","type":["string","null"]},"municipalityCode":{"description":"Kommun som SCB-kod, fyra siffror (0380 = Uppsala). På kopplade företag från företagsdatan.","type":["string","null"]},"municipalityName":{"description":"Kommunens namn.","type":["string","null"]},"invoiceName":{"description":"Fakturauppgifter: mottagarens namn.","type":["string","null"]},"invoiceStreet":{"description":"Fakturauppgifter: gata eller box.","type":["string","null"]},"invoicePostalCode":{"description":"Fakturauppgifter: postnummer.","type":["string","null"]},"invoiceCity":{"description":"Fakturauppgifter: ort.","type":["string","null"]},"invoiceEmail":{"description":"Fakturauppgifter: e-postadress som fakturor skickas till.","type":["string","null"]},"paymentTermsDays":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Betalningsvillkor i dagar."},"description":{"description":"Beskrivning av företaget.","type":["string","null"]},"doNotContact":{"type":"boolean","description":"true om företaget är spärrat för kontakt. Ett spärrat företag kommer inte med i ringlistor och utskick."},"doNotContactReason":{"description":"Skälet till spärren. null om företaget inte är spärrat eller inget skäl angavs.","type":["string","null"]},"doNotContactAt":{"anyOf":[{"type":"string","format":"date-time","description":"Tidpunkt i UTC (ISO 8601)."},{"type":"null"}],"description":"När spärren sattes. null om företaget inte är spärrat."},"tags":{"type":"array","items":{"type":"string"},"description":"Företagets taggar, som namn i bokstavsordning."},"lastContactAt":{"anyOf":[{"type":"string","format":"date-time","description":"Tidpunkt i UTC (ISO 8601)."},{"type":"null"}],"description":"Senaste kontakt: det senaste samtalet, mejlet eller mötet som loggats på företaget. Anteckningar räknas inte. Går bara att läsa."},"fortnoxCustomerNumber":{"description":"Kundnumret i ert Fortnox, när företaget har förts över dit. Går bara att läsa.","type":["string","null"]},"archivedAt":{"anyOf":[{"type":"string","format":"date-time","description":"Tidpunkt i UTC (ISO 8601)."},{"type":"null"}],"description":"När företaget arkiverades. null för ett företag som inte är arkiverat. Går bara att läsa."},"createdBy":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"description":"Användarens id. Hämtas med GET /users."},{"type":"null"}],"description":"Användaren som sparade företaget. null när det skapades via API:t eller en import."},"createdAt":{"type":"string","format":"date-time","description":"När företaget sparades."},"updatedAt":{"type":"string","format":"date-time","description":"När företaget senast ändrades."}},"required":["id","customerNumber","name","alias","orgNr","isSoleProprietor","legalFormCode","legalForm","linkedToCompanyData","companyDataDate","sniCode","sniLabel","industryCode","industryLabel","purchasingPower","purchasingPowerLevel","keyFigures","status","ownerUserId","phone","email","website","visitStreet","visitPostalCode","visitCity","countyCode","countyName","municipalityCode","municipalityName","invoiceName","invoiceStreet","invoicePostalCode","invoiceCity","invoiceEmail","paymentTermsDays","description","doNotContact","doNotContactReason","doNotContactAt","tags","lastContactAt","fortnoxCustomerNumber","archivedAt","createdBy","createdAt","updatedAt"],"description":"Ett sparat företag: uppgifterna från företagsdatan och era egna fält."},"Contact":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Id (uuid)."},"companyId":{"type":"string","format":"uuid","description":"Företaget som kontakten hör till."},"name":{"type":"string","description":"Fullständigt namn. Alltid ifyllt. På en styrelsekontakt (source board) kommer namnet från företagsdatan och går bara att läsa."},"firstName":{"description":"Förnamn, för den som vill ha namnet uppdelat. null om det inte är ifyllt.","type":["string","null"]},"lastName":{"description":"Efternamn, för den som vill ha namnet uppdelat. null om det inte är ifyllt.","type":["string","null"]},"title":{"description":"Titel eller roll, till exempel Inköpschef. På en styrelsekontakt (source board) är det rollen i bolaget, till exempel Verkställande direktör: den kommer från företagsdatan och går bara att läsa.","type":["string","null"]},"email":{"description":"E-postadress.","type":["string","null"]},"phone":{"description":"Telefonnummer, så som det är skrivet.","type":["string","null"]},"mobile":{"description":"Mobilnummer, så som det är skrivet.","type":["string","null"]},"linkedinUrl":{"description":"Länk till kontaktens sida på LinkedIn.","type":["string","null"]},"notes":{"description":"Egen notering om kontakten.","type":["string","null"]},"isPrimary":{"type":"boolean","description":"true för företagets huvudkontakt. Ett företag har högst en."},"source":{"type":"string","enum":["manual","board","import","email"],"description":"Varifrån kontakten kommer. manual = tillagd för hand eller via API:t. board = företagets ansvariga person, hämtad från företagsdatan när företaget sparades (namn och roll är låsta). import = från en importerad fil. email = skapad utifrån ett mejl."},"createdBy":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"description":"Användarens id. Hämtas med GET /users."},{"type":"null"}],"description":"Användaren som lade till kontakten. null när den lades till via API:t."},"createdAt":{"type":"string","format":"date-time","description":"När kontakten lades till."},"updatedAt":{"type":"string","format":"date-time","description":"När kontakten senast ändrades."}},"required":["id","companyId","name","firstName","lastName","title","email","phone","mobile","linkedinUrl","notes","isPrimary","source","createdBy","createdAt","updatedAt"],"description":"En kontaktperson på ett sparat företag."},"Deal":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Affärens id."},"companyId":{"type":"string","format":"uuid","description":"Företaget som affären hör till."},"title":{"type":"string","description":"Affärens rubrik."},"valueSek":{"type":"number","description":"Affärens värde i kronor, exklusive moms."},"pipelineId":{"type":"string","format":"uuid","description":"Pipelinen som affären ligger i."},"pipelineName":{"type":"string","description":"Pipelinens namn."},"stageId":{"type":"string","format":"uuid","description":"Steget som affären ligger i."},"stageName":{"type":"string","description":"Stegets namn, till exempel Offert."},"status":{"type":"string","enum":["open","won","lost"],"description":"open = pågår, won = vunnen, lost = förlorad. Följer av steget: ändras genom att affären flyttas till ett annat steg."},"ownerUserId":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"description":"Användarens id. Hämtas med GET /users."},{"type":"null"}],"description":"Ansvarig säljare. null om affären saknar ansvarig. Användarna hämtas med GET /users."},"expectedCloseDate":{"anyOf":[{"type":"string","format":"date","description":"Datum, ÅÅÅÅ-MM-DD, årtal 1900–9999."},{"type":"null"}],"description":"Förväntat avslut, ÅÅÅÅ-MM-DD. null om inget datum är satt."},"closedAt":{"anyOf":[{"type":"string","format":"date-time","description":"Tidpunkt i UTC (ISO 8601)."},{"type":"null"}],"description":"När affären blev vunnen eller förlorad. null så länge affären pågår."},"closeReason":{"description":"Orsaken till att affären förlorades, om någon angavs. null annars.","type":["string","null"]},"createdBy":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"description":"Användarens id. Hämtas med GET /users."},{"type":"null"}],"description":"Användaren som skapade affären. null när den skapades via API:t."},"createdAt":{"type":"string","format":"date-time","description":"När affären skapades."},"updatedAt":{"type":"string","format":"date-time","description":"När affären senast ändrades."}},"required":["id","companyId","title","valueSek","pipelineId","pipelineName","stageId","stageName","status","ownerUserId","expectedCloseDate","closedAt","closeReason","createdBy","createdAt","updatedAt"],"description":"En affär på ett sparat företag, i ett steg i en pipeline."},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_json","validation_failed","unknown_field","missing_key","invalid_key","revoked_key","read_only_key","plan_required","forbidden","not_found","method_not_allowed","conflict","idempotency_key_reused","request_in_progress","too_large","invalid","rate_limited","internal_error","busy"],"description":"Felets kod, för ert system."},"message":{"type":"string","description":"Vad som gick fel, på svenska."},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","description":"Fältet som inte stämmer, till exempel email eller rows[0].quantity."},"message":{"type":"string","description":"Vad som är fel med fältet."}},"required":["field","message"]},"description":"Fälten som inte stämmer. Tom lista när felet inte gäller ett visst fält."},"requestId":{"type":"string","description":"Anropets id. Ange det om ni hör av er till oss."}},"required":["code","message","details","requestId"]}},"required":["error"],"description":"Ett fel. Vissa fel har fler uppgifter bredvid, till exempel existingId när det som skulle skapas redan finns."},"Me":{"type":"object","properties":{"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organisationens id."},"name":{"type":"string","description":"Organisationens namn."},"slug":{"type":"string","description":"Organisationens kortnamn."}},"required":["id","name","slug"],"description":"Organisationen som nyckeln hör till."},"key":{"type":"object","properties":{"id":{"type":"string","description":"Nyckelns id (uuid)."},"name":{"type":"string","description":"Namnet nyckeln fick när den skapades."},"scope":{"type":"string","enum":["read","write"],"description":"read = nyckeln får bara läsa. write = nyckeln får läsa och skriva."},"prefix":{"type":"string","description":"Nyckelns början, så som den visas i appen. Aldrig hela nyckeln."}},"required":["id","name","scope","prefix"],"description":"Nyckeln som anropet gjordes med."},"limits":{"type":"object","properties":{"requestsPerMinute":{"type":"integer","description":"Högst så många anrop per minut med den här nyckeln."},"maxBodyBytes":{"type":"integer","description":"Största innehåll i ett anrop, i byte."},"pageSizeDefault":{"type":"integer","description":"Antal rader per sida i listor när limit inte anges."},"pageSizeMax":{"type":"integer","description":"Högsta värdet för limit i listor."}},"required":["requestsPerMinute","maxBodyBytes","pageSizeDefault","pageSizeMax"],"description":"Gränserna som gäller för anropen."}},"required":["organization","key","limits"],"description":"Vem anropet görs som: organisationen, nyckeln och gränserna."},"Note":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Id (uuid)."},"companyId":{"type":"string","format":"uuid","description":"Företaget som anteckningen hör till."},"contactId":{"anyOf":[{"type":"string","format":"uuid","description":"Id (uuid)."},{"type":"null"}],"description":"Kontakten på företaget som anteckningen gäller. null om ingen är vald."},"title":{"description":"Rubrik, till exempel Möte online. null om anteckningen saknar rubrik.","type":["string","null"]},"body":{"type":"string","description":"Anteckningens text."},"createdBy":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"description":"Användarens id. Hämtas med GET /users."},{"type":"null"}],"description":"Användaren som skrev anteckningen. null när den skapades via API:t."},"createdAt":{"type":"string","format":"date-time","description":"När anteckningen skrevs."},"updatedAt":{"type":"string","format":"date-time","description":"När anteckningen senast ändrades. Anteckningar går inte att ändra, så det är i regel samma tid som createdAt."}},"required":["id","companyId","contactId","title","body","createdBy","createdAt","updatedAt"],"description":"En anteckning på ett sparat företag."},"Order":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Id (uuid)."},"orderNumber":{"type":"integer","description":"Ordernummer: löpnummer inom organisationen. Sätts av CRM:et."},"companyId":{"type":"string","format":"uuid","description":"Företaget som ordern gäller."},"status":{"type":"string","enum":["order","ready_for_invoice","sent_to_fortnox","fortnox_send_failed","invoiced","paid","credited","cancelled"],"description":"Var ordern är i flödet: order (Order: går att ändra), ready_for_invoice (Klar för faktura: låst), sent_to_fortnox (Skickad till Fortnox), fortnox_send_failed (Kunde inte skickas), invoiced (Fakturerad), paid (Betald), credited (Krediterad) eller cancelled (Makulerad). Stegen efter order görs i appen."},"editable":{"type":"boolean","description":"true så länge ordern har status order. Då går uppgifter och rader att ändra; annars svarar API:t 409."},"orderDate":{"type":"string","format":"date","description":"Orderdatum."},"ownerUserId":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"description":"Användarens id. Hämtas med GET /users."},{"type":"null"}],"description":"Säljaren: användaren som skapade ordern i appen. null när ordern skapades via API:t."},"ourReference":{"description":"Vår referens: namnet som står som er kontaktperson på fakturan.","type":["string","null"]},"customerReferenceContactId":{"anyOf":[{"type":"string","format":"uuid","description":"Id (uuid)."},{"type":"null"}],"description":"Deras referens: en kontakt på företaget. null om ingen är vald."},"customerReferenceText":{"description":"Deras referens som fri text. Används på fakturan när ingen kontakt är vald.","type":["string","null"]},"invoiceName":{"description":"Namnet på fakturan.","type":["string","null"]},"invoiceStreet":{"description":"Fakturaadress: gata eller box.","type":["string","null"]},"invoicePostalCode":{"description":"Fakturaadress: postnummer.","type":["string","null"]},"invoiceCity":{"description":"Fakturaadress: ort.","type":["string","null"]},"invoiceEmail":{"description":"E-postadressen som fakturan skickas till.","type":["string","null"]},"paymentTermsDays":{"type":"integer","description":"Betalvillkor i dagar."},"vatType":{"type":"string","enum":["SEVAT","SEREVERSEDVAT","EUREVERSEDVAT","EUVAT","EXPORT"],"description":"Momstyp: SEVAT (svensk moms), SEREVERSEDVAT (omvänd skattskyldighet, bygg), EUREVERSEDVAT (EU, omvänd skattskyldighet), EUVAT (EU med moms) eller EXPORT. Med allt utom SEVAT blir momsen 0 på raderna."},"remark":{"description":"Fakturatext: en rad text som skrivs på fakturan.","type":["string","null"]},"subtotalSek":{"type":"number","description":"Summa i kronor exklusive moms, efter rabatter. Räknas ut ur raderna."},"vatSek":{"type":"number","description":"Moms i kronor. Räknas ut ur raderna."},"roundingSek":{"type":"number","description":"Öresavrundning i kronor: det som läggs till eller dras av för att totalen ska bli hela kronor."},"totalSek":{"type":"number","description":"Att betala i kronor, inklusive moms, avrundat till hela kronor."},"rows":{"type":"array","items":{"$ref":"#/components/schemas/OrderRow"},"description":"Orderns rader, i den ordning de står på ordern."},"readyAt":{"anyOf":[{"type":"string","format":"date-time","description":"Tidpunkt i UTC (ISO 8601)."},{"type":"null"}],"description":"När ordern gjordes om till faktura i appen (Klar för faktura). null innan dess."},"sentAt":{"anyOf":[{"type":"string","format":"date-time","description":"Tidpunkt i UTC (ISO 8601)."},{"type":"null"}],"description":"När fakturan skickades till Fortnox. null innan dess."},"invoicedAt":{"anyOf":[{"type":"string","format":"date-time","description":"Tidpunkt i UTC (ISO 8601)."},{"type":"null"}],"description":"När fakturan bokfördes i Fortnox. null innan dess."},"paidAt":{"anyOf":[{"type":"string","format":"date-time","description":"Tidpunkt i UTC (ISO 8601)."},{"type":"null"}],"description":"När fakturan blev betald enligt Fortnox. null om den inte är betald."},"fortnoxInvoiceNumber":{"description":"Fakturanumret i Fortnox. null tills fakturan har skickats dit. Går bara att läsa.","type":["string","null"]},"fortnoxTotalToPaySek":{"anyOf":[{"type":"number","description":"Belopp i kronor, högst två decimaler."},{"type":"null"}],"description":"Att betala i kronor enligt Fortnox, som avrundar på sitt eget sätt. null tills status har hämtats från Fortnox. Går bara att läsa."},"fortnoxSyncedAt":{"anyOf":[{"type":"string","format":"date-time","description":"Tidpunkt i UTC (ISO 8601)."},{"type":"null"}],"description":"När status och betalning senast hämtades från Fortnox (sker automatiskt kl 06, 12 och 17). null om det aldrig har gjorts."},"paymentStatus":{"anyOf":[{"type":"string","enum":["paid","due","overdue"]},{"type":"null"}],"description":"Betalningsläget enligt Fortnox, så som appen visar det: paid (Betald), due (obetald, förfallodagen har inte passerat) eller overdue (Försenad: obetald och förfallodagen har passerat). null när ordern inte är fakturerad, är krediterad eller makulerad, eller när Fortnox inte har gett någon förfallodag än."},"paymentDueDate":{"anyOf":[{"type":"string","format":"date","description":"Datum, ÅÅÅÅ-MM-DD, årtal 1900–9999."},{"type":"null"}],"description":"Fakturans förfallodag enligt Fortnox. null när den inte är känd."},"paymentBalanceSek":{"anyOf":[{"type":"number","description":"Belopp i kronor, högst två decimaler."},{"type":"null"}],"description":"Kvar att betala i kronor enligt Fortnox. null när det inte är känt, och när fakturan är betald."},"paymentOverdueDays":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Antal dagar sedan förfallodagen, när paymentStatus är overdue. Annars null."},"createdBy":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"description":"Användarens id. Hämtas med GET /users."},{"type":"null"}],"description":"Användaren som skapade ordern. null när den skapades via API:t."},"createdAt":{"type":"string","format":"date-time","description":"När ordern skapades."},"updatedAt":{"type":"string","format":"date-time","description":"När ordern senast ändrades. Ändras också när en rad läggs till, ändras eller tas bort."}},"required":["id","orderNumber","companyId","status","editable","orderDate","ownerUserId","ourReference","customerReferenceContactId","customerReferenceText","invoiceName","invoiceStreet","invoicePostalCode","invoiceCity","invoiceEmail","paymentTermsDays","vatType","remark","subtotalSek","vatSek","roundingSek","totalSek","rows","readyAt","sentAt","invoicedAt","paidAt","fortnoxInvoiceNumber","fortnoxTotalToPaySek","fortnoxSyncedAt","paymentStatus","paymentDueDate","paymentBalanceSek","paymentOverdueDays","createdBy","createdAt","updatedAt"],"description":"En order med sina rader och summor."},"OrderRow":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Id (uuid)."},"orderId":{"type":"string","format":"uuid","description":"Ordern som raden hör till."},"productId":{"anyOf":[{"type":"string","format":"uuid","description":"Id (uuid)."},{"type":"null"}],"description":"Artikeln som raden bygger på. null för en rad med fri text."},"articleNumber":{"description":"Artikelns artikelnummer, hämtat från artikeln. null för en rad utan artikel och för en artikel utan nummer. Går bara att läsa.","type":["string","null"]},"description":{"type":"string","description":"Radens text, så som den står på ordern och fakturan."},"quantity":{"type":"number","description":"Antal, med högst två decimaler."},"unit":{"description":"Artikelns enhet, till exempel st eller tim. null för en rad utan artikel. Går bara att läsa.","type":["string","null"]},"priceSek":{"type":"number","description":"Pris per enhet i kronor, exklusive moms."},"discountPercent":{"type":"number","description":"Rabatt i procent, 0 till 100."},"vatRate":{"type":"number","description":"Radens momssats i procent. Har ordern en annan momstyp än SEVAT räknas momsen som 0 på raden, oavsett vad som står här."},"totalSek":{"type":"number","description":"Radens summa i kronor efter rabatt, exklusive moms. Räknas ut av CRM:et."}},"required":["id","orderId","productId","articleNumber","description","quantity","unit","priceSek","discountPercent","vatRate","totalSek"],"description":"En rad på en order."},"Pipeline":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Pipelinens id."},"name":{"type":"string","description":"Pipelinens namn."},"isDefault":{"type":"boolean","description":"true för standardpipelinen: där hamnar en ny affär när pipelineId inte anges."},"stages":{"type":"array","items":{"$ref":"#/components/schemas/PipelineStage"},"description":"Pipelinens steg, i den ordning de visas på pipelinetavlan i appen: öppna steg efter sannolikhet (lägst först), sedan steg med utfallet won och sist steg med utfallet lost."}},"required":["id","name","isDefault","stages"],"description":"En pipeline med sina steg. En affär ligger alltid i ett steg i en pipeline."},"PipelineStage":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Stegets id. Anges som stageId när en affär skapas eller flyttas."},"name":{"type":"string","description":"Stegets namn, till exempel Offert."},"probability":{"type":"integer","description":"Sannolikheten i procent (0 till 100) att en affär i steget blir vunnen. Används för viktat värde i appen."},"outcome":{"type":"string","enum":["open","won","lost"],"description":"Vad steget betyder för en affär som ligger där: open = pågår, won = vunnen, lost = förlorad. Affärens status följer stegets utfall."}},"required":["id","name","probability","outcome"],"description":"Ett steg i en pipeline."},"Product":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Id (uuid)."},"articleNumber":{"description":"Artikelnummer. Finns bara en gång i organisationen. null om artikeln saknar nummer.","type":["string","null"]},"name":{"type":"string","description":"Artikelns namn."},"description":{"description":"Beskrivning. Den föreslås som text på orderraden när artikeln väljs. null om den saknas.","type":["string","null"]},"unit":{"type":"string","description":"Enhet, till exempel st, tim eller mån."},"priceSek":{"type":"number","description":"Pris per enhet i kronor, exklusive moms."},"vatRate":{"type":"number","description":"Momssats i procent, till exempel 25."},"isActive":{"type":"boolean","description":"true = artikeln går att välja på nya orderrader. false = inaktiv: den står kvar på gamla ordrar men går inte att välja."},"createdBy":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"description":"Användarens id. Hämtas med GET /users."},{"type":"null"}],"description":"Användaren som lade upp artikeln. null när den skapades via API:t eller hämtades från Fortnox."},"createdAt":{"type":"string","format":"date-time","description":"När artikeln lades upp."},"updatedAt":{"type":"string","format":"date-time","description":"När artikeln senast ändrades."}},"required":["id","articleNumber","name","description","unit","priceSek","vatRate","isActive","createdBy","createdAt","updatedAt"],"description":"En artikel i artikelregistret."},"Tag":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Taggens id (uuid)."},"name":{"type":"string","description":"Taggens namn, så som det visas i appen. Det är namnet som används i tags på ett företag och i filtret tag."},"createdAt":{"type":"string","format":"date-time","description":"När taggen skapades."}},"required":["id","name","createdAt"],"description":"En tagg i organisationen."},"Task":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Uppgiftens id."},"companyId":{"anyOf":[{"type":"string","format":"uuid","description":"Id (uuid)."},{"type":"null"}],"description":"Företaget som uppgiften hör till. null för en äldre uppgift utan företag."},"contactId":{"anyOf":[{"type":"string","format":"uuid","description":"Id (uuid)."},{"type":"null"}],"description":"Kontaktpersonen på företaget som uppgiften gäller. null om ingen är vald."},"type":{"type":"string","enum":["call","email","meeting","other"],"description":"Vilken sorts uppgift det är: call = ring, email = mejla, meeting = möte, other = övrigt."},"title":{"type":"string","description":"Uppgiftens rubrik."},"description":{"description":"Beskrivning. null om uppgiften saknar beskrivning.","type":["string","null"]},"dueAt":{"type":"string","format":"date-time","description":"När uppgiften ska vara gjord."},"assignedTo":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"description":"Användarens id. Hämtas med GET /users."},{"type":"null"}],"description":"Ansvarig användare. null om uppgiften saknar ansvarig. Användarna hämtas med GET /users."},"status":{"type":"string","enum":["open","done","cancelled"],"description":"open = ska göras, done = klar, cancelled = struken."},"completedAt":{"anyOf":[{"type":"string","format":"date-time","description":"Tidpunkt i UTC (ISO 8601)."},{"type":"null"}],"description":"När uppgiften klarmarkerades. null så länge den inte är klar."},"createdBy":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"description":"Användarens id. Hämtas med GET /users."},{"type":"null"}],"description":"Användaren som skapade uppgiften. null när den skapades via API:t eller av systemet."},"createdAt":{"type":"string","format":"date-time","description":"När uppgiften skapades."},"updatedAt":{"type":"string","format":"date-time","description":"När uppgiften senast ändrades."}},"required":["id","companyId","contactId","type","title","description","dueAt","assignedTo","status","completedAt","createdBy","createdAt","updatedAt"],"description":"En uppgift på ett sparat företag: något som ska göras, med datum och ansvarig."},"User":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"description":"Användarens id. Det är det här värdet som anges som ansvarig, till exempel i ownerUserId."},"name":{"type":"string","description":"Användarens namn."},"email":{"type":"string","description":"Användarens e-postadress (den hen loggar in med)."},"role":{"anyOf":[{"type":"object","properties":{"key":{"type":"string","description":"Rollens nyckel: admin, finance eller sales för de fasta rollerna, custom-… för era egna."},"name":{"type":"string","description":"Rollens namn, så som det visas i appen."}},"required":["key","name"]},{"type":"null"}],"description":"Användarens roll i organisationen. null om användaren inte har fått någon roll än."}},"required":["id","name","email","role"],"description":"En användare i organisationen."},"Webhook":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Webhookens id."},"name":{"type":"string","description":"Ert namn på kopplingen, till exempel Affärssystemet."},"url":{"type":"string","description":"Adressen meddelandena skickas till (https)."},"events":{"type":"array","items":{"type":"string"},"description":"Händelsetyperna som skickas, till exempel deal.won. Tom lista = alla händelser."},"status":{"type":"string","enum":["active","paused","disabled"],"description":"active = skickar. paused = stoppad av CRMdata efter för många misslyckade leveranser i rad (se pausedReason); det som händer under pausen väntar och skickas när ni startar den igen med PATCH status active. disabled = avstängd av er, eller av CRMdata när adressen svarade 410 Gone (se pausedReason); det som händer under tiden skickas aldrig."},"pausedReason":{"description":"Varför CRMdata pausade webhooken, eller stängde av den när adressen svarade 410 Gone. null när den är igång eller när ni själva stängde av den.","type":["string","null"]},"consecutiveFailures":{"type":"integer","description":"Leveranser i rad där alla försök gått åt. Vid 20 pausas webhooken. Nollas vid en lyckad leverans."},"lastSuccessAt":{"anyOf":[{"type":"string","format":"date-time","description":"Tidpunkt i UTC (ISO 8601)."},{"type":"null"}],"description":"När en leverans senast lyckades. null om ingen har lyckats än."},"lastFailureAt":{"anyOf":[{"type":"string","format":"date-time","description":"Tidpunkt i UTC (ISO 8601)."},{"type":"null"}],"description":"När ett försök senast misslyckades. null om inget har misslyckats."},"createdAt":{"type":"string","format":"date-time","description":"När webhooken skapades."}},"required":["id","name","url","events","status","pausedReason","consecutiveFailures","lastSuccessAt","lastFailureAt","createdAt"],"description":"En webhook: en adress som CRMdata skickar meddelanden till när något händer."},"WebhookCreated":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Webhookens id."},"name":{"type":"string","description":"Ert namn på kopplingen, till exempel Affärssystemet."},"url":{"type":"string","description":"Adressen meddelandena skickas till (https)."},"events":{"type":"array","items":{"type":"string"},"description":"Händelsetyperna som skickas, till exempel deal.won. Tom lista = alla händelser."},"status":{"type":"string","enum":["active","paused","disabled"],"description":"active = skickar. paused = stoppad av CRMdata efter för många misslyckade leveranser i rad (se pausedReason); det som händer under pausen väntar och skickas när ni startar den igen med PATCH status active. disabled = avstängd av er, eller av CRMdata när adressen svarade 410 Gone (se pausedReason); det som händer under tiden skickas aldrig."},"pausedReason":{"description":"Varför CRMdata pausade webhooken, eller stängde av den när adressen svarade 410 Gone. null när den är igång eller när ni själva stängde av den.","type":["string","null"]},"consecutiveFailures":{"type":"integer","description":"Leveranser i rad där alla försök gått åt. Vid 20 pausas webhooken. Nollas vid en lyckad leverans."},"lastSuccessAt":{"anyOf":[{"type":"string","format":"date-time","description":"Tidpunkt i UTC (ISO 8601)."},{"type":"null"}],"description":"När en leverans senast lyckades. null om ingen har lyckats än."},"lastFailureAt":{"anyOf":[{"type":"string","format":"date-time","description":"Tidpunkt i UTC (ISO 8601)."},{"type":"null"}],"description":"När ett försök senast misslyckades. null om inget har misslyckats."},"createdAt":{"type":"string","format":"date-time","description":"När webhooken skapades."},"secret":{"type":"string","description":"Hemligheten för signaturen (börjar på whsec_). Visas bara här, en gång: spara den på er server. Används för att kontrollera CRMdata-Signature på varje meddelande."}},"required":["id","name","url","events","status","pausedReason","consecutiveFailures","lastSuccessAt","lastFailureAt","createdAt","secret"],"description":"Den nya webhooken, med hemligheten för signaturen. Hemligheten visas aldrig igen."},"WebhookEventType":{"type":"object","properties":{"type":{"type":"string","description":"Händelsetypen, så som den anges i events och skickas i type och huvudet CRMdata-Event."},"entity":{"type":"string","enum":["company","contact","note","task","deal","order"],"description":"Vilken sorts objekt händelsen gäller. Meddelandets data är det objektet, i samma form som API:t ger det."},"label":{"type":"string","description":"Kort namn på svenska."},"description":{"type":"string","description":"När händelsen skickas."}},"required":["type","entity","label","description"],"description":"En händelsetyp som webhooks kan prenumerera på."},"WebhookPing":{"type":"object","properties":{"deliveryId":{"type":"string","format":"uuid","description":"Leveransens id. Står i huvudet CRMdata-Delivery på meddelandet."},"eventId":{"type":"string","format":"uuid","description":"Testhändelsens id. Står i meddelandets id."}},"required":["deliveryId","eventId"],"description":"Testhändelsen som lades i kön."}}}}