Version 2026-10-01

Fixras öppna API

Alla svar har formen { ok, data, warnings, errors }. Belopp är heltal i öre, tider ISO 8601. Nycklar skapas av bolagets administratör under Inställningar → Integrationer → Öppet API.

Kom igång

  1. 1. Skapa en testnyckel

    Testnycklar börjar med fx_test_ och kör alla skrivningar torrt — inget sparas.

  2. 2. Anropa GET /me

    Kontrollera att nyckeln fungerar och vilka scopes den har.

    curl https://api.fixra.se/v1/me \
      -H "Authorization: Bearer $FIXRA_API_KEY"
  3. 3. Skapa en arbetsorder torrt

    Med testnyckeln svarar API:t som om ordern skapats, med dry_run: true.

    curl -X POST https://api.fixra.se/v1/work-orders \
      -H "Authorization: Bearer $FIXRA_API_KEY" \
      -H "Idempotency-Key: $(uuidgen)" \
      -H "Content-Type: application/json" \
      -d '{"title":"Fönsterputs"}'
  4. 4. Lägg till en webhook

    Få händelser som customer.created och work_order.status_changed till din server.

Zapier

  • Triggers kräver en live-nyckel. Testnycklar kör torrt och kan inte ta emot händelser.
  • Varje påslagen Zap skapar en egen webhookmottagare på hooks.zapier.com (upp till 100 per bolag, utöver de vanliga 10).
  • Mottagaren tas bort automatiskt när Zappen stängs av — Zapier svarar 410 och Fixra slutar skicka.

Referens

Konto

get/v1/me

Vem är jag

Returnerar bolaget nyckeln hör till, nyckelns namn, prefix, läge (live eller test) och scopes. Kräver inget scope — bra som första anrop.

Svarets schema (data)
FältTypBeskrivning
tenant *object
key *object

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "tenant": {
      "id": "3f1c2a9e-7b1d-4c55-9a0e-2d6f1b7c8e90",
      "name": "Städbolaget AB"
    },
    "key": {
      "name": "Min integration",
      "prefix": "fx_live_AbCd1234",
      "mode": "live",
      "scopes": [
        "customers:read",
        "work_orders:read"
      ],
      "expires_at": "2026-12-30T09:00:00+01:00",
      "created_at": "2026-10-01T09:00:00+02:00"
    }
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/me" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"

Specifikation

get/v1/openapi.json

OpenAPI-specifikationen

Hela API:t som OpenAPI 3.1. Publik, ingen nyckel.

Exempelsvar · 200

{
  "openapi": "3.1.0",
  "info": {
    "title": "Fixra API",
    "version": "2026-10-01"
  }
}

Felkoder

500 SERVERFEL
curl -X GET "https://api.fixra.se/v1/openapi.json"

Kunder

get/v1/customerscustomers:read

Lista kunder

Kunder i bolaget, sorterade på senast ändrad. Filtrera på fritext (`q`), `type` eller ert `external_id`. Privatkunders personnummer visas bara som ÅÅMMDD-****.

Parametrar

  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
  • qfråga
  • typefråga
  • external_idfråga— Slå upp på ert eget id (external_id).
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "customer_number": "K-1042",
        "type": "company",
        "name": "Brf Solgläntan",
        "org_number": "769612-3456",
        "vat_number": null,
        "email": "styrelsen@solglantan.se",
        "phone": "+46701234567",
        "payment_terms_days": 30,
        "is_active": true,
        "tags": [],
        "billing_address": {
          "line1": "Solvägen 4",
          "line2": null,
          "postal_code": "11122",
          "city": "Stockholm",
          "country": "SE"
        },
        "external_id": "crm-881",
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 OKAND_KUNDTYP422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/customers" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/customerscustomers:write

Skapa kund

Skapar en kund med samma regler som i appen. Märks med källa API i aktivitetsloggen. Testnycklar kör torrt (`dry_run: true`).

Parametrar

  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
name *string
typestring (company, private)
org_numberstring
vat_numberstring
emailstring
phonestring
payment_terms_daysinteger
tagsarray
addressobject
external_idstring
Svarets schema (data)
FältTypBeskrivning
id *string
customer_number *string | null
type *string (company, private)
name *string
org_number *string | nullOrganisationsnummer. För privatkunder personnummer maskerat ÅÅMMDD-****.
vat_number *string | null
email *string | null
phone *string | null
payment_terms_days *flera
is_active *boolean
tags *array
billing_address *flera
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "customer_number": "K-1042",
    "type": "company",
    "name": "Brf Solgläntan",
    "org_number": "769612-3456",
    "vat_number": null,
    "email": "styrelsen@solglantan.se",
    "phone": "+46701234567",
    "payment_terms_days": 30,
    "is_active": true,
    "tags": [],
    "billing_address": {
      "line1": "Solvägen 4",
      "line2": null,
      "postal_code": "11122",
      "city": "Stockholm",
      "country": "SE"
    },
    "external_id": "crm-881",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 NAMN_SAKNAS422 OGILTIG_KUNDTYP422 EXTERNT_ID_UPPTAGET422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/customers" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"name":"Brf Solgläntan","type":"company","org_number":"769612-3456","external_id":"crm-881"}'
get/v1/customers/{id}customers:read

Hämta kund

En kund. Kund i ett annat bolag ger 404.

Parametrar

  • idstig · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
customer_number *string | null
type *string (company, private)
name *string
org_number *string | nullOrganisationsnummer. För privatkunder personnummer maskerat ÅÅMMDD-****.
vat_number *string | null
email *string | null
phone *string | null
payment_terms_days *flera
is_active *boolean
tags *array
billing_address *flera
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "customer_number": "K-1042",
    "type": "company",
    "name": "Brf Solgläntan",
    "org_number": "769612-3456",
    "vat_number": null,
    "email": "styrelsen@solglantan.se",
    "phone": "+46701234567",
    "payment_terms_days": 30,
    "is_active": true,
    "tags": [],
    "billing_address": {
      "line1": "Solvägen 4",
      "line2": null,
      "postal_code": "11122",
      "city": "Stockholm",
      "country": "SE"
    },
    "external_id": "crm-881",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00"
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 KUND_SAKNAS413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/customers/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
patch/v1/customers/{id}customers:write

Ändra kund

Ändrar bara fälten som skickas.

Parametrar

  • idstig · krävs

Kropp

FältTypBeskrivning
namestring
typestring (company, private)
org_numberstring
vat_numberstring
emailstring
phonestring
payment_terms_daysinteger
tagsarray
addressobject
external_idstring
is_activeboolean
Svarets schema (data)
FältTypBeskrivning
id *string
customer_number *string | null
type *string (company, private)
name *string
org_number *string | nullOrganisationsnummer. För privatkunder personnummer maskerat ÅÅMMDD-****.
vat_number *string | null
email *string | null
phone *string | null
payment_terms_days *flera
is_active *boolean
tags *array
billing_address *flera
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "customer_number": "K-1042",
    "type": "company",
    "name": "Brf Solgläntan",
    "org_number": "769612-3456",
    "vat_number": null,
    "email": "styrelsen@solglantan.se",
    "phone": "+46701234567",
    "payment_terms_days": 30,
    "is_active": true,
    "tags": [],
    "billing_address": {
      "line1": "Solvägen 4",
      "line2": null,
      "postal_code": "11122",
      "city": "Stockholm",
      "country": "SE"
    },
    "external_id": "crm-881",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 KUND_SAKNAS413 PAYLOAD_FOR_STOR422 NAMN_SAKNAS422 EXTERNT_ID_UPPTAGET422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X PATCH "https://api.fixra.se/v1/customers/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"phone":"+46709998877"}'
get/v1/customers/{id}/notescustomer_notes:read

Lista kundanteckningar

Anteckningarna på kundkortet.

Parametrar

  • idstig · krävs
  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "body": "Föredrar mejl före telefon.",
        "is_pinned": false,
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 KUND_SAKNAS413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/customers/{id}/notes" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/customers/{id}/notescustomer_notes:write

Skapa kundanteckning

Skapar en anteckning genom `customer_note_save`.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
body *string
is_pinnedboolean
Svarets schema (data)
FältTypBeskrivning
id *string
customer_id *string
body *string
is_pinned *boolean
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "body": "Föredrar mejl före telefon.",
    "is_pinned": false,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 KUND_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 ANTECKNING_TOM422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/customers/{id}/notes" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"body":"Föredrar mejl före telefon."}'
patch/v1/customer-notes/{id}customer_notes:write

Ändra kundanteckning

Ändrar text eller fastnålning.

Parametrar

  • idstig · krävs

Kropp

FältTypBeskrivning
bodystring
is_pinnedboolean
Svarets schema (data)
FältTypBeskrivning
id *string
customer_id *string
body *string
is_pinned *boolean
created_at *string
updated_at *string

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "body": "Föredrar mejl före telefon.",
    "is_pinned": true,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 ANTECKNING_SAKNAS413 PAYLOAD_FOR_STOR422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X PATCH "https://api.fixra.se/v1/customer-notes/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"is_pinned":true}'
delete/v1/customer-notes/{id}customer_notes:write

Ta bort kundanteckning

Tar bort genom `customer_note_delete`.

Parametrar

  • idstig · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
deleted *boolean
dry_run *boolean
idempotent *boolean

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "deleted": true,
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 ANTECKNING_SAKNAS413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X DELETE "https://api.fixra.se/v1/customer-notes/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"

Platser

get/v1/sitessites:read

Lista platser

Platser (städobjekt). Portkod, larmkod, nyckelinformation och tillträdesinstruktioner returneras aldrig.

Parametrar

  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
  • customer_idfråga
  • external_idfråga— Slå upp på ert eget id (external_id).
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "name": "Trapphus A",
        "address": {
          "line1": "Solvägen 4",
          "line2": null,
          "postal_code": "11122",
          "city": "Stockholm",
          "country": "SE"
        },
        "property_designation": "Solen 1:4",
        "service_area": "Innerstan",
        "area_sqm": 420,
        "external_id": null,
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/sites" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/sitessites:write

Skapa plats

Skapar en plats hos en kund. Portkod och nyckelinformation kan skrivas men läses aldrig tillbaka.

Parametrar

  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
customer_id *string
name *string
addressobject
property_designationstring
service_areastring
area_sqminteger
access_infostringSkrivs men returneras aldrig.
gate_codestringPortkod. Skrivs men returneras aldrig.
alarm_codestringLarmkod. Skrivs men returneras aldrig.
key_infostringNyckelinformation. Skrivs men returneras aldrig.
external_idstring
Svarets schema (data)
FältTypBeskrivning
id *string
customer_id *string
name *string
address *flera
property_designation *string | null
service_area *string | null
area_sqm *flera
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "name": "Trapphus A",
    "address": {
      "line1": "Solvägen 4",
      "line2": null,
      "postal_code": "11122",
      "city": "Stockholm",
      "country": "SE"
    },
    "property_designation": "Solen 1:4",
    "service_area": "Innerstan",
    "area_sqm": 420,
    "external_id": null,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 NAMN_SAKNAS422 KUND_SAKNAS422 EXTERNT_ID_UPPTAGET422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/sites" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"customer_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e","name":"Trapphus A","gate_code":"1234","address":{"line1":"Solvägen 4","postal_code":"11122","city":"Stockholm"}}'
get/v1/sites/{id}sites:read

Hämta plats

En plats. Plats i ett annat bolag ger 404.

Parametrar

  • idstig · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
customer_id *string
name *string
address *flera
property_designation *string | null
service_area *string | null
area_sqm *flera
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "name": "Trapphus A",
    "address": {
      "line1": "Solvägen 4",
      "line2": null,
      "postal_code": "11122",
      "city": "Stockholm",
      "country": "SE"
    },
    "property_designation": "Solen 1:4",
    "service_area": "Innerstan",
    "area_sqm": 420,
    "external_id": null,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00"
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 OBJEKT_SAKNAS413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/sites/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
patch/v1/sites/{id}sites:write

Ändra plats

Ändrar bara fälten som skickas.

Parametrar

  • idstig · krävs

Kropp

FältTypBeskrivning
namestring
addressobject
property_designationstring
service_areastring
area_sqminteger
access_infostringSkrivs men returneras aldrig.
gate_codestringPortkod. Skrivs men returneras aldrig.
alarm_codestringLarmkod. Skrivs men returneras aldrig.
key_infostringNyckelinformation. Skrivs men returneras aldrig.
external_idstring
Svarets schema (data)
FältTypBeskrivning
id *string
customer_id *string
name *string
address *flera
property_designation *string | null
service_area *string | null
area_sqm *flera
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "name": "Trapphus A",
    "address": {
      "line1": "Solvägen 4",
      "line2": null,
      "postal_code": "11122",
      "city": "Stockholm",
      "country": "SE"
    },
    "property_designation": "Solen 1:4",
    "service_area": "Innerstan",
    "area_sqm": 420,
    "external_id": null,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 OBJEKT_SAKNAS413 PAYLOAD_FOR_STOR422 EXTERNT_ID_UPPTAGET422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X PATCH "https://api.fixra.se/v1/sites/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"area_sqm":450}'

Kontakter

get/v1/contactscontacts:read

Lista kontakter

Kontaktpersoner, valfritt för en kund.

Parametrar

  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
  • customer_idfråga
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "site_id": null,
        "first_name": "Anna",
        "last_name": "Berg",
        "title": "Ordförande",
        "email": "anna@solglantan.se",
        "phone": "+46701234567",
        "is_primary": true,
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/contacts" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/contactscontacts:write

Skapa kontakt

Skapar en kontaktperson hos en kund.

Parametrar

  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
customer_id *string
site_idstring
first_namestring
last_namestring
titlestring
emailstring
phonestring
is_primaryboolean
Svarets schema (data)
FältTypBeskrivning
id *string
customer_id *string
site_id *flera
first_name *string | null
last_name *string | null
title *string | null
email *string | null
phone *string | null
is_primary *boolean
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": null,
    "first_name": "Anna",
    "last_name": "Berg",
    "title": "Ordförande",
    "email": "anna@solglantan.se",
    "phone": "+46701234567",
    "is_primary": true,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 NAMN_SAKNAS422 KUND_SAKNAS422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/contacts" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"customer_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e","first_name":"Anna","last_name":"Berg","email":"anna@solglantan.se"}'
patch/v1/contacts/{id}contacts:write

Ändra kontakt

Ändrar bara fälten som skickas.

Parametrar

  • idstig · krävs

Kropp

FältTypBeskrivning
site_idstring
first_namestring
last_namestring
titlestring
emailstring
phonestring
is_primaryboolean
Svarets schema (data)
FältTypBeskrivning
id *string
customer_id *string
site_id *flera
first_name *string | null
last_name *string | null
title *string | null
email *string | null
phone *string | null
is_primary *boolean
created_at *string
updated_at *string

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": null,
    "first_name": "Anna",
    "last_name": "Berg",
    "title": "Ordförande",
    "email": "anna@solglantan.se",
    "phone": "+46701234567",
    "is_primary": true,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 KONTAKT_SAKNAS413 PAYLOAD_FOR_STOR422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X PATCH "https://api.fixra.se/v1/contacts/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"phone":"+46701234567"}'

Arbetsorder

get/v1/work-orderswork_orders:read

Lista arbetsorder

Arbetsorder utan priser. Filtrera på `status` (kanoniskt tillstånd), period (`from`/`to`), kund, plats eller `external_id`.

Parametrar

  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
  • statusfråga
  • fromfråga
  • tofråga
  • customer_idfråga
  • site_idfråga
  • external_idfråga— Slå upp på ert eget id (external_id).
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "work_order_no": "AO-2031",
        "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "contact_id": null,
        "agreement_id": null,
        "title": "Fönsterputs",
        "description": "Alla fönster plan 1–3",
        "status": "unplanned",
        "status_label": null,
        "priority": "normal",
        "planned_start": "2026-10-05T08:00:00+02:00",
        "planned_end": "2026-10-05T10:00:00+02:00",
        "estimated_minutes": 120,
        "source": "api",
        "external_id": "crm-wo-19",
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/work-orders" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/work-orderswork_orders:write

Skapa arbetsorder

Skapar en oplanerad arbetsorder genom samma funktion som appen (`work_order_create`). Källa `api`. Testnycklar kör torrt.

Parametrar

  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
title *string
descriptionstring
customer_idstring
site_idstring
agreement_idstring
product_idstring
occurrence_datestringDagen ordern gäller. Standard i dag.
preferred_timestringStarttid HH:MM (Europe/Stockholm). Standard 08:00.
estimated_minutesinteger
billing_typestring (fixed_price, time_material)
fixed_priceintegerFast pris i öre. Krävs för fixed_price. Returneras aldrig.
vat_ratenumber
tax_reductionstring (rut, none)
external_idstring
Svarets schema (data)
FältTypBeskrivning
id *string
work_order_no *string
customer_id *flera
site_id *flera
contact_id *flera
agreement_id *flera
title *string
description *string | null
status *stringKanoniskt tillstånd: unplanned, planned, in_progress, completed, cancelled …
status_label *string | null
priority *string | null
planned_start *flera
planned_end *flera
estimated_minutes *flera
source *string | null
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "work_order_no": "AO-2031",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "contact_id": null,
    "agreement_id": null,
    "title": "Fönsterputs",
    "description": "Alla fönster plan 1–3",
    "status": "unplanned",
    "status_label": null,
    "priority": "normal",
    "planned_start": "2026-10-05T08:00:00+02:00",
    "planned_end": "2026-10-05T10:00:00+02:00",
    "estimated_minutes": 120,
    "source": "api",
    "external_id": "crm-wo-19",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 TITEL_SAKNAS422 KUND_SAKNAS422 OBJEKT_SAKNAS422 PRIS_SAKNAS422 ROT_EJ_STOTT422 EXTERNT_ID_UPPTAGET422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/work-orders" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"title":"Fönsterputs","customer_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e","site_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e","billing_type":"time_material","occurrence_date":"2026-10-05","external_id":"crm-wo-19"}'
get/v1/work-orders/{id}work_orders:read

Hämta arbetsorder

En arbetsorder med rader och pass.

Parametrar

  • idstig · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
work_order_no *string
customer_id *flera
site_id *flera
contact_id *flera
agreement_id *flera
title *string
description *string | null
status *stringKanoniskt tillstånd: unplanned, planned, in_progress, completed, cancelled …
status_label *string | null
priority *string | null
planned_start *flera
planned_end *flera
estimated_minutes *flera
source *string | null
external_id *string | null
created_at *string
updated_at *string
lines *array
shifts *array

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "work_order_no": "AO-2031",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "contact_id": null,
    "agreement_id": null,
    "title": "Fönsterputs",
    "description": "Alla fönster plan 1–3",
    "status": "unplanned",
    "status_label": null,
    "priority": "normal",
    "planned_start": "2026-10-05T08:00:00+02:00",
    "planned_end": "2026-10-05T10:00:00+02:00",
    "estimated_minutes": 120,
    "source": "api",
    "external_id": "crm-wo-19",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "lines": [],
    "shifts": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "work_order_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "user_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "title": "Trappstädning",
        "starts_at": "2026-10-05T08:00:00+02:00",
        "ends_at": "2026-10-05T10:00:00+02:00",
        "is_tentative": false,
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ]
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 ARBETSORDER_SAKNAS413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/work-orders/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
patch/v1/work-orders/{id}work_orders:write

Ändra arbetsorder

Ändrar titel, beskrivning, beräknad tid, avtal eller external_id.

Parametrar

  • idstig · krävs

Kropp

FältTypBeskrivning
titlestring
descriptionstring
estimated_minutesinteger
agreement_idflera
external_idstring
Svarets schema (data)
FältTypBeskrivning
id *string
work_order_no *string
customer_id *flera
site_id *flera
contact_id *flera
agreement_id *flera
title *string
description *string | null
status *stringKanoniskt tillstånd: unplanned, planned, in_progress, completed, cancelled …
status_label *string | null
priority *string | null
planned_start *flera
planned_end *flera
estimated_minutes *flera
source *string | null
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "work_order_no": "AO-2031",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "contact_id": null,
    "agreement_id": null,
    "title": "Fönsterputs",
    "description": "Alla fönster plan 1–3",
    "status": "unplanned",
    "status_label": null,
    "priority": "normal",
    "planned_start": "2026-10-05T08:00:00+02:00",
    "planned_end": "2026-10-05T10:00:00+02:00",
    "estimated_minutes": 120,
    "source": "api",
    "external_id": "crm-wo-19",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 ARBETSORDER_SAKNAS413 PAYLOAD_FOR_STOR422 TITEL_SAKNAS422 EXTERNT_ID_UPPTAGET422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X PATCH "https://api.fixra.se/v1/work-orders/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"description":"Även källarfönster"}'
post/v1/work-orders/{id}/cancelwork_orders:write

Avboka arbetsorder

Sätter tillståndet `cancelled` genom `work_order_set_state`. Orsak krävs.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
reason *string
Svarets schema (data)
FältTypBeskrivning
id *string
work_order_no *string
customer_id *flera
site_id *flera
contact_id *flera
agreement_id *flera
title *string
description *string | null
status *stringKanoniskt tillstånd: unplanned, planned, in_progress, completed, cancelled …
status_label *string | null
priority *string | null
planned_start *flera
planned_end *flera
estimated_minutes *flera
source *string | null
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "work_order_no": "AO-2031",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "contact_id": null,
    "agreement_id": null,
    "title": "Fönsterputs",
    "description": "Alla fönster plan 1–3",
    "status": "cancelled",
    "status_label": null,
    "priority": "normal",
    "planned_start": "2026-10-05T08:00:00+02:00",
    "planned_end": "2026-10-05T10:00:00+02:00",
    "estimated_minutes": 120,
    "source": "api",
    "external_id": "crm-wo-19",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 ARBETSORDER_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 OGILTIG_OVERGANG422 ORSAK_KRAVS422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/work-orders/{id}/cancel" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"reason":"Kunden avbokade"}'
get/v1/work-orders/{id}/checklistchecklists:read

Hämta checklista

Checklistan för arbetsordern — samma mall som passkortet visar i appen — med varje punkts `key` och om den är avbockad. Kräver modulen Kvalitet.

Parametrar

  • idstig · krävs
Svarets schema (data)
FältTypBeskrivning
work_order_id *string
template_id *flera
template_name *string | null
response_id *flera
status *string | null
completed_at *flera
items *array
updated_at *flera

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "work_order_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "template_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "template_name": "Trappstädning",
    "response_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "status": "draft",
    "completed_at": null,
    "items": [
      {
        "key": "p0",
        "label": "Moppa trappor",
        "done": true
      },
      {
        "key": "p1",
        "label": "Torka räcken",
        "done": false
      }
    ],
    "updated_at": "2026-10-01T09:00:00+02:00"
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 ARBETSORDER_SAKNAS413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/work-orders/{id}/checklist" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
put/v1/work-orders/{id}/checklist/{item_id}checklists:write

Bocka checklistpunkt

Sätter en punkt (`item_id` = punktens `key`) genom `checklist_response_save`. `status: completed` slutför checklistan. Idempotent utan Idempotency-Key.

Parametrar

  • idstig · krävs
  • item_idstig · krävs

Kropp

FältTypBeskrivning
done *boolean
statusstring (draft, completed)
Svarets schema (data)
FältTypBeskrivning
work_order_id *string
template_id *flera
template_name *string | null
response_id *flera
status *string | null
completed_at *flera
items *array
updated_at *flera

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "work_order_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "template_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "template_name": "Trappstädning",
    "response_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "status": "draft",
    "completed_at": null,
    "items": [
      {
        "key": "p0",
        "label": "Moppa trappor",
        "done": true
      },
      {
        "key": "p1",
        "label": "Torka räcken",
        "done": false
      }
    ],
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 ARBETSORDER_SAKNAS404 PUNKT_SAKNAS413 PAYLOAD_FOR_STOR422 MALL_SAKNAS422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X PUT "https://api.fixra.se/v1/work-orders/{id}/checklist/{item_id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"done":true}'
post/v1/work-orders/{id}/statework_orders:write

Byt tillstånd

Byter kanoniskt tillstånd genom `work_order_set_state` — samma övergångsregler som appen. Orsak krävs för `cancelled`.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
state *string (unplanned, planned, in_progress, paused, completed, cancelled)
reasonstring
Svarets schema (data)
FältTypBeskrivning
id *string
work_order_no *string
customer_id *flera
site_id *flera
contact_id *flera
agreement_id *flera
title *string
description *string | null
status *stringKanoniskt tillstånd: unplanned, planned, in_progress, completed, cancelled …
status_label *string | null
priority *string | null
planned_start *flera
planned_end *flera
estimated_minutes *flera
source *string | null
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "work_order_no": "AO-2031",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "contact_id": null,
    "agreement_id": null,
    "title": "Fönsterputs",
    "description": "Alla fönster plan 1–3",
    "status": "paused",
    "status_label": null,
    "priority": "normal",
    "planned_start": "2026-10-05T08:00:00+02:00",
    "planned_end": "2026-10-05T10:00:00+02:00",
    "estimated_minutes": 120,
    "source": "api",
    "external_id": "crm-wo-19",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 ARBETSORDER_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 OGILTIG_OVERGANG422 ORSAK_KRAVS422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/work-orders/{id}/state" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"state":"paused","reason":"Väntar på kund"}'
post/v1/work-orders/{id}/reworkwork_orders:write

Skapa omstädning

Skapar en omstädningsorder för en avvikelse på arbetsordern genom `work_order_rework_create`. Svaret är den nya ordern.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
deviation_id *string
titlestring
occurrence_datestring
preferred_timestring
estimated_minutesinteger
external_idstringSlå upp på ert eget id (external_id).
Svarets schema (data)
FältTypBeskrivning
id *string
work_order_no *string
customer_id *flera
site_id *flera
contact_id *flera
agreement_id *flera
title *string
description *string | null
status *stringKanoniskt tillstånd: unplanned, planned, in_progress, completed, cancelled …
status_label *string | null
priority *string | null
planned_start *flera
planned_end *flera
estimated_minutes *flera
source *string | null
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "work_order_no": "AO-2031",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "contact_id": null,
    "agreement_id": null,
    "title": "Fönsterputs",
    "description": "Alla fönster plan 1–3",
    "status": "unplanned",
    "status_label": null,
    "priority": "normal",
    "planned_start": "2026-10-05T08:00:00+02:00",
    "planned_end": "2026-10-05T10:00:00+02:00",
    "estimated_minutes": 120,
    "source": "api",
    "external_id": "crm-wo-19",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 ARBETSORDER_SAKNAS404 AVVIKELSE_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 EXTERNT_ID_UPPTAGET422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/work-orders/{id}/rework" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"deviation_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e","occurrence_date":"2026-10-06"}'
post/v1/work-orders/adhocwork_orders:write

Skapa akutorder

Skapar en tillfällig order utanför avtal genom `work_order_adhoc_create`. Fast pris i öre skrivs men returneras aldrig.

Parametrar

  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
title *string
customer_id *string
site_idstring
descriptionstring
occurrence_datestring
preferred_timestring
estimated_minutesinteger
billing_typestring (fixed_price, time_material)
fixed_priceinteger
vat_ratenumber
tax_reductionstring (rut, none)
supervisor_idstring
external_idstringSlå upp på ert eget id (external_id).
Svarets schema (data)
FältTypBeskrivning
id *string
work_order_no *string
customer_id *flera
site_id *flera
contact_id *flera
agreement_id *flera
title *string
description *string | null
status *stringKanoniskt tillstånd: unplanned, planned, in_progress, completed, cancelled …
status_label *string | null
priority *string | null
planned_start *flera
planned_end *flera
estimated_minutes *flera
source *string | null
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "work_order_no": "AO-2031",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "contact_id": null,
    "agreement_id": null,
    "title": "Fönsterputs",
    "description": "Alla fönster plan 1–3",
    "status": "unplanned",
    "status_label": null,
    "priority": "normal",
    "planned_start": "2026-10-05T08:00:00+02:00",
    "planned_end": "2026-10-05T10:00:00+02:00",
    "estimated_minutes": 120,
    "source": "api",
    "external_id": "crm-wo-19",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 KUND_SAKNAS422 TITEL_SAKNAS422 EXTERNT_ID_UPPTAGET422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/work-orders/adhoc" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"title":"Akut sanering","customer_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e","billing_type":"time_material"}'
post/v1/work-orders/{id}/subcontractwork_orders:write

Sätt underentreprenör

Lägger ut ordern på en underentreprenör genom `work_order_subcontract_set`. Kostnad och pris i öre skrivs men returneras aldrig. `subcontractor_id: null` tar bort.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
subcontractor_id *flera
subcontractor_cost_oreinteger
subcontractor_price_oreinteger
Svarets schema (data)
FältTypBeskrivning
id *string
work_order_no *string
customer_id *flera
site_id *flera
contact_id *flera
agreement_id *flera
title *string
description *string | null
status *stringKanoniskt tillstånd: unplanned, planned, in_progress, completed, cancelled …
status_label *string | null
priority *string | null
planned_start *flera
planned_end *flera
estimated_minutes *flera
source *string | null
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "work_order_no": "AO-2031",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "contact_id": null,
    "agreement_id": null,
    "title": "Fönsterputs",
    "description": "Alla fönster plan 1–3",
    "status": "unplanned",
    "status_label": null,
    "priority": "normal",
    "planned_start": "2026-10-05T08:00:00+02:00",
    "planned_end": "2026-10-05T10:00:00+02:00",
    "estimated_minutes": 120,
    "source": "api",
    "external_id": "crm-wo-19",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 ARBETSORDER_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 UNDERENTREPRENOR_SAKNAS422 ARBETSORDER_FAKTURERAD422 OGILTIGT_PRIS422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/work-orders/{id}/subcontract" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"subcontractor_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e","subcontractor_cost_ore":150000}'
post/v1/work-orders/{id}/extra-timework_orders:write

Lägg till extra tid

Registrerar extra tid genom `extra_time_create`. `pending` = personalen ska svara, `ordered` = beordrad. Kräver att nyckelns skapare får attestera tid.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
user_id *string
minutes *integer
worked_on *string
notestring
shift_idstring
statusstring (pending, ordered)
Svarets schema (data)
FältTypBeskrivning
id *string
user_id *string
shift_id *flera
work_order_id *flera
worked_on *string
minutes *integer
note *string | null
status *string
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "user_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "shift_id": null,
    "work_order_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "worked_on": "2026-10-05",
    "minutes": 30,
    "note": "Extra fönster",
    "status": "pending",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 ARBETSORDER_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 OGILTIG_STATUS422 OGILTIGT_DATUM422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/work-orders/{id}/extra-time" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"user_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e","minutes":30,"worked_on":"2026-10-05","note":"Extra fönster"}'
post/v1/work-orders/{id}/projectprojects:write

Koppla till projekt

Kopplar arbetsordern till ett projekt och en fas genom `project_work_order_link`. `project_id: null` kopplar loss.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
project_id *flera
phase_idstring
Svarets schema (data)
FältTypBeskrivning
work_order_id *string
project_id *flera
phase_id *flera

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "work_order_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "project_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "phase_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 ARBETSORDER_SAKNAS404 PROJEKT_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 FAS_TILLHOR_ANNAT_PROJEKT422 PROJEKT_AVSLUTAT422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/work-orders/{id}/project" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"project_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e","phase_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e"}'

Pass

get/v1/shiftsschedule:read

Lista pass

Jobbpass i schemat mellan `from` och `to` (högst 31 dagar).

Parametrar

  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
  • fromfråga · krävs
  • tofråga · krävs
  • user_idfråga
  • work_order_idfråga
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "work_order_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "user_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "title": "Trappstädning",
        "starts_at": "2026-10-05T08:00:00+02:00",
        "ends_at": "2026-10-05T10:00:00+02:00",
        "is_tentative": false,
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 PERIOD_OGILTIG422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/shifts" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/shiftsschedule:write

Skapa pass

Tilldelar en person en arbetsorder genom `work_order_assign`. Dubbelbokning hindras av schemat.

Parametrar

  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
work_order_id *string
user_id *string
starts_atstring
ends_atstring
Svarets schema (data)
FältTypBeskrivning
id *string
work_order_id *flera
user_id *flera
title *string | null
starts_at *string
ends_at *string
is_tentative *boolean | null
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "work_order_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "user_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "title": "Trappstädning",
    "starts_at": "2026-10-05T08:00:00+02:00",
    "ends_at": "2026-10-05T10:00:00+02:00",
    "is_tentative": false,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 ARBETSORDER_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 MEDLEM_SAKNAS422 ARBETSORDER_AVSLUTAD422 OGILTIG_TID422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/shifts" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"work_order_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e","user_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e","starts_at":"2026-10-05T08:00:00+02:00","ends_at":"2026-10-05T10:00:00+02:00"}'
delete/v1/shifts/{id}schedule:write

Ta bort pass

Tar bort ett jobbpass genom `schedule_block_delete`. Låst period vägras.

Parametrar

  • idstig · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
deleted *boolean
dry_run *boolean
idempotent *boolean

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "deleted": true,
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 PASS_SAKNAS413 PAYLOAD_FOR_STOR422 RADERINGSNOTERING_KRAVS429 STRYPT429 RATELIMIT
curl -X DELETE "https://api.fixra.se/v1/shifts/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
get/v1/shifts/{id}schedule:read

Hämta pass

Ett jobbpass med raster, låsning och fordon.

Parametrar

  • idstig · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
work_order_id *flera
user_id *flera
title *string | null
starts_at *string
ends_at *string
is_tentative *boolean | null
created_at *string
updated_at *string
is_locked *boolean | null
vehicle_id *flera
break_minutes *flera
breaks *array

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "work_order_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "user_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "title": "Trappstädning",
    "starts_at": "2026-10-05T08:00:00+02:00",
    "ends_at": "2026-10-05T10:00:00+02:00",
    "is_tentative": false,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "is_locked": false,
    "vehicle_id": null,
    "break_minutes": 15,
    "breaks": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "shift_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "starts_at": "2026-10-05T09:00:00+02:00",
        "minutes": 15,
        "note": null,
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ]
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 PASS_SAKNAS413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/shifts/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
patch/v1/shifts/{id}schedule:write

Flytta pass

Flyttar passet till annan person och/eller starttid genom `schedule_move_block`. Dubbelbokning och tillgänglighet prövas som i appen.

Parametrar

  • idstig · krävs

Kropp

FältTypBeskrivning
user_idstring
starts_atstring
overrideboolean
override_reasonstring
Svarets schema (data)
FältTypBeskrivning
id *string
work_order_id *flera
user_id *flera
title *string | null
starts_at *string
ends_at *string
is_tentative *boolean | null
created_at *string
updated_at *string
is_locked *boolean | null
vehicle_id *flera
break_minutes *flera
breaks *array

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "work_order_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "user_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "title": "Trappstädning",
    "starts_at": "2026-10-05T08:00:00+02:00",
    "ends_at": "2026-10-05T10:00:00+02:00",
    "is_tentative": false,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "is_locked": false,
    "vehicle_id": null,
    "break_minutes": 15,
    "breaks": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "shift_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "starts_at": "2026-10-05T09:00:00+02:00",
        "minutes": 15,
        "note": null,
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 PASS_SAKNAS413 PAYLOAD_FOR_STOR422 DUBBELBOKNING422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X PATCH "https://api.fixra.se/v1/shifts/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"starts_at":"2026-10-05T09:00:00+02:00"}'
post/v1/shifts/{id}/flagsschedule:write

Lås eller markera preliminärt

Sätter `is_locked` och/eller `is_tentative` genom `schedule_block_set_flags`.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
is_lockedboolean
is_tentativeboolean
Svarets schema (data)
FältTypBeskrivning
id *string
work_order_id *flera
user_id *flera
title *string | null
starts_at *string
ends_at *string
is_tentative *boolean | null
created_at *string
updated_at *string
is_locked *boolean | null
vehicle_id *flera
break_minutes *flera
breaks *array

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "work_order_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "user_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "title": "Trappstädning",
    "starts_at": "2026-10-05T08:00:00+02:00",
    "ends_at": "2026-10-05T10:00:00+02:00",
    "is_tentative": false,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "is_locked": false,
    "vehicle_id": null,
    "break_minutes": 15,
    "breaks": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "shift_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "starts_at": "2026-10-05T09:00:00+02:00",
        "minutes": 15,
        "note": null,
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 PASS_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/shifts/{id}/flags" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"is_locked":true}'
post/v1/shifts/{id}/vehicleschedule:write

Koppla fordon

Kopplar ett fordon (eller `null`) genom `schedule_block_set_vehicle`. Krockar returneras i `conflicts`. Kräver modulen Fordon.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
vehicle_id *flera
Svarets schema (data)
FältTypBeskrivning
id *string
work_order_id *flera
user_id *flera
title *string | null
starts_at *string
ends_at *string
is_tentative *boolean | null
created_at *string
updated_at *string
is_locked *boolean | null
vehicle_id *flera
break_minutes *flera
breaks *array
conflicts *array

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "work_order_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "user_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "title": "Trappstädning",
    "starts_at": "2026-10-05T08:00:00+02:00",
    "ends_at": "2026-10-05T10:00:00+02:00",
    "is_tentative": false,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "is_locked": false,
    "vehicle_id": null,
    "break_minutes": 15,
    "breaks": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "shift_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "starts_at": "2026-10-05T09:00:00+02:00",
        "minutes": 15,
        "note": null,
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "conflicts": [],
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 PASS_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 FORDON_SAKNAS422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/shifts/{id}/vehicle" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"vehicle_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e"}'
post/v1/shifts/{id}/startschedule:write

Starta pass

Stämplar in genom `shift_start` (samma som Mina pass). Ger händelsen `shift.started`.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
work_order_id *flera
user_id *flera
title *string | null
starts_at *string
ends_at *string
is_tentative *boolean | null
created_at *string
updated_at *string
is_locked *boolean | null
vehicle_id *flera
break_minutes *flera
breaks *array
time_entry_id *string
started_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "work_order_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "user_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "title": "Trappstädning",
    "starts_at": "2026-10-05T08:00:00+02:00",
    "ends_at": "2026-10-05T10:00:00+02:00",
    "is_tentative": false,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "is_locked": false,
    "vehicle_id": null,
    "break_minutes": 15,
    "breaks": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "shift_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "starts_at": "2026-10-05T09:00:00+02:00",
        "minutes": 15,
        "note": null,
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "time_entry_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "started_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 PASS_SAKNAS409 ANNAT_PASS_PAGAR409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 PASS_PRELIMINART429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/shifts/{id}/start" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)"
post/v1/shifts/{id}/completeschedule:write

Slutför pass

Stämplar ut genom `shift_complete` och lämnar tiden till attest. Ger händelsen `shift.completed`.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
summarystring
Svarets schema (data)
FältTypBeskrivning
id *string
work_order_id *flera
user_id *flera
title *string | null
starts_at *string
ends_at *string
is_tentative *boolean | null
created_at *string
updated_at *string
is_locked *boolean | null
vehicle_id *flera
break_minutes *flera
breaks *array
time_entry_id *string
worked_minutes *integer
billable_minutes *integer

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "work_order_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "user_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "title": "Trappstädning",
    "starts_at": "2026-10-05T08:00:00+02:00",
    "ends_at": "2026-10-05T10:00:00+02:00",
    "is_tentative": false,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "is_locked": false,
    "vehicle_id": null,
    "break_minutes": 15,
    "breaks": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "shift_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "starts_at": "2026-10-05T09:00:00+02:00",
        "minutes": 15,
        "note": null,
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "time_entry_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "worked_minutes": 119,
    "billable_minutes": 119,
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 PASS_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/shifts/{id}/complete" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"summary":"Klart"}'
get/v1/shifts/{id}/breaksschedule:read

Lista raster

Rasterna på ett pass.

Parametrar

  • idstig · krävs
  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "shift_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "starts_at": "2026-10-05T09:00:00+02:00",
        "minutes": 15,
        "note": null,
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 PASS_SAKNAS413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/shifts/{id}/breaks" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/shifts/{id}/breaksschedule:write

Lägg till rast

Lägger en rast genom `schedule_block_break_save`.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
starts_at *string
minutes *integer
notestring
Svarets schema (data)
FältTypBeskrivning
id *string
shift_id *string
starts_at *string
minutes *integer
note *string | null
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "shift_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "starts_at": "2026-10-05T09:00:00+02:00",
    "minutes": 15,
    "note": null,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 PASS_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/shifts/{id}/breaks" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"starts_at":"2026-10-05T09:00:00+02:00","minutes":15}'
delete/v1/shifts/{id}/breaks/{break_id}schedule:write

Ta bort rast

Tar bort en rast genom `schedule_block_break_delete`.

Parametrar

  • idstig · krävs
  • break_idstig · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
deleted *boolean
dry_run *boolean
idempotent *boolean

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "deleted": true,
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 PASS_SAKNAS404 RAST_SAKNAS413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X DELETE "https://api.fixra.se/v1/shifts/{id}/breaks/{break_id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/shifts/bulk-rebookschedule:write

Massombokning

Bokar om en persons pass i en period genom `schedule_bulk_rebook`. `preview: true` visar utfallet utan att ändra.

Parametrar

  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
user_id *string
date_from *string
date_to *string
outcome *string (unstaff, replace, copy, delete)
target_user_idstring
weekdaysarray
week_paritystring (all, even, odd)
interval_weeksinteger
reasonstring
previewboolean
Svarets schema (data)
FältTypBeskrivning

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "affected": 4,
    "preview": true,
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 OGILTIG_PERIOD422 PERIOD_FOR_LANG422 OKANT_UTFALL422 ERSATTARE_SAKNAS422 MEDLEM_SAKNAS422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/shifts/bulk-rebook" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"user_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e","date_from":"2026-10-05","date_to":"2026-10-09","outcome":"replace","target_user_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e","preview":true}'

Avtal

get/v1/agreementsagreements:read

Lista avtal

Avtal med månadsbelopp i öre.

Parametrar

  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
  • customer_idfråga
  • statusfråga
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "agreement_number": "AV-12",
        "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "name": "Trappstädning varje vecka",
        "status": "active",
        "starts_on": "2026-01-01",
        "ends_on": null,
        "notice_months": 3,
        "billing_interval": "month",
        "monthly_amount": 450000,
        "currency": "SEK",
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/agreements" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
get/v1/agreements/{id}agreements:read

Hämta avtal

Ett avtal.

Parametrar

  • idstig · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
agreement_number *string | null
customer_id *string
site_id *flera
name *string | null
status *string
starts_on *string | null
ends_on *string | null
notice_months *flera
billing_interval *string | null
monthly_amount *fleraÖre.
currency *string
created_at *string
updated_at *string

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "agreement_number": "AV-12",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "name": "Trappstädning varje vecka",
    "status": "active",
    "starts_on": "2026-01-01",
    "ends_on": null,
    "notice_months": 3,
    "billing_interval": "month",
    "monthly_amount": 450000,
    "currency": "SEK",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00"
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 AVTAL_SAKNAS413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/agreements/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"

Offerter

get/v1/quotesquotes:read

Lista offerter

Offerter (bara läsning). Personnummer för RUT returneras aldrig.

Parametrar

  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
  • customer_idfråga
  • statusfråga
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "quote_number": "OF-88",
        "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "site_id": null,
        "title": "Kontorsstädning",
        "status": "sent",
        "version": 1,
        "valid_until": "2026-10-31",
        "sent_at": "2026-10-01T09:00:00+02:00",
        "accepted_at": null,
        "declined_at": null,
        "created_agreement_id": null,
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/quotes" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
get/v1/quotes/{id}quotes:read

Hämta offert

En offert.

Parametrar

  • idstig · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
quote_number *string | null
customer_id *flera
site_id *flera
title *string | null
status *string
version *flera
valid_until *string | null
sent_at *flera
accepted_at *flera
declined_at *flera
created_agreement_id *flera
created_at *string
updated_at *string

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "quote_number": "OF-88",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": null,
    "title": "Kontorsstädning",
    "status": "sent",
    "version": 1,
    "valid_until": "2026-10-31",
    "sent_at": "2026-10-01T09:00:00+02:00",
    "accepted_at": null,
    "declined_at": null,
    "created_agreement_id": null,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00"
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 OFFERT_SAKNAS413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/quotes/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"

Tjänster

get/v1/productsproducts:read

Lista tjänster

Tjänster och artiklar med försäljningspris i öre. Inköpspris returneras aldrig.

Parametrar

  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "article_number": "T-10",
        "name": "Fönsterputs",
        "description": null,
        "unit": "tim",
        "sales_price": 59500,
        "currency": "SEK",
        "vat_rate": 25,
        "tax_reduction": "rut",
        "estimated_minutes": 60,
        "is_active": true,
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/products" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/productsproducts:write

Skapa tjänst

Skapar en tjänst genom `product_save`.

Parametrar

  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
name *string
article_numberstring
descriptionstring
unitstring
sales_priceintegerÖre.
vat_ratenumber
tax_reductionstring (rut, none)
estimated_minutesinteger
Svarets schema (data)
FältTypBeskrivning
id *string
article_number *string | null
name *string
description *string | null
unit *string | null
sales_price *fleraÖre.
currency *string
vat_rate *number | null
tax_reduction *string | null
estimated_minutes *flera
is_active *boolean | null
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "article_number": "T-10",
    "name": "Fönsterputs",
    "description": null,
    "unit": "tim",
    "sales_price": 59500,
    "currency": "SEK",
    "vat_rate": 25,
    "tax_reduction": "rut",
    "estimated_minutes": 60,
    "is_active": true,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 NAMN_SAKNAS422 ROT_EJ_STOTT422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/products" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"name":"Fönsterputs","unit":"tim","sales_price":59500,"tax_reduction":"rut"}'
patch/v1/products/{id}products:write

Ändra tjänst

Ändrar bara fälten som skickas.

Parametrar

  • idstig · krävs

Kropp

FältTypBeskrivning
namestring
article_numberstring
descriptionstring
unitstring
sales_priceintegerÖre.
vat_ratenumber
tax_reductionstring (rut, none)
estimated_minutesinteger
is_activeboolean
Svarets schema (data)
FältTypBeskrivning
id *string
article_number *string | null
name *string
description *string | null
unit *string | null
sales_price *fleraÖre.
currency *string
vat_rate *number | null
tax_reduction *string | null
estimated_minutes *flera
is_active *boolean | null
created_at *string
updated_at *string

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "article_number": "T-10",
    "name": "Fönsterputs",
    "description": null,
    "unit": "tim",
    "sales_price": 59500,
    "currency": "SEK",
    "vat_rate": 25,
    "tax_reduction": "rut",
    "estimated_minutes": 60,
    "is_active": true,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 TJANST_SAKNAS413 PAYLOAD_FOR_STOR422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X PATCH "https://api.fixra.se/v1/products/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"sales_price":62500}'

Personal

get/v1/staffstaff:read

Lista personal

Förnamn, efternamn, roll, e-post, telefon och aktiv. Inget annat — aldrig lön, personnummer eller bankuppgifter.

Parametrar

  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "first_name": "Sara",
        "last_name": "Lind",
        "role": "Personal",
        "email": "sara@bolaget.se",
        "phone": "+46701112233",
        "active": true
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/staff" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"

Tid

get/v1/time-entriestime_entries:read

Lista tidrader

Rapporterad tid i minuter, utan timlön eller kostnadssats. Filtrera på datum (`from`/`to`) och `status`.

Parametrar

  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
  • fromfråga
  • tofråga
  • statusfråga
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "user_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "work_order_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "shift_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "worked_on": "2026-10-05",
        "started_at": "2026-10-05T08:02:00+02:00",
        "ended_at": "2026-10-05T10:01:00+02:00",
        "break_minutes": 0,
        "worked_minutes": 119,
        "billable_minutes": 120,
        "status": "approved",
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/time-entries" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"

Fakturaunderlag

get/v1/invoice-basisinvoice_basis:read

Lista fakturaunderlag

Fakturaunderlag med belopp i öre.

Parametrar

  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
  • customer_idfråga
  • statusfråga
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "basis_number": "FU-301",
        "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "agreement_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "period_start": "2026-09-01",
        "period_end": "2026-09-30",
        "status": "draft",
        "currency": "SEK",
        "net_amount": 450000,
        "vat_amount": 112500,
        "tax_reduction_amount": 0,
        "total_amount": 562500,
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/invoice-basis" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
get/v1/invoice-basis/{id}invoice_basis:read

Hämta fakturaunderlag

Ett underlag med dess frysta rader.

Parametrar

  • idstig · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
basis_number *string | null
customer_id *string
agreement_id *flera
period_start *string | null
period_end *string | null
status *string
currency *string
net_amount *flera
vat_amount *flera
tax_reduction_amount *flera
total_amount *flera
created_at *string
updated_at *string
lines *array

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "basis_number": "FU-301",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "agreement_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "period_start": "2026-09-01",
    "period_end": "2026-09-30",
    "status": "draft",
    "currency": "SEK",
    "net_amount": 450000,
    "vat_amount": 112500,
    "tax_reduction_amount": 0,
    "total_amount": 562500,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "lines": []
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 UNDERLAG_SAKNAS413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/invoice-basis/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"

Avvikelser

get/v1/deviationsdeviations:read

Lista avvikelser

Avvikelser, valfritt per plats eller status.

Parametrar

  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
  • statusfråga
  • site_idfråga
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "deviation_number": "AV-0042",
        "work_order_id": null,
        "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "title": "Trasig lampa i trapphus",
        "description": null,
        "severity": "normal",
        "status": "open",
        "resolved_at": null,
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/deviations" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/deviationsdeviations:write

Rapportera avvikelse

Rapporterar en avvikelse genom `deviation_report`. Kräver modulen Kvalitet.

Parametrar

  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
title *string
descriptionstring
site_idstring
work_order_idstring
severitystring (low, normal, high, critical)
reporter_namestring
Svarets schema (data)
FältTypBeskrivning
id *string
deviation_number *string | null
work_order_id *flera
site_id *flera
title *string
description *string | null
severity *string | null
status *string
resolved_at *flera
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "deviation_number": "AV-0042",
    "work_order_id": null,
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "title": "Trasig lampa i trapphus",
    "description": null,
    "severity": "normal",
    "status": "open",
    "resolved_at": null,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 BESKRIVNING_SAKNAS422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/deviations" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"title":"Trasig lampa i trapphus","site_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e"}'
get/v1/deviations/{id}deviations:read

Hämta avvikelse

En avvikelse.

Parametrar

  • idstig · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
deviation_number *string | null
work_order_id *flera
site_id *flera
title *string
description *string | null
severity *string | null
status *string
resolved_at *flera
created_at *string
updated_at *string

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "deviation_number": "AV-0042",
    "work_order_id": null,
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "title": "Trasig lampa i trapphus",
    "description": null,
    "severity": "normal",
    "status": "open",
    "resolved_at": null,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00"
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 AVVIKELSE_SAKNAS413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/deviations/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
patch/v1/deviations/{id}deviations:write

Ändra avvikelse

Ändrar genom `deviation_update`. Kräver att nyckelns skapare får hantera kvalitet.

Parametrar

  • idstig · krävs

Kropp

FältTypBeskrivning
statusstring (open, in_progress, resolved, closed)
severitystring (low, normal, high, critical)
assigned_toflera
due_atflera
type_idflera
subtype_idflera
root_causestring
immediate_actionstring
improvement_suggestionstring
resolution_notestring
is_customer_visibleboolean
work_order_idflera
Svarets schema (data)
FältTypBeskrivning
id *string
deviation_number *string | null
work_order_id *flera
site_id *flera
title *string
description *string | null
severity *string | null
status *string
resolved_at *flera
created_at *string
updated_at *string

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "deviation_number": "AV-0042",
    "work_order_id": null,
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "title": "Trasig lampa i trapphus",
    "description": null,
    "severity": "normal",
    "status": "resolved",
    "resolved_at": null,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 AVVIKELSE_SAKNAS413 PAYLOAD_FOR_STOR422 OGILTIG_STATUS422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X PATCH "https://api.fixra.se/v1/deviations/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"status":"resolved","resolution_note":"Lampan bytt"}'
get/v1/deviations/{id}/actionsdeviations:read

Lista åtgärder

Åtgärdsstegen på en avvikelse.

Parametrar

  • idstig · krävs
  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "deviation_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "step_no": 1,
        "supervisor_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "worker_id": null,
        "due_date": "2026-10-08",
        "proposed_action": "Byt lampa",
        "status": "planned",
        "done_date": null,
        "outcome_note": null,
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 AVVIKELSE_SAKNAS413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/deviations/{id}/actions" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/deviations/{id}/actionsdeviations:write

Lägg till åtgärd

Lägger ett åtgärdssteg genom `deviation_action_save`.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
proposed_action *string
supervisor_idstring
worker_idstring
due_datestring
statusstring (planned, in_progress, done, cancelled)
step_nointeger
outcome_notestring
Svarets schema (data)
FältTypBeskrivning
id *string
deviation_id *string
step_no *flera
supervisor_id *flera
worker_id *flera
due_date *string | null
proposed_action *string | null
status *string
done_date *string | null
outcome_note *string | null
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "deviation_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "step_no": 1,
    "supervisor_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "worker_id": null,
    "due_date": "2026-10-08",
    "proposed_action": "Byt lampa",
    "status": "planned",
    "done_date": null,
    "outcome_note": null,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 AVVIKELSE_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/deviations/{id}/actions" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"proposed_action":"Byt lampa","due_date":"2026-10-08"}'
delete/v1/deviations/{id}/actions/{action_id}deviations:write

Ta bort åtgärd

Tar bort ett åtgärdssteg genom `deviation_action_delete`.

Parametrar

  • idstig · krävs
  • action_idstig · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
deleted *boolean
dry_run *boolean
idempotent *boolean

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "deleted": true,
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 AVVIKELSE_SAKNAS404 STEG_SAKNAS413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X DELETE "https://api.fixra.se/v1/deviations/{id}/actions/{action_id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
get/v1/deviation-typesdeviations:read

Lista avvikelsetyper

Bolagets avvikelsetyper och undertyper (`parent_id`).

Parametrar

  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "parent_id": null,
        "label": "Missad städning",
        "sort_order": 1,
        "is_active": true,
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/deviation-types" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"

Förfrågningar

get/v1/requestsrequests:read

Lista förfrågningar

Kundförfrågningar. Interna anteckningar returneras aldrig.

Parametrar

  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
  • statusfråga
  • customer_idfråga
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "site_id": null,
        "contact_name": "Anna Berg",
        "contact_phone": "+46701234567",
        "contact_email": null,
        "channel": "api",
        "body": "Vill ha offert på storstädning i november.",
        "status": "new",
        "source": "api",
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/requests" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/requestsrequests:write

Skapa förfrågan

Skapar en kundförfrågan med kanal `api` genom `customer_request_create`.

Parametrar

  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
body *string
customer_idstring
site_idstring
contact_namestring
contact_phonestring
contact_emailstring
Svarets schema (data)
FältTypBeskrivning
id *string
customer_id *flera
site_id *flera
contact_name *string | null
contact_phone *string | null
contact_email *string | null
channel *string
body *string
status *string
source *string | null
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": null,
    "contact_name": "Anna Berg",
    "contact_phone": "+46701234567",
    "contact_email": null,
    "channel": "api",
    "body": "Vill ha offert på storstädning i november.",
    "status": "new",
    "source": "api",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 BESKRIVNING_SAKNAS422 KUND_SAKNAS422 OBJEKT_SAKNAS422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/requests" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"body":"Vill ha offert på storstädning i november.","customer_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e","contact_name":"Anna Berg"}'
get/v1/requests/{id}requests:read

Hämta förfrågan

En förfrågan. Interna anteckningar returneras aldrig.

Parametrar

  • idstig · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
customer_id *flera
site_id *flera
contact_name *string | null
contact_phone *string | null
contact_email *string | null
channel *string
body *string
status *string
source *string | null
created_at *string
updated_at *string

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": null,
    "contact_name": "Anna Berg",
    "contact_phone": "+46701234567",
    "contact_email": null,
    "channel": "api",
    "body": "Vill ha offert på storstädning i november.",
    "status": "new",
    "source": "api",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00"
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 FORFRAGAN_SAKNAS413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/requests/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
patch/v1/requests/{id}requests:write

Ändra förfrågan

Ändrar status, handläggare, kund, plats eller tagg genom `customer_request_update`.

Parametrar

  • idstig · krävs

Kropp

FältTypBeskrivning
statusstring
assigned_toflera
customer_idflera
site_idflera
tag_idflera
Svarets schema (data)
FältTypBeskrivning
id *string
customer_id *flera
site_id *flera
contact_name *string | null
contact_phone *string | null
contact_email *string | null
channel *string
body *string
status *string
source *string | null
created_at *string
updated_at *string

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": null,
    "contact_name": "Anna Berg",
    "contact_phone": "+46701234567",
    "contact_email": null,
    "channel": "api",
    "body": "Vill ha offert på storstädning i november.",
    "status": "handled",
    "source": "api",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 FORFRAGAN_SAKNAS413 PAYLOAD_FOR_STOR422 OGILTIG_STATUS422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X PATCH "https://api.fixra.se/v1/requests/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"status":"handled"}'

Webhooks

get/v1/webhook-endpointswebhooks:read

Lista webhookmottagare

Bolagets mottagare (högst 10, plus 100 på hooks.zapier.com). Hemligheten visas aldrig här. Varje leverans är en POST med kroppen `{ id, type, created_at, api_version, data: { object } }` där `object` har samma form som motsvarande GET (samma maskning). Huvudet `X-Fixra-Signature: t=<unix>,v1=<hex>` är HMAC-SHA256 med mottagarens hemlighet över `t + "." + rå kropp`; avvisa om `t` avviker mer än 5 minuter. Svara 2xx inom 10 s. Annars nytt försök efter 30 s med dubblering upp till 1 h; efter 10 misslyckade försök stängs mottagaren av (`GAV_UPP`) och bolagets administratörer får en notis. Svarar mottagaren 410 Gone tas den bort direkt, utan notis (så beter sig Zapier när en Zap stängs av). Tak: 10 mottagare per bolag, plus 100 separata för mottagare vars värd är exakt `hooks.zapier.com`. Händelser: customer.created, customer.updated, work_order.created, work_order.updated, work_order.status_changed, shift.created, shift.deleted, request.created, deviation.created, quote.accepted, invoice_basis.created, work_order.state_changed, shift.started, shift.completed, task.created, task.updated, ticket.created, ticket.updated, attachment.created samt test.

Parametrar

  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "url": "https://example.com/fixra/webhook",
        "description": "Affärssystemet",
        "events": [
          "customer.created",
          "work_order.status_changed"
        ],
        "active": true,
        "status": "active",
        "last_status": 200,
        "last_error": null,
        "last_delivery_at": "2026-10-01T09:00:00+02:00",
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/webhook-endpoints" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
Node.js
import crypto from "node:crypto";

// rawBody: exakt de mottagna byten (inte omserialiserad JSON).
export function verifyFixra(rawBody, header, secret, toleranceSec = 300) {
  const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
  const t = Number(parts.t);
  if (!t || Math.abs(Date.now() / 1000 - t) > toleranceSec) return false;
  const expected = crypto.createHmac("sha256", secret).update(`${t}.${rawBody}`).digest("hex");
  const a = Buffer.from(expected), b = Buffer.from(parts.v1 ?? "");
  return a.length === b.length && crypto.timingSafeEqual(a, b);
}
Python
import hmac, hashlib, time

def verify_fixra(raw_body: bytes, header: str, secret: str, tolerance: int = 300) -> bool:
    parts = dict(p.split("=", 1) for p in header.split(","))
    t = int(parts.get("t", "0"))
    if not t or abs(time.time() - t) > tolerance:
        return False
    expected = hmac.new(secret.encode(), f"{t}.".encode() + raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, parts.get("v1", ""))
PHP
<?php
function verify_fixra(string $rawBody, string $header, string $secret, int $tolerance = 300): bool {
    $parts = [];
    foreach (explode(',', $header) as $p) { [$k, $v] = array_pad(explode('=', $p, 2), 2, ''); $parts[$k] = $v; }
    $t = (int)($parts['t'] ?? 0);
    if (!$t || abs(time() - $t) > $tolerance) return false;
    $expected = hash_hmac('sha256', $t . '.' . $rawBody, $secret);
    return hash_equals($expected, $parts['v1'] ?? '');
}
// verify_fixra(file_get_contents('php://input'), $_SERVER['HTTP_X_FIXRA_SIGNATURE'], getenv('FIXRA_WHSEC'));
post/v1/webhook-endpointswebhooks:write

Skapa webhookmottagare

Skapar en mottagare. Svaret innehåller `secret` (whsec_…) en enda gång — spara den. Varje leverans är en POST med kroppen `{ id, type, created_at, api_version, data: { object } }` där `object` har samma form som motsvarande GET (samma maskning). Huvudet `X-Fixra-Signature: t=<unix>,v1=<hex>` är HMAC-SHA256 med mottagarens hemlighet över `t + "." + rå kropp`; avvisa om `t` avviker mer än 5 minuter. Svara 2xx inom 10 s. Annars nytt försök efter 30 s med dubblering upp till 1 h; efter 10 misslyckade försök stängs mottagaren av (`GAV_UPP`) och bolagets administratörer får en notis. Svarar mottagaren 410 Gone tas den bort direkt, utan notis (så beter sig Zapier när en Zap stängs av). Tak: 10 mottagare per bolag, plus 100 separata för mottagare vars värd är exakt `hooks.zapier.com`. Händelser: customer.created, customer.updated, work_order.created, work_order.updated, work_order.status_changed, shift.created, shift.deleted, request.created, deviation.created, quote.accepted, invoice_basis.created, work_order.state_changed, shift.started, shift.completed, task.created, task.updated, ticket.created, ticket.updated, attachment.created samt test.

Parametrar

  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
url *stringBara https. Interna adresser vägras.
events *array
descriptionstring
Svarets schema (data)
FältTypBeskrivning
id *string
url *string
description *string | null
events *array
active *boolean
status *string (active, inactive, GAV_UPP)
last_status *flera
last_error *string | null
last_delivery_at *flera
created_at *string
updated_at *string
secret *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "url": "https://example.com/fixra/webhook",
    "description": "Affärssystemet",
    "events": [
      "customer.created",
      "work_order.status_changed"
    ],
    "active": true,
    "status": "active",
    "last_status": 200,
    "last_error": null,
    "last_delivery_at": "2026-10-01T09:00:00+02:00",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "secret": "whsec_AbCdEfGhIjKlMnOpQrStUvWxYz012345",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 WEBHOOK_URL_OGILTIG422 HANDELSER_SAKNAS422 HANDELSE_OKAND422 WEBHOOK_GRANS_NADD422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/webhook-endpoints" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com/fixra/webhook","events":["customer.created","work_order.status_changed"]}'
Node.js
import crypto from "node:crypto";

// rawBody: exakt de mottagna byten (inte omserialiserad JSON).
export function verifyFixra(rawBody, header, secret, toleranceSec = 300) {
  const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
  const t = Number(parts.t);
  if (!t || Math.abs(Date.now() / 1000 - t) > toleranceSec) return false;
  const expected = crypto.createHmac("sha256", secret).update(`${t}.${rawBody}`).digest("hex");
  const a = Buffer.from(expected), b = Buffer.from(parts.v1 ?? "");
  return a.length === b.length && crypto.timingSafeEqual(a, b);
}
Python
import hmac, hashlib, time

def verify_fixra(raw_body: bytes, header: str, secret: str, tolerance: int = 300) -> bool:
    parts = dict(p.split("=", 1) for p in header.split(","))
    t = int(parts.get("t", "0"))
    if not t or abs(time.time() - t) > tolerance:
        return False
    expected = hmac.new(secret.encode(), f"{t}.".encode() + raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, parts.get("v1", ""))
PHP
<?php
function verify_fixra(string $rawBody, string $header, string $secret, int $tolerance = 300): bool {
    $parts = [];
    foreach (explode(',', $header) as $p) { [$k, $v] = array_pad(explode('=', $p, 2), 2, ''); $parts[$k] = $v; }
    $t = (int)($parts['t'] ?? 0);
    if (!$t || abs(time() - $t) > $tolerance) return false;
    $expected = hash_hmac('sha256', $t . '.' . $rawBody, $secret);
    return hash_equals($expected, $parts['v1'] ?? '');
}
// verify_fixra(file_get_contents('php://input'), $_SERVER['HTTP_X_FIXRA_SIGNATURE'], getenv('FIXRA_WHSEC'));
patch/v1/webhook-endpoints/{id}webhooks:write

Ändra webhookmottagare

Ändrar url, händelser, beskrivning eller aktiv. `active: true` återaktiverar en mottagare som gav upp.

Parametrar

  • idstig · krävs

Kropp

FältTypBeskrivning
urlstring
eventsarray
descriptionstring
activebooleantrue slår på igen efter GAV_UPP.
Svarets schema (data)
FältTypBeskrivning
id *string
url *string
description *string | null
events *array
active *boolean
status *string (active, inactive, GAV_UPP)
last_status *flera
last_error *string | null
last_delivery_at *flera
created_at *string
updated_at *string

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "url": "https://example.com/fixra/webhook",
    "description": "Affärssystemet",
    "events": [
      "customer.created",
      "work_order.status_changed"
    ],
    "active": true,
    "status": "active",
    "last_status": 200,
    "last_error": null,
    "last_delivery_at": "2026-10-01T09:00:00+02:00",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 WEBHOOK_SAKNAS413 PAYLOAD_FOR_STOR422 WEBHOOK_URL_OGILTIG422 HANDELSER_SAKNAS422 HANDELSE_OKAND422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X PATCH "https://api.fixra.se/v1/webhook-endpoints/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"active":true}'
delete/v1/webhook-endpoints/{id}webhooks:write

Ta bort webhookmottagare

Tar bort mottagaren, dess hemlighet och leveranslogg.

Parametrar

  • idstig · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
deleted *boolean

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "deleted": true,
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 WEBHOOK_SAKNAS413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X DELETE "https://api.fixra.se/v1/webhook-endpoints/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/webhook-endpoints/{id}/testwebhooks:write

Skicka testhändelse

Köar en händelse av typen `test` till just denna mottagare, signerad som alla andra. Verifieringskod i curl, JavaScript, Python och PHP.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs
Svarets schema (data)
FältTypBeskrivning
event_id *string
delivery_id *string
status *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "event_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "delivery_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "status": "pending",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 WEBHOOK_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 WEBHOOK_INAKTIV429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/webhook-endpoints/{id}/test" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)"
Node.js
import crypto from "node:crypto";

// rawBody: exakt de mottagna byten (inte omserialiserad JSON).
export function verifyFixra(rawBody, header, secret, toleranceSec = 300) {
  const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
  const t = Number(parts.t);
  if (!t || Math.abs(Date.now() / 1000 - t) > toleranceSec) return false;
  const expected = crypto.createHmac("sha256", secret).update(`${t}.${rawBody}`).digest("hex");
  const a = Buffer.from(expected), b = Buffer.from(parts.v1 ?? "");
  return a.length === b.length && crypto.timingSafeEqual(a, b);
}
Python
import hmac, hashlib, time

def verify_fixra(raw_body: bytes, header: str, secret: str, tolerance: int = 300) -> bool:
    parts = dict(p.split("=", 1) for p in header.split(","))
    t = int(parts.get("t", "0"))
    if not t or abs(time.time() - t) > tolerance:
        return False
    expected = hmac.new(secret.encode(), f"{t}.".encode() + raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, parts.get("v1", ""))
PHP
<?php
function verify_fixra(string $rawBody, string $header, string $secret, int $tolerance = 300): bool {
    $parts = [];
    foreach (explode(',', $header) as $p) { [$k, $v] = array_pad(explode('=', $p, 2), 2, ''); $parts[$k] = $v; }
    $t = (int)($parts['t'] ?? 0);
    if (!$t || abs(time() - $t) > $tolerance) return false;
    $expected = hash_hmac('sha256', $t . '.' . $rawBody, $secret);
    return hash_equals($expected, $parts['v1'] ?? '');
}
// verify_fixra(file_get_contents('php://input'), $_SERVER['HTTP_X_FIXRA_SIGNATURE'], getenv('FIXRA_WHSEC'));

Bilagor

get/v1/attachmentsattachments:read

Lista bilagor

Bilagor på ett objekt. `updated_since` filtrerar på skapandetid (bilagor ändras inte).

Parametrar

  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
  • object_typefråga · krävs
  • object_idfråga · krävs
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "object_type": "work_order",
        "object_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "role": "after",
        "is_customer_visible": false,
        "file_name": "efter.jpg",
        "mime_type": "image/jpeg",
        "size_bytes": 482113,
        "created_at": "2026-10-01T09:00:00+02:00",
        "download_url": "https://app.fixra.se/api/public/fil/3f1c2b7e-8d4a-4c1e-9b2f-6a7d5e4c3b21?exp=1790000000&sig=9c1e…",
        "download_expires_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 OBJEKT_SAKNAS_ELLER_OGILTIGT413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/attachments" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/attachmentsattachments:write

Registrera bilaga

Steg 2 av 2. Kopplar den uppladdade filen till objektet genom `attachment_register`. Storlek och filtyp kontrolleras mot den faktiska filen.

Parametrar

  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
upload_id *string
rolestring (before, after, damage, document, drawing, receipt, image)
is_customer_visibleboolean
Svarets schema (data)
FältTypBeskrivning
id *string
object_type *string
object_id *string
role *string
is_customer_visible *boolean
file_name *string | null
mime_type *string | null
size_bytes *flera
created_at *string
download_url *fleraSignerad nedladdningslänk, giltig 60 minuter. Skapas vid varje läsning och leverans, lagras aldrig. null om filen saknas.
download_expires_at *flera

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "object_type": "work_order",
    "object_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "role": "after",
    "is_customer_visible": false,
    "file_name": "efter.jpg",
    "mime_type": "image/jpeg",
    "size_bytes": 482113,
    "created_at": "2026-10-01T09:00:00+02:00",
    "download_url": "https://app.fixra.se/api/public/fil/3f1c2b7e-8d4a-4c1e-9b2f-6a7d5e4c3b21?exp=1790000000&sig=9c1e…",
    "download_expires_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 UPPLADDNING_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 UPPLADDNING_UTGANGEN422 UPPLADDNING_ANVAND422 FIL_SAKNAS422 FIL_FOR_STOR422 FILTYP_EJ_TILLATEN422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/attachments" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"upload_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e","role":"after"}'
post/v1/attachments/upload-urlattachments:write

Hämta uppladdnings-URL

Steg 1 av 2. Ger en signerad URL för `PUT` av filen (max 25 MB, tillåtna filtyper: JPEG, PNG, WebP, HEIC, PDF, text, CSV, Word, Excel). Registrera med `POST /v1/attachments` inom 10 minuter. Testnycklar får ingen URL.

Parametrar

  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
object_type *string (customer, site, agreement, work_order, deviation, quote, schedule_block, expense)
object_id *string
file_name *string
mime_type *string
size_bytes *integer
Svarets schema (data)
FältTypBeskrivning
upload_id *string
bucket *string
storage_path *string
mime_type *string
max_bytes *integer
expires_at *string
upload_url *string | null

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "upload_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "bucket": "fixra-filer",
    "storage_path": "…/efter.jpg",
    "mime_type": "image/jpeg",
    "max_bytes": 482113,
    "expires_at": "2026-10-01T09:00:00+02:00",
    "upload_url": "https://…",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 OBJEKT_SAKNAS_ELLER_OGILTIGT409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 FILTYP_EJ_TILLATEN422 FIL_FOR_STOR422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/attachments/upload-url" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"object_type":"work_order","object_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e","file_name":"efter.jpg","mime_type":"image/jpeg","size_bytes":482113}'
patch/v1/attachments/{id}attachments:write

Visa för kund

Sätter om bilagan syns i kundportalen genom `attachment_set_customer_visible`.

Parametrar

  • idstig · krävs

Kropp

FältTypBeskrivning
is_customer_visible *boolean
Svarets schema (data)
FältTypBeskrivning
id *string
object_type *string
object_id *string
role *string
is_customer_visible *boolean
file_name *string | null
mime_type *string | null
size_bytes *flera
created_at *string
download_url *fleraSignerad nedladdningslänk, giltig 60 minuter. Skapas vid varje läsning och leverans, lagras aldrig. null om filen saknas.
download_expires_at *flera

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "object_type": "work_order",
    "object_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "role": "after",
    "is_customer_visible": true,
    "file_name": "efter.jpg",
    "mime_type": "image/jpeg",
    "size_bytes": 482113,
    "created_at": "2026-10-01T09:00:00+02:00",
    "download_url": "https://app.fixra.se/api/public/fil/3f1c2b7e-8d4a-4c1e-9b2f-6a7d5e4c3b21?exp=1790000000&sig=9c1e…",
    "download_expires_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 BILAGA_SAKNAS413 PAYLOAD_FOR_STOR422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X PATCH "https://api.fixra.se/v1/attachments/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"is_customer_visible":true}'

Uppgifter

get/v1/taskstasks:read

Lista uppgifter

Uppgifter. Kräver modulen Uppgifter.

Parametrar

  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
  • statusfråga
  • assignee_idfråga
  • customer_idfråga
  • work_order_idfråga
  • external_idfråga— Slå upp på ert eget id (external_id).
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "title": "Ring kunden om nyckel",
        "description": null,
        "assignee_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "due_on": "2026-10-06",
        "status": "open",
        "priority": "normal",
        "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "site_id": null,
        "work_order_id": null,
        "agreement_id": null,
        "completed_at": null,
        "external_id": "crm-t-4",
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/tasks" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/taskstasks:write

Skapa uppgift

Skapar en uppgift genom `task_save`.

Parametrar

  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
title *string
descriptionstring
assignee_idstring
due_onstring
prioritystring (low, normal, high)
customer_idstring
site_idstring
work_order_idstring
agreement_idstring
external_idstring
Svarets schema (data)
FältTypBeskrivning
id *string
title *string
description *string | null
assignee_id *flera
due_on *string | null
status *string
priority *string
customer_id *flera
site_id *flera
work_order_id *flera
agreement_id *flera
completed_at *flera
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "title": "Ring kunden om nyckel",
    "description": null,
    "assignee_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "due_on": "2026-10-06",
    "status": "open",
    "priority": "normal",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": null,
    "work_order_id": null,
    "agreement_id": null,
    "completed_at": null,
    "external_id": "crm-t-4",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 RUBRIK_SAKNAS422 ANSVARIG_EJ_MEDLEM422 EXTERNT_ID_UPPTAGET422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/tasks" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"title":"Ring kunden om nyckel","assignee_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e","due_on":"2026-10-06","external_id":"crm-t-4"}'
get/v1/tasks/{id}tasks:read

Hämta uppgift

En uppgift.

Parametrar

  • idstig · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
title *string
description *string | null
assignee_id *flera
due_on *string | null
status *string
priority *string
customer_id *flera
site_id *flera
work_order_id *flera
agreement_id *flera
completed_at *flera
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "title": "Ring kunden om nyckel",
    "description": null,
    "assignee_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "due_on": "2026-10-06",
    "status": "open",
    "priority": "normal",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": null,
    "work_order_id": null,
    "agreement_id": null,
    "completed_at": null,
    "external_id": "crm-t-4",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00"
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 UPPGIFT_SAKNAS413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/tasks/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
patch/v1/tasks/{id}tasks:write

Ändra uppgift

Ändrar bara fälten som skickas, genom `task_save`.

Parametrar

  • idstig · krävs

Kropp

FältTypBeskrivning
titlestring
descriptionflera
assignee_idflera
due_onflera
prioritystring (low, normal, high)
customer_idflera
site_idflera
work_order_idflera
agreement_idflera
external_idstring
Svarets schema (data)
FältTypBeskrivning
id *string
title *string
description *string | null
assignee_id *flera
due_on *string | null
status *string
priority *string
customer_id *flera
site_id *flera
work_order_id *flera
agreement_id *flera
completed_at *flera
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "title": "Ring kunden om nyckel",
    "description": null,
    "assignee_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "due_on": "2026-10-06",
    "status": "open",
    "priority": "normal",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": null,
    "work_order_id": null,
    "agreement_id": null,
    "completed_at": null,
    "external_id": "crm-t-4",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 UPPGIFT_SAKNAS413 PAYLOAD_FOR_STOR422 EXTERNT_ID_UPPTAGET422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X PATCH "https://api.fixra.se/v1/tasks/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"due_on":"2026-10-07"}'
post/v1/tasks/{id}/statustasks:write

Byt status

Sätter status genom `task_set_status`.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
status *string (open, done, cancelled)
Svarets schema (data)
FältTypBeskrivning
id *string
title *string
description *string | null
assignee_id *flera
due_on *string | null
status *string
priority *string
customer_id *flera
site_id *flera
work_order_id *flera
agreement_id *flera
completed_at *flera
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "title": "Ring kunden om nyckel",
    "description": null,
    "assignee_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "due_on": "2026-10-06",
    "status": "done",
    "priority": "normal",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": null,
    "work_order_id": null,
    "agreement_id": null,
    "completed_at": null,
    "external_id": "crm-t-4",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 UPPGIFT_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/tasks/{id}/status" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"status":"done"}'

Ärenden

get/v1/ticketstickets:read

Lista ärenden

Ärenden utan meddelandetext. Sammanslagna ärenden visas inte. Kräver modulen Ärenden.

Parametrar

  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
  • statusfråga
  • priorityfråga
  • assigned_tofråga
  • customer_idfråga
  • external_idfråga— Slå upp på ert eget id (external_id).
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "number": 1042,
        "subject": "Trasig port",
        "status": "open",
        "priority": "normal",
        "category": null,
        "source": "manual",
        "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "contact_id": null,
        "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "assigned_to": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "due_at": null,
        "first_response_at": null,
        "closed_at": null,
        "work_order_id": null,
        "last_message_at": "2026-10-01T09:00:00+02:00",
        "external_id": null,
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/tickets" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/ticketstickets:write

Skapa ärende

Skapar ett manuellt ärende genom `ticket_create` (samma nummerserie och SLA som appen).

Parametrar

  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
subject *string
bodystringSparas som intern anteckning, eller skickas som mejl med notify_customer.
customer_idstring
contact_idstring
site_idstring
prioritystring (low, normal, high, urgent)
categorystring
mailbox_idstring
assigned_tostring
due_atstring
notify_customerboolean
external_idstring
Svarets schema (data)
FältTypBeskrivning
id *string
number *integer
subject *string
status *string
priority *string
category *string | null
source *string | null
customer_id *flera
contact_id *flera
site_id *flera
assigned_to *flera
due_at *flera
first_response_at *flera
closed_at *flera
work_order_id *flera
last_message_at *flera
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "number": 1042,
    "subject": "Trasig port",
    "status": "open",
    "priority": "normal",
    "category": null,
    "source": "manual",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "contact_id": null,
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "assigned_to": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "due_at": null,
    "first_response_at": null,
    "closed_at": null,
    "work_order_id": null,
    "last_message_at": "2026-10-01T09:00:00+02:00",
    "external_id": null,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 AMNE_SAKNAS422 ANVANDARE_OGILTIG422 EXTERNT_ID_UPPTAGET422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/tickets" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"subject":"Trasig port","customer_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e","body":"Porten går inte att låsa."}'
get/v1/tickets/{id}tickets:read

Hämta ärende

Ett ärende. Interna anteckningar och meddelanden returneras inte.

Parametrar

  • idstig · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
number *integer
subject *string
status *string
priority *string
category *string | null
source *string | null
customer_id *flera
contact_id *flera
site_id *flera
assigned_to *flera
due_at *flera
first_response_at *flera
closed_at *flera
work_order_id *flera
last_message_at *flera
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "number": 1042,
    "subject": "Trasig port",
    "status": "open",
    "priority": "normal",
    "category": null,
    "source": "manual",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "contact_id": null,
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "assigned_to": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "due_at": null,
    "first_response_at": null,
    "closed_at": null,
    "work_order_id": null,
    "last_message_at": "2026-10-01T09:00:00+02:00",
    "external_id": null,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00"
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 ARENDE_SAKNAS413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/tickets/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/tickets/{id}/assigntickets:write

Tilldela ärende

Tilldelar genom `ticket_assign`. `user_id: null` tar bort tilldelningen.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
user_id *flera
Svarets schema (data)
FältTypBeskrivning
id *string
number *integer
subject *string
status *string
priority *string
category *string | null
source *string | null
customer_id *flera
contact_id *flera
site_id *flera
assigned_to *flera
due_at *flera
first_response_at *flera
closed_at *flera
work_order_id *flera
last_message_at *flera
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "number": 1042,
    "subject": "Trasig port",
    "status": "open",
    "priority": "normal",
    "category": null,
    "source": "manual",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "contact_id": null,
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "assigned_to": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "due_at": null,
    "first_response_at": null,
    "closed_at": null,
    "work_order_id": null,
    "last_message_at": "2026-10-01T09:00:00+02:00",
    "external_id": null,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 ARENDE_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 HANDLAGGARE_SAKNAR_BEHORIGHET422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/tickets/{id}/assign" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"user_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e"}'
post/v1/tickets/{id}/statustickets:write

Byt status

Sätter status genom `ticket_set_status`.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
status *string (new, open, pending, closed)
Svarets schema (data)
FältTypBeskrivning
id *string
number *integer
subject *string
status *string
priority *string
category *string | null
source *string | null
customer_id *flera
contact_id *flera
site_id *flera
assigned_to *flera
due_at *flera
first_response_at *flera
closed_at *flera
work_order_id *flera
last_message_at *flera
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "number": 1042,
    "subject": "Trasig port",
    "status": "closed",
    "priority": "normal",
    "category": null,
    "source": "manual",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "contact_id": null,
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "assigned_to": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "due_at": null,
    "first_response_at": null,
    "closed_at": null,
    "work_order_id": null,
    "last_message_at": "2026-10-01T09:00:00+02:00",
    "external_id": null,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 ARENDE_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/tickets/{id}/status" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"status":"closed"}'
post/v1/tickets/{id}/prioritytickets:write

Byt prioritet

Sätter prioritet genom `ticket_set_priority`.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
priority *string (low, normal, high, urgent)
Svarets schema (data)
FältTypBeskrivning
id *string
number *integer
subject *string
status *string
priority *string
category *string | null
source *string | null
customer_id *flera
contact_id *flera
site_id *flera
assigned_to *flera
due_at *flera
first_response_at *flera
closed_at *flera
work_order_id *flera
last_message_at *flera
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "number": 1042,
    "subject": "Trasig port",
    "status": "open",
    "priority": "high",
    "category": null,
    "source": "manual",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "contact_id": null,
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "assigned_to": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "due_at": null,
    "first_response_at": null,
    "closed_at": null,
    "work_order_id": null,
    "last_message_at": "2026-10-01T09:00:00+02:00",
    "external_id": null,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 ARENDE_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/tickets/{id}/priority" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"priority":"high"}'
post/v1/tickets/{id}/work-ordertickets:write

Skapa arbetsorder från ärende

Skapar en arbetsorder från ärendet genom `ticket_create_work_order`. Svaret är ärendet med `work_order_id`.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
titlestring
descriptionstring
site_idstring
product_idstring
occurrence_datestring
preferred_timestring
estimated_minutesinteger
billing_typestring (fixed_price, time_material)
fixed_priceinteger
non_billableboolean
assignee_idsarray
close_on_doneboolean
confirm_to_customerboolean
confirm_textstring
Svarets schema (data)
FältTypBeskrivning
id *string
number *integer
subject *string
status *string
priority *string
category *string | null
source *string | null
customer_id *flera
contact_id *flera
site_id *flera
assigned_to *flera
due_at *flera
first_response_at *flera
closed_at *flera
work_order_id *flera
last_message_at *flera
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "number": 1042,
    "subject": "Trasig port",
    "status": "open",
    "priority": "normal",
    "category": null,
    "source": "manual",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "contact_id": null,
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "assigned_to": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "due_at": null,
    "first_response_at": null,
    "closed_at": null,
    "work_order_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "last_message_at": "2026-10-01T09:00:00+02:00",
    "external_id": null,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 ARENDE_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 ARBETSORDER_FINNS422 KUND_SAKNAS422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/tickets/{id}/work-order" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"title":"Laga port","occurrence_date":"2026-10-06"}'

Material

get/v1/materialsmaterials:read

Lista artiklar

Materialregistret. Inköpspriset returneras aldrig. Kräver modulen Material.

Parametrar

  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
  • activefråga
  • external_idfråga— Slå upp på ert eget id (external_id).
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "name": "Allrengöring 5 l",
        "unit": "st",
        "sales_price_ore": 24900,
        "is_rebillable": true,
        "is_active": true,
        "external_id": "ART-77",
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/materials" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/materialsmaterials:write

Skapa artikel

Skapar en artikel genom `material_item_save`. `purchase_price_ore` sparas men returneras aldrig.

Parametrar

  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
name *string
unitstring
purchase_price_oreintegerSkrivs men returneras aldrig.
sales_price_oreinteger
is_rebillableboolean
notestring
external_idstringSlå upp på ert eget id (external_id).
Svarets schema (data)
FältTypBeskrivning
id *string
name *string
unit *string | null
sales_price_ore *flera
is_rebillable *boolean
is_active *boolean
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "name": "Allrengöring 5 l",
    "unit": "st",
    "sales_price_ore": 24900,
    "is_rebillable": true,
    "is_active": true,
    "external_id": "ART-77",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 ARTIKEL_FINNS_REDAN422 OGILTIGT_PRIS422 EXTERNT_ID_UPPTAGET422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/materials" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"name":"Allrengöring 5 l","unit":"st","purchase_price_ore":12000,"sales_price_ore":24900,"external_id":"ART-77"}'
patch/v1/materials/{id}materials:write

Ändra artikel

Ändrar skickade fält; övriga behåller sitt värde.

Parametrar

  • idstig · krävs

Kropp

FältTypBeskrivning
namestring
unitstring
purchase_price_oreintegerSkrivs men returneras aldrig.
sales_price_oreinteger
is_rebillableboolean
notestring
external_idstringSlå upp på ert eget id (external_id).
is_activeboolean
Svarets schema (data)
FältTypBeskrivning
id *string
name *string
unit *string | null
sales_price_ore *flera
is_rebillable *boolean
is_active *boolean
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "name": "Allrengöring 5 l",
    "unit": "st",
    "sales_price_ore": 25900,
    "is_rebillable": true,
    "is_active": true,
    "external_id": "ART-77",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 ARTIKEL_SAKNAS413 PAYLOAD_FOR_STOR422 OGILTIGT_PRIS422 EXTERNT_ID_UPPTAGET422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X PATCH "https://api.fixra.se/v1/materials/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"sales_price_ore":25900}'
get/v1/material-usagematerials:read

Lista materialåtgång

Registrerad åtgång per arbetsorder eller plats. Inköpspriset returneras aldrig.

Parametrar

  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
  • work_order_idfråga
  • site_idfråga
  • material_item_idfråga
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "material_item_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "work_order_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "site_id": null,
        "used_on": "2026-10-05",
        "quantity": 2,
        "unit": "st",
        "sales_price_ore": 24900,
        "is_rebillable": true,
        "registered_by": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "invoiced": false,
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/material-usage" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/material-usagematerials:write

Registrera materialåtgång

Registrerar åtgång genom `material_usage_register`. Priset fryses från artikeln.

Parametrar

  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
material_item_id *string
quantity *number
work_order_idstring
site_idstring
used_onstring
notestring
Svarets schema (data)
FältTypBeskrivning
id *string
material_item_id *string
work_order_id *flera
site_id *flera
used_on *string
quantity *number
unit *string | null
sales_price_ore *flera
is_rebillable *boolean
registered_by *flera
invoiced *boolean
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "material_item_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "work_order_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": null,
    "used_on": "2026-10-05",
    "quantity": 2,
    "unit": "st",
    "sales_price_ore": 24900,
    "is_rebillable": true,
    "registered_by": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "invoiced": false,
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 ARTIKEL_SAKNAS404 ARBETSORDER_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 ARTIKEL_INAKTIV422 OBJEKT_ELLER_ARBETSORDER_KRAVS422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/material-usage" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"material_item_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e","quantity":2,"work_order_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e"}'

Leverantörer

get/v1/supplierssuppliers:read

Lista leverantörer

Leverantörsregistret. Kräver modulen Inköp.

Parametrar

  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
  • activefråga
  • external_idfråga— Slå upp på ert eget id (external_id).
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "name": "Grossisten AB",
        "org_number": "556677-8899",
        "contact_name": "Per Ek",
        "email": "order@grossisten.se",
        "phone": "+46812345678",
        "payment_terms_days": 30,
        "is_active": true,
        "external_id": "LEV-4",
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/suppliers" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/supplierssuppliers:write

Skapa leverantör

Skapar en leverantör genom `supplier_save`.

Parametrar

  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
name *string
org_numberstring
contact_namestring
emailstring
phonestring
payment_terms_daysinteger
notestring
external_idstringSlå upp på ert eget id (external_id).
Svarets schema (data)
FältTypBeskrivning
id *string
name *string
org_number *string | null
contact_name *string | null
email *string | null
phone *string | null
payment_terms_days *flera
is_active *boolean
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "name": "Grossisten AB",
    "org_number": "556677-8899",
    "contact_name": "Per Ek",
    "email": "order@grossisten.se",
    "phone": "+46812345678",
    "payment_terms_days": 30,
    "is_active": true,
    "external_id": "LEV-4",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 LEVERANTOR_FINNS_REDAN422 NAMN_SAKNAS422 EXTERNT_ID_UPPTAGET422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/suppliers" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"name":"Grossisten AB","email":"order@grossisten.se","external_id":"LEV-4"}'
patch/v1/suppliers/{id}suppliers:write

Ändra leverantör

Ändrar skickade fält genom `supplier_save`.

Parametrar

  • idstig · krävs

Kropp

FältTypBeskrivning
namestring
org_numberstring
contact_namestring
emailstring
phonestring
payment_terms_daysinteger
notestring
external_idstringSlå upp på ert eget id (external_id).
is_activeboolean
Svarets schema (data)
FältTypBeskrivning
id *string
name *string
org_number *string | null
contact_name *string | null
email *string | null
phone *string | null
payment_terms_days *flera
is_active *boolean
external_id *string | null
created_at *string
updated_at *string

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "name": "Grossisten AB",
    "org_number": "556677-8899",
    "contact_name": "Per Ek",
    "email": "order@grossisten.se",
    "phone": "+46812345678",
    "payment_terms_days": 20,
    "is_active": true,
    "external_id": "LEV-4",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 LEVERANTOR_SAKNAS413 PAYLOAD_FOR_STOR422 EXTERNT_ID_UPPTAGET422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X PATCH "https://api.fixra.se/v1/suppliers/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"payment_terms_days":20}'

Inköpsorder

get/v1/purchase-orderspurchase_orders:read

Lista inköpsorder

Inköpsorder utan rader. Kräver modulen Inköp.

Parametrar

  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
  • statusfråga
  • supplier_idfråga
  • work_order_idfråga
  • external_idfråga— Slå upp på ert eget id (external_id).
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "order_number": "IO-1004",
        "supplier_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "status": "draft",
        "wanted_delivery_on": "2026-10-08",
        "confirmed_delivery_on": null,
        "work_order_id": null,
        "site_id": null,
        "supplier_reference": null,
        "sent_at": null,
        "confirmed_at": null,
        "cancelled_at": null,
        "cancel_reason": null,
        "net_amount_ore": 120000,
        "external_id": "PO-88",
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/purchase-orders" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/purchase-orderspurchase_orders:write

Skapa inköpsorder

Skapar ett utkast genom `purchase_order_save`.

Parametrar

  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
supplier_id *string
wanted_delivery_onstring
work_order_idstring
site_idstring
notestring
external_idstringSlå upp på ert eget id (external_id).
Svarets schema (data)
FältTypBeskrivning
id *string
order_number *string
supplier_id *string
status *string (draft, sent, confirmed, cancelled)
wanted_delivery_on *string | null
confirmed_delivery_on *string | null
work_order_id *flera
site_id *flera
supplier_reference *string | null
sent_at *flera
confirmed_at *flera
cancelled_at *flera
cancel_reason *string | null
net_amount_ore *integer
external_id *string | null
created_at *string
updated_at *string
lines *array

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "order_number": "IO-1004",
    "supplier_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "status": "draft",
    "wanted_delivery_on": "2026-10-08",
    "confirmed_delivery_on": null,
    "work_order_id": null,
    "site_id": null,
    "supplier_reference": null,
    "sent_at": null,
    "confirmed_at": null,
    "cancelled_at": null,
    "cancel_reason": null,
    "net_amount_ore": 120000,
    "external_id": "PO-88",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "lines": [],
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 LEVERANTOR_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 EXTERNT_ID_UPPTAGET422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/purchase-orders" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"supplier_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e","wanted_delivery_on":"2026-10-08","external_id":"PO-88"}'
get/v1/purchase-orders/{id}purchase_orders:read

Hämta inköpsorder

En inköpsorder med rader och bekräftade avvikelser.

Parametrar

  • idstig · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
order_number *string
supplier_id *string
status *string (draft, sent, confirmed, cancelled)
wanted_delivery_on *string | null
confirmed_delivery_on *string | null
work_order_id *flera
site_id *flera
supplier_reference *string | null
sent_at *flera
confirmed_at *flera
cancelled_at *flera
cancel_reason *string | null
net_amount_ore *integer
external_id *string | null
created_at *string
updated_at *string
lines *array

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "order_number": "IO-1004",
    "supplier_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "status": "draft",
    "wanted_delivery_on": "2026-10-08",
    "confirmed_delivery_on": null,
    "work_order_id": null,
    "site_id": null,
    "supplier_reference": null,
    "sent_at": null,
    "confirmed_at": null,
    "cancelled_at": null,
    "cancel_reason": null,
    "net_amount_ore": 120000,
    "external_id": "PO-88",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "lines": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "material_item_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "description": "Allrengöring 5 l",
        "quantity": 10,
        "unit": "st",
        "unit_price_ore": 12000,
        "net_amount_ore": 120000,
        "confirmed_quantity": null,
        "confirmed_unit_price_ore": null,
        "confirmed_net_amount_ore": null,
        "outstanding_quantity": null,
        "has_quantity_deviation": false,
        "has_price_deviation": false,
        "sort_order": 1
      }
    ]
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 BESTALLNING_SAKNAS413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/purchase-orders/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
patch/v1/purchase-orders/{id}purchase_orders:write

Ändra inköpsorder

Ändrar ett utkast.

Parametrar

  • idstig · krävs

Kropp

FältTypBeskrivning
supplier_idstring
wanted_delivery_onstring
work_order_idstring
site_idstring
notestring
external_idstringSlå upp på ert eget id (external_id).
Svarets schema (data)
FältTypBeskrivning
id *string
order_number *string
supplier_id *string
status *string (draft, sent, confirmed, cancelled)
wanted_delivery_on *string | null
confirmed_delivery_on *string | null
work_order_id *flera
site_id *flera
supplier_reference *string | null
sent_at *flera
confirmed_at *flera
cancelled_at *flera
cancel_reason *string | null
net_amount_ore *integer
external_id *string | null
created_at *string
updated_at *string
lines *array

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "order_number": "IO-1004",
    "supplier_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "status": "draft",
    "wanted_delivery_on": "2026-10-08",
    "confirmed_delivery_on": null,
    "work_order_id": null,
    "site_id": null,
    "supplier_reference": null,
    "sent_at": null,
    "confirmed_at": null,
    "cancelled_at": null,
    "cancel_reason": null,
    "net_amount_ore": 120000,
    "external_id": "PO-88",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "lines": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "material_item_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "description": "Allrengöring 5 l",
        "quantity": 10,
        "unit": "st",
        "unit_price_ore": 12000,
        "net_amount_ore": 120000,
        "confirmed_quantity": null,
        "confirmed_unit_price_ore": null,
        "confirmed_net_amount_ore": null,
        "outstanding_quantity": null,
        "has_quantity_deviation": false,
        "has_price_deviation": false,
        "sort_order": 1
      }
    ],
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 BESTALLNING_SAKNAS413 PAYLOAD_FOR_STOR422 BESTALLNING_EJ_UTKAST422 EXTERNT_ID_UPPTAGET422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X PATCH "https://api.fixra.se/v1/purchase-orders/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"wanted_delivery_on":"2026-10-09"}'
post/v1/purchase-orders/{id}/linespurchase_orders:write

Lägg till rad

Lägger till en rad genom `purchase_order_line_save`. Svaret är hela ordern.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
description *string
quantity *number
unitstring
unit_price_ore *integer
material_item_idstring
sort_orderinteger
Svarets schema (data)
FältTypBeskrivning
id *string
order_number *string
supplier_id *string
status *string (draft, sent, confirmed, cancelled)
wanted_delivery_on *string | null
confirmed_delivery_on *string | null
work_order_id *flera
site_id *flera
supplier_reference *string | null
sent_at *flera
confirmed_at *flera
cancelled_at *flera
cancel_reason *string | null
net_amount_ore *integer
external_id *string | null
created_at *string
updated_at *string
lines *array

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "order_number": "IO-1004",
    "supplier_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "status": "draft",
    "wanted_delivery_on": "2026-10-08",
    "confirmed_delivery_on": null,
    "work_order_id": null,
    "site_id": null,
    "supplier_reference": null,
    "sent_at": null,
    "confirmed_at": null,
    "cancelled_at": null,
    "cancel_reason": null,
    "net_amount_ore": 120000,
    "external_id": "PO-88",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "lines": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "material_item_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "description": "Allrengöring 5 l",
        "quantity": 10,
        "unit": "st",
        "unit_price_ore": 12000,
        "net_amount_ore": 120000,
        "confirmed_quantity": null,
        "confirmed_unit_price_ore": null,
        "confirmed_net_amount_ore": null,
        "outstanding_quantity": null,
        "has_quantity_deviation": false,
        "has_price_deviation": false,
        "sort_order": 1
      }
    ],
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 BESTALLNING_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 BESTALLNING_EJ_UTKAST422 PRIS_SAKNAS422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/purchase-orders/{id}/lines" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"description":"Allrengöring 5 l","quantity":10,"unit_price_ore":12000}'
patch/v1/purchase-orders/{id}/lines/{line_id}purchase_orders:write

Ändra rad

Ändrar en rad på ett utkast.

Parametrar

  • idstig · krävs
  • line_idstig · krävs

Kropp

FältTypBeskrivning
descriptionstring
quantitynumber
unitstring
unit_price_oreinteger
material_item_idstring
sort_orderinteger
Svarets schema (data)
FältTypBeskrivning
id *string
order_number *string
supplier_id *string
status *string (draft, sent, confirmed, cancelled)
wanted_delivery_on *string | null
confirmed_delivery_on *string | null
work_order_id *flera
site_id *flera
supplier_reference *string | null
sent_at *flera
confirmed_at *flera
cancelled_at *flera
cancel_reason *string | null
net_amount_ore *integer
external_id *string | null
created_at *string
updated_at *string
lines *array

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "order_number": "IO-1004",
    "supplier_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "status": "draft",
    "wanted_delivery_on": "2026-10-08",
    "confirmed_delivery_on": null,
    "work_order_id": null,
    "site_id": null,
    "supplier_reference": null,
    "sent_at": null,
    "confirmed_at": null,
    "cancelled_at": null,
    "cancel_reason": null,
    "net_amount_ore": 120000,
    "external_id": "PO-88",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "lines": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "material_item_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "description": "Allrengöring 5 l",
        "quantity": 10,
        "unit": "st",
        "unit_price_ore": 12000,
        "net_amount_ore": 120000,
        "confirmed_quantity": null,
        "confirmed_unit_price_ore": null,
        "confirmed_net_amount_ore": null,
        "outstanding_quantity": null,
        "has_quantity_deviation": false,
        "has_price_deviation": false,
        "sort_order": 1
      }
    ],
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 BESTALLNING_SAKNAS404 BESTALLNINGSRAD_SAKNAS413 PAYLOAD_FOR_STOR422 BESTALLNING_EJ_UTKAST422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X PATCH "https://api.fixra.se/v1/purchase-orders/{id}/lines/{line_id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"quantity":12}'
delete/v1/purchase-orders/{id}/lines/{line_id}purchase_orders:write

Ta bort rad

Tar bort en rad på ett utkast genom `purchase_order_line_delete`.

Parametrar

  • idstig · krävs
  • line_idstig · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
order_number *string
supplier_id *string
status *string (draft, sent, confirmed, cancelled)
wanted_delivery_on *string | null
confirmed_delivery_on *string | null
work_order_id *flera
site_id *flera
supplier_reference *string | null
sent_at *flera
confirmed_at *flera
cancelled_at *flera
cancel_reason *string | null
net_amount_ore *integer
external_id *string | null
created_at *string
updated_at *string
lines *array

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "order_number": "IO-1004",
    "supplier_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "status": "draft",
    "wanted_delivery_on": "2026-10-08",
    "confirmed_delivery_on": null,
    "work_order_id": null,
    "site_id": null,
    "supplier_reference": null,
    "sent_at": null,
    "confirmed_at": null,
    "cancelled_at": null,
    "cancel_reason": null,
    "net_amount_ore": 120000,
    "external_id": "PO-88",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "lines": [],
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 BESTALLNING_SAKNAS404 BESTALLNINGSRAD_SAKNAS413 PAYLOAD_FOR_STOR422 BESTALLNING_EJ_UTKAST429 STRYPT429 RATELIMIT
curl -X DELETE "https://api.fixra.se/v1/purchase-orders/{id}/lines/{line_id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/purchase-orders/{id}/sendpurchase_orders:write

Skicka inköpsorder

draft → sent genom `purchase_order_send`.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
order_number *string
supplier_id *string
status *string (draft, sent, confirmed, cancelled)
wanted_delivery_on *string | null
confirmed_delivery_on *string | null
work_order_id *flera
site_id *flera
supplier_reference *string | null
sent_at *flera
confirmed_at *flera
cancelled_at *flera
cancel_reason *string | null
net_amount_ore *integer
external_id *string | null
created_at *string
updated_at *string
lines *array

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "order_number": "IO-1004",
    "supplier_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "status": "sent",
    "wanted_delivery_on": "2026-10-08",
    "confirmed_delivery_on": null,
    "work_order_id": null,
    "site_id": null,
    "supplier_reference": null,
    "sent_at": "2026-10-01T09:00:00+02:00",
    "confirmed_at": null,
    "cancelled_at": null,
    "cancel_reason": null,
    "net_amount_ore": 120000,
    "external_id": "PO-88",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "lines": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "material_item_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "description": "Allrengöring 5 l",
        "quantity": 10,
        "unit": "st",
        "unit_price_ore": 12000,
        "net_amount_ore": 120000,
        "confirmed_quantity": null,
        "confirmed_unit_price_ore": null,
        "confirmed_net_amount_ore": null,
        "outstanding_quantity": null,
        "has_quantity_deviation": false,
        "has_price_deviation": false,
        "sort_order": 1
      }
    ],
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 BESTALLNING_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 BESTALLNING_EJ_UTKAST422 BESTALLNING_TOM429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/purchase-orders/{id}/send" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)"
post/v1/purchase-orders/{id}/cancelpurchase_orders:write

Avboka inköpsorder

Avbokar genom `purchase_order_cancel`. Orsak krävs.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
reason *string
Svarets schema (data)
FältTypBeskrivning
id *string
order_number *string
supplier_id *string
status *string (draft, sent, confirmed, cancelled)
wanted_delivery_on *string | null
confirmed_delivery_on *string | null
work_order_id *flera
site_id *flera
supplier_reference *string | null
sent_at *flera
confirmed_at *flera
cancelled_at *flera
cancel_reason *string | null
net_amount_ore *integer
external_id *string | null
created_at *string
updated_at *string
lines *array

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "order_number": "IO-1004",
    "supplier_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "status": "cancelled",
    "wanted_delivery_on": "2026-10-08",
    "confirmed_delivery_on": null,
    "work_order_id": null,
    "site_id": null,
    "supplier_reference": null,
    "sent_at": null,
    "confirmed_at": null,
    "cancelled_at": "2026-10-01T09:00:00+02:00",
    "cancel_reason": "Leverantören kan inte leverera i tid.",
    "net_amount_ore": 120000,
    "external_id": "PO-88",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "lines": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "material_item_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "description": "Allrengöring 5 l",
        "quantity": 10,
        "unit": "st",
        "unit_price_ore": 12000,
        "net_amount_ore": 120000,
        "confirmed_quantity": null,
        "confirmed_unit_price_ore": null,
        "confirmed_net_amount_ore": null,
        "outstanding_quantity": null,
        "has_quantity_deviation": false,
        "has_price_deviation": false,
        "sort_order": 1
      }
    ],
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 BESTALLNING_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 BESTALLNING_REDAN_AVBRUTEN422 ORSAK_SAKNAS422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/purchase-orders/{id}/cancel" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"reason":"Leverantören kan inte leverera i tid."}'

Leverantörsfakturor

get/v1/supplier-invoicessupplier_invoices:read

Lista leverantörsfakturor

Fakturor utan rader. Kräver modulen Inköp.

Parametrar

  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
  • statusfråga
  • supplier_idfråga
  • external_idfråga— Slå upp på ert eget id (external_id).
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "supplier_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "invoice_number": "F-20931",
        "invoice_date": "2026-10-02",
        "due_date": "2026-11-01",
        "net_amount_ore": 120000,
        "vat_amount_ore": 30000,
        "gross_amount_ore": 150000,
        "status": "draft",
        "submitted_at": null,
        "approved_at": null,
        "rejection_reason": null,
        "file_object_id": null,
        "external_id": "LF-20931",
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/supplier-invoices" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/supplier-invoicessupplier_invoices:write

Registrera leverantörsfaktura

Skapar ett utkast genom `supplier_invoice_save`.

Parametrar

  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
supplier_id *string
invoice_number *string
invoice_datestring
due_datestring
net_amount_ore *integer
vat_amount_ore *integer
gross_amount_ore *integer
file_object_idstring
notestring
external_idstringSlå upp på ert eget id (external_id).
Svarets schema (data)
FältTypBeskrivning
id *string
supplier_id *string
invoice_number *string
invoice_date *string | null
due_date *string | null
net_amount_ore *integer
vat_amount_ore *integer
gross_amount_ore *integer
status *string (draft, pending_approval, approved, rejected)
submitted_at *flera
approved_at *flera
rejection_reason *string | null
file_object_id *flera
external_id *string | null
created_at *string
updated_at *string
lines *array

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "supplier_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "invoice_number": "F-20931",
    "invoice_date": "2026-10-02",
    "due_date": "2026-11-01",
    "net_amount_ore": 120000,
    "vat_amount_ore": 30000,
    "gross_amount_ore": 150000,
    "status": "draft",
    "submitted_at": null,
    "approved_at": null,
    "rejection_reason": null,
    "file_object_id": null,
    "external_id": "LF-20931",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "lines": [],
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 LEVERANTOR_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 BRUTTO_STAMMER_INTE422 DUBBLETT_FAKTURANUMMER422 EXTERNT_ID_UPPTAGET422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/supplier-invoices" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"supplier_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e","invoice_number":"F-20931","net_amount_ore":120000,"vat_amount_ore":30000,"gross_amount_ore":150000}'
get/v1/supplier-invoices/{id}supplier_invoices:read

Hämta leverantörsfaktura

En faktura med rader.

Parametrar

  • idstig · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
supplier_id *string
invoice_number *string
invoice_date *string | null
due_date *string | null
net_amount_ore *integer
vat_amount_ore *integer
gross_amount_ore *integer
status *string (draft, pending_approval, approved, rejected)
submitted_at *flera
approved_at *flera
rejection_reason *string | null
file_object_id *flera
external_id *string | null
created_at *string
updated_at *string
lines *array

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "supplier_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "invoice_number": "F-20931",
    "invoice_date": "2026-10-02",
    "due_date": "2026-11-01",
    "net_amount_ore": 120000,
    "vat_amount_ore": 30000,
    "gross_amount_ore": 150000,
    "status": "draft",
    "submitted_at": null,
    "approved_at": null,
    "rejection_reason": null,
    "file_object_id": null,
    "external_id": "LF-20931",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "lines": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "description": "Allrengöring 5 l",
        "quantity": 10,
        "unit_price_ore": 12000,
        "net_amount_ore": 120000,
        "vat_rate": 25,
        "vat_amount_ore": 30000,
        "work_order_id": null,
        "material_item_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "purchase_order_line_id": null,
        "is_rebillable": false,
        "sales_price_ore": null,
        "invoiced": false,
        "sort_order": 1
      }
    ]
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 FAKTURA_SAKNAS413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/supplier-invoices/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
patch/v1/supplier-invoices/{id}supplier_invoices:write

Ändra leverantörsfaktura

Ändrar ett utkast eller en avslagen faktura.

Parametrar

  • idstig · krävs

Kropp

FältTypBeskrivning
supplier_idstring
invoice_numberstring
invoice_datestring
due_datestring
net_amount_oreinteger
vat_amount_oreinteger
gross_amount_oreinteger
file_object_idstring
notestring
external_idstringSlå upp på ert eget id (external_id).
Svarets schema (data)
FältTypBeskrivning
id *string
supplier_id *string
invoice_number *string
invoice_date *string | null
due_date *string | null
net_amount_ore *integer
vat_amount_ore *integer
gross_amount_ore *integer
status *string (draft, pending_approval, approved, rejected)
submitted_at *flera
approved_at *flera
rejection_reason *string | null
file_object_id *flera
external_id *string | null
created_at *string
updated_at *string
lines *array

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "supplier_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "invoice_number": "F-20931",
    "invoice_date": "2026-10-02",
    "due_date": "2026-11-01",
    "net_amount_ore": 120000,
    "vat_amount_ore": 30000,
    "gross_amount_ore": 150000,
    "status": "draft",
    "submitted_at": null,
    "approved_at": null,
    "rejection_reason": null,
    "file_object_id": null,
    "external_id": "LF-20931",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "lines": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "description": "Allrengöring 5 l",
        "quantity": 10,
        "unit_price_ore": 12000,
        "net_amount_ore": 120000,
        "vat_rate": 25,
        "vat_amount_ore": 30000,
        "work_order_id": null,
        "material_item_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "purchase_order_line_id": null,
        "is_rebillable": false,
        "sales_price_ore": null,
        "invoiced": false,
        "sort_order": 1
      }
    ],
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 FAKTURA_SAKNAS413 PAYLOAD_FOR_STOR422 FEL_STATUS_FOR_ANDRING422 EXTERNT_ID_UPPTAGET422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X PATCH "https://api.fixra.se/v1/supplier-invoices/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"due_date":"2026-11-05"}'
post/v1/supplier-invoices/{id}/linessupplier_invoices:write

Lägg till fakturarad

Lägger till en rad genom `supplier_invoice_line_save`. Vidarefakturering kräver arbetsorder och försäljningspris.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
description *string
quantity *number
unit_price_ore *integer
vat_ratenumber
work_order_idstring
material_item_idstring
purchase_order_line_idstring
is_rebillableboolean
sales_price_oreinteger
sort_orderinteger
Svarets schema (data)
FältTypBeskrivning
id *string
supplier_id *string
invoice_number *string
invoice_date *string | null
due_date *string | null
net_amount_ore *integer
vat_amount_ore *integer
gross_amount_ore *integer
status *string (draft, pending_approval, approved, rejected)
submitted_at *flera
approved_at *flera
rejection_reason *string | null
file_object_id *flera
external_id *string | null
created_at *string
updated_at *string
lines *array

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "supplier_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "invoice_number": "F-20931",
    "invoice_date": "2026-10-02",
    "due_date": "2026-11-01",
    "net_amount_ore": 120000,
    "vat_amount_ore": 30000,
    "gross_amount_ore": 150000,
    "status": "draft",
    "submitted_at": null,
    "approved_at": null,
    "rejection_reason": null,
    "file_object_id": null,
    "external_id": "LF-20931",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "lines": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "description": "Allrengöring 5 l",
        "quantity": 10,
        "unit_price_ore": 12000,
        "net_amount_ore": 120000,
        "vat_rate": 25,
        "vat_amount_ore": 30000,
        "work_order_id": null,
        "material_item_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "purchase_order_line_id": null,
        "is_rebillable": false,
        "sales_price_ore": null,
        "invoiced": false,
        "sort_order": 1
      }
    ],
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 FAKTURA_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 FEL_STATUS_FOR_ANDRING422 VIDAREFAKT_KRAVER_ARBETSORDER422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/supplier-invoices/{id}/lines" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"description":"Allrengöring 5 l","quantity":10,"unit_price_ore":12000,"vat_rate":25}'
patch/v1/supplier-invoices/{id}/lines/{line_id}supplier_invoices:write

Ändra fakturarad

Ändrar en rad.

Parametrar

  • idstig · krävs
  • line_idstig · krävs

Kropp

FältTypBeskrivning
descriptionstring
quantitynumber
unit_price_oreinteger
vat_ratenumber
work_order_idstring
material_item_idstring
purchase_order_line_idstring
is_rebillableboolean
sales_price_oreinteger
sort_orderinteger
Svarets schema (data)
FältTypBeskrivning
id *string
supplier_id *string
invoice_number *string
invoice_date *string | null
due_date *string | null
net_amount_ore *integer
vat_amount_ore *integer
gross_amount_ore *integer
status *string (draft, pending_approval, approved, rejected)
submitted_at *flera
approved_at *flera
rejection_reason *string | null
file_object_id *flera
external_id *string | null
created_at *string
updated_at *string
lines *array

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "supplier_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "invoice_number": "F-20931",
    "invoice_date": "2026-10-02",
    "due_date": "2026-11-01",
    "net_amount_ore": 120000,
    "vat_amount_ore": 30000,
    "gross_amount_ore": 150000,
    "status": "draft",
    "submitted_at": null,
    "approved_at": null,
    "rejection_reason": null,
    "file_object_id": null,
    "external_id": "LF-20931",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "lines": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "description": "Allrengöring 5 l",
        "quantity": 10,
        "unit_price_ore": 12000,
        "net_amount_ore": 120000,
        "vat_rate": 25,
        "vat_amount_ore": 30000,
        "work_order_id": null,
        "material_item_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "purchase_order_line_id": null,
        "is_rebillable": false,
        "sales_price_ore": null,
        "invoiced": false,
        "sort_order": 1
      }
    ],
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 FAKTURA_SAKNAS404 FAKTURARAD_SAKNAS413 PAYLOAD_FOR_STOR422 FEL_STATUS_FOR_ANDRING422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X PATCH "https://api.fixra.se/v1/supplier-invoices/{id}/lines/{line_id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"quantity":12}'
delete/v1/supplier-invoices/{id}/lines/{line_id}supplier_invoices:write

Ta bort fakturarad

Tar bort en rad genom `supplier_invoice_line_delete`.

Parametrar

  • idstig · krävs
  • line_idstig · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
supplier_id *string
invoice_number *string
invoice_date *string | null
due_date *string | null
net_amount_ore *integer
vat_amount_ore *integer
gross_amount_ore *integer
status *string (draft, pending_approval, approved, rejected)
submitted_at *flera
approved_at *flera
rejection_reason *string | null
file_object_id *flera
external_id *string | null
created_at *string
updated_at *string
lines *array

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "supplier_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "invoice_number": "F-20931",
    "invoice_date": "2026-10-02",
    "due_date": "2026-11-01",
    "net_amount_ore": 120000,
    "vat_amount_ore": 30000,
    "gross_amount_ore": 150000,
    "status": "draft",
    "submitted_at": null,
    "approved_at": null,
    "rejection_reason": null,
    "file_object_id": null,
    "external_id": "LF-20931",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "lines": [],
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 FAKTURA_SAKNAS404 FAKTURARAD_SAKNAS413 PAYLOAD_FOR_STOR422 FEL_STATUS_FOR_ANDRING429 STRYPT429 RATELIMIT
curl -X DELETE "https://api.fixra.se/v1/supplier-invoices/{id}/lines/{line_id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/supplier-invoices/{id}/submitsupplier_invoices:write

Skicka till attest

draft/rejected → pending_approval genom `supplier_invoice_submit`.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
supplier_id *string
invoice_number *string
invoice_date *string | null
due_date *string | null
net_amount_ore *integer
vat_amount_ore *integer
gross_amount_ore *integer
status *string (draft, pending_approval, approved, rejected)
submitted_at *flera
approved_at *flera
rejection_reason *string | null
file_object_id *flera
external_id *string | null
created_at *string
updated_at *string
lines *array

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "supplier_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "invoice_number": "F-20931",
    "invoice_date": "2026-10-02",
    "due_date": "2026-11-01",
    "net_amount_ore": 120000,
    "vat_amount_ore": 30000,
    "gross_amount_ore": 150000,
    "status": "pending_approval",
    "submitted_at": "2026-10-01T09:00:00+02:00",
    "approved_at": null,
    "rejection_reason": null,
    "file_object_id": null,
    "external_id": "LF-20931",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "lines": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "description": "Allrengöring 5 l",
        "quantity": 10,
        "unit_price_ore": 12000,
        "net_amount_ore": 120000,
        "vat_rate": 25,
        "vat_amount_ore": 30000,
        "work_order_id": null,
        "material_item_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "purchase_order_line_id": null,
        "is_rebillable": false,
        "sales_price_ore": null,
        "invoiced": false,
        "sort_order": 1
      }
    ],
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 FAKTURA_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 RADER_SAKNAS422 RADSUMMA_STAMMER_INTE422 FEL_STATUS_FOR_INSKICK429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/supplier-invoices/{id}/submit" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)"
post/v1/supplier-invoices/{id}/approvesupplier_invoices:write

Attestera

pending_approval → approved genom `supplier_invoice_approve`. Nyckelns skapare måste ha purchase.approve och får inte vara den som skickade in.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
supplier_id *string
invoice_number *string
invoice_date *string | null
due_date *string | null
net_amount_ore *integer
vat_amount_ore *integer
gross_amount_ore *integer
status *string (draft, pending_approval, approved, rejected)
submitted_at *flera
approved_at *flera
rejection_reason *string | null
file_object_id *flera
external_id *string | null
created_at *string
updated_at *string
lines *array

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "supplier_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "invoice_number": "F-20931",
    "invoice_date": "2026-10-02",
    "due_date": "2026-11-01",
    "net_amount_ore": 120000,
    "vat_amount_ore": 30000,
    "gross_amount_ore": 150000,
    "status": "approved",
    "submitted_at": null,
    "approved_at": "2026-10-01T09:00:00+02:00",
    "rejection_reason": null,
    "file_object_id": null,
    "external_id": "LF-20931",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "lines": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "description": "Allrengöring 5 l",
        "quantity": 10,
        "unit_price_ore": 12000,
        "net_amount_ore": 120000,
        "vat_rate": 25,
        "vat_amount_ore": 30000,
        "work_order_id": null,
        "material_item_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "purchase_order_line_id": null,
        "is_rebillable": false,
        "sales_price_ore": null,
        "invoiced": false,
        "sort_order": 1
      }
    ],
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET403 SAKNAR_RATTIGHET404 FAKTURA_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 EGEN_ATTEST_EJ_TILLATEN422 FEL_STATUS_FOR_ATTEST429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/supplier-invoices/{id}/approve" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)"
post/v1/supplier-invoices/{id}/rejectsupplier_invoices:write

Avslå

pending_approval → rejected genom `supplier_invoice_reject`. Orsak krävs.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
reason *string
Svarets schema (data)
FältTypBeskrivning
id *string
supplier_id *string
invoice_number *string
invoice_date *string | null
due_date *string | null
net_amount_ore *integer
vat_amount_ore *integer
gross_amount_ore *integer
status *string (draft, pending_approval, approved, rejected)
submitted_at *flera
approved_at *flera
rejection_reason *string | null
file_object_id *flera
external_id *string | null
created_at *string
updated_at *string
lines *array

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "supplier_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "invoice_number": "F-20931",
    "invoice_date": "2026-10-02",
    "due_date": "2026-11-01",
    "net_amount_ore": 120000,
    "vat_amount_ore": 30000,
    "gross_amount_ore": 150000,
    "status": "rejected",
    "submitted_at": null,
    "approved_at": null,
    "rejection_reason": "Fel pris på rad 1.",
    "file_object_id": null,
    "external_id": "LF-20931",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "lines": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "description": "Allrengöring 5 l",
        "quantity": 10,
        "unit_price_ore": 12000,
        "net_amount_ore": 120000,
        "vat_rate": 25,
        "vat_amount_ore": 30000,
        "work_order_id": null,
        "material_item_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "purchase_order_line_id": null,
        "is_rebillable": false,
        "sales_price_ore": null,
        "invoiced": false,
        "sort_order": 1
      }
    ],
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET403 SAKNAR_RATTIGHET404 FAKTURA_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 AVSLAGSORSAK_SAKNAS422 FEL_STATUS_FOR_ATTEST422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/supplier-invoices/{id}/reject" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"reason":"Fel pris på rad 1."}'

Projekt

get/v1/projectsprojects:read

Lista projekt

Projekt utan faser. Budgetbelopp är null om nyckelns skapare saknar economy.read. Kräver modulen Projekt.

Parametrar

  • limitfråga— Antal rader per sida, 1–100. Standard 25.
  • cursorfråga— Värdet `next_cursor` från föregående sida.
  • updated_sincefråga— Bara rader ändrade vid eller efter tidpunkten (ISO 8601 med offset).
  • statusfråga
  • customer_idfråga
  • external_idfråga— Slå upp på ert eget id (external_id).
Svarets schema (data)
FältTypBeskrivning
items *array
next_cursor *string | null

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "project_number": "P-1012",
        "name": "Badrum Ekbacken",
        "description": null,
        "status": "planned",
        "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "responsible_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "starts_on": "2026-10-05",
        "ends_on": "2026-10-30",
        "budget_minutes": 9600,
        "budget_cost_ore": 7200000,
        "budget_revenue_ore": 9800000,
        "external_id": "PRJ-12",
        "created_at": "2026-10-01T09:00:00+02:00",
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "next_cursor": "323032362d31302d..."
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/projects" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/projectsprojects:write

Skapa projekt

Skapar ett projekt genom `project_save`.

Parametrar

  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
name *string
descriptionstring
customer_id *stringKrävs: projekt har alltid en kund.
site_idstring
responsible_idstring
starts_onstring
ends_onstring
budget_minutesinteger
budget_cost_oreinteger
budget_revenue_oreinteger
statusstring (planned, active, on_hold)
external_idstringSlå upp på ert eget id (external_id).
Svarets schema (data)
FältTypBeskrivning
id *string
project_number *string
name *string
description *string | null
status *string (planned, active, on_hold, done, cancelled)
customer_id *flera
site_id *flera
responsible_id *flera
starts_on *string | null
ends_on *string | null
budget_minutes *flera
budget_cost_ore *flera
budget_revenue_ore *flera
external_id *string | null
created_at *string
updated_at *string
phases *array

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "project_number": "P-1012",
    "name": "Badrum Ekbacken",
    "description": null,
    "status": "planned",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "responsible_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "starts_on": "2026-10-05",
    "ends_on": "2026-10-30",
    "budget_minutes": 9600,
    "budget_cost_ore": 7200000,
    "budget_revenue_ore": 9800000,
    "external_id": "PRJ-12",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "phases": [],
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 NAMN_SAKNAS422 SLUTDATUM_FORE_STARTDATUM422 KUND_SAKNAS422 EXTERNT_ID_UPPTAGET422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/projects" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"name":"Badrum Ekbacken","customer_id":"5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e","starts_on":"2026-10-05","external_id":"PRJ-12"}'
get/v1/projects/{id}projects:read

Hämta projekt

Ett projekt med faser.

Parametrar

  • idstig · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
project_number *string
name *string
description *string | null
status *string (planned, active, on_hold, done, cancelled)
customer_id *flera
site_id *flera
responsible_id *flera
starts_on *string | null
ends_on *string | null
budget_minutes *flera
budget_cost_ore *flera
budget_revenue_ore *flera
external_id *string | null
created_at *string
updated_at *string
phases *array

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "project_number": "P-1012",
    "name": "Badrum Ekbacken",
    "description": null,
    "status": "planned",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "responsible_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "starts_on": "2026-10-05",
    "ends_on": "2026-10-30",
    "budget_minutes": 9600,
    "budget_cost_ore": 7200000,
    "budget_revenue_ore": 9800000,
    "external_id": "PRJ-12",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "phases": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "name": "Rivning",
        "sort_order": 1,
        "planned_start": "2026-10-05",
        "planned_end": "2026-10-09",
        "status": "planned",
        "budget_minutes": 2400,
        "budget_cost_ore": 1800000,
        "budget_revenue_ore": 2600000,
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ]
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 PROJEKT_SAKNAS413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/projects/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
patch/v1/projects/{id}projects:write

Ändra projekt

Ändrar skickade fält. Avslutade projekt kan inte ändras.

Parametrar

  • idstig · krävs

Kropp

FältTypBeskrivning
namestring
descriptionstring
customer_idstringKrävs: projekt har alltid en kund.
site_idstring
responsible_idstring
starts_onstring
ends_onstring
budget_minutesinteger
budget_cost_oreinteger
budget_revenue_oreinteger
statusstring (planned, active, on_hold)
external_idstringSlå upp på ert eget id (external_id).
Svarets schema (data)
FältTypBeskrivning
id *string
project_number *string
name *string
description *string | null
status *string (planned, active, on_hold, done, cancelled)
customer_id *flera
site_id *flera
responsible_id *flera
starts_on *string | null
ends_on *string | null
budget_minutes *flera
budget_cost_ore *flera
budget_revenue_ore *flera
external_id *string | null
created_at *string
updated_at *string
phases *array

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "project_number": "P-1012",
    "name": "Badrum Ekbacken",
    "description": null,
    "status": "planned",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "responsible_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "starts_on": "2026-10-05",
    "ends_on": "2026-10-30",
    "budget_minutes": 9600,
    "budget_cost_ore": 7200000,
    "budget_revenue_ore": 9800000,
    "external_id": "PRJ-12",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "phases": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "name": "Rivning",
        "sort_order": 1,
        "planned_start": "2026-10-05",
        "planned_end": "2026-10-09",
        "status": "planned",
        "budget_minutes": 2400,
        "budget_cost_ore": 1800000,
        "budget_revenue_ore": 2600000,
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 PROJEKT_SAKNAS413 PAYLOAD_FOR_STOR422 PROJEKT_AVSLUTAT422 EXTERNT_ID_UPPTAGET422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X PATCH "https://api.fixra.se/v1/projects/{id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"ends_on":"2026-11-06"}'
post/v1/projects/{id}/statusprojects:write

Byt projektstatus

Sätter status genom `project_set_status`.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
status *string (planned, active, on_hold, done, cancelled)
Svarets schema (data)
FältTypBeskrivning
id *string
project_number *string
name *string
description *string | null
status *string (planned, active, on_hold, done, cancelled)
customer_id *flera
site_id *flera
responsible_id *flera
starts_on *string | null
ends_on *string | null
budget_minutes *flera
budget_cost_ore *flera
budget_revenue_ore *flera
external_id *string | null
created_at *string
updated_at *string
phases *array

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "project_number": "P-1012",
    "name": "Badrum Ekbacken",
    "description": null,
    "status": "active",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "responsible_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "starts_on": "2026-10-05",
    "ends_on": "2026-10-30",
    "budget_minutes": 9600,
    "budget_cost_ore": 7200000,
    "budget_revenue_ore": 9800000,
    "external_id": "PRJ-12",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "phases": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "name": "Rivning",
        "sort_order": 1,
        "planned_start": "2026-10-05",
        "planned_end": "2026-10-09",
        "status": "planned",
        "budget_minutes": 2400,
        "budget_cost_ore": 1800000,
        "budget_revenue_ore": 2600000,
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 PROJEKT_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 OGILTIG_STATUS422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/projects/{id}/status" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"status":"active"}'
get/v1/projects/{id}/economyprojects:read

Projektets ekonomi

Utfall mot budget per fas ur `project_economy`. Personalkostnad lämnas bara summerad; arbetsgivarfaktorn lämnas aldrig ut. Nyckelns skapare måste ha economy.read.

Parametrar

  • idstig · krävs
Svarets schema (data)
FältTypBeskrivning
project_id *string
project_number *string
name *string
purchase_module *boolean
expense_module *boolean
project_budget *object
phase_budget_sum *object
rows *array
total *object

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "project_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "project_number": "P-1012",
    "name": "Badrum Ekbacken",
    "purchase_module": true,
    "expense_module": false,
    "project_budget": {
      "budget_minutes": 9600,
      "budget_cost_ore": 7200000,
      "budget_revenue_ore": 9800000
    },
    "phase_budget_sum": {
      "budget_minutes": 2400,
      "budget_cost_ore": 1800000,
      "budget_revenue_ore": 2600000
    },
    "rows": [
      {
        "phase_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "phase_name": "Rivning",
        "minutes": 2400,
        "rework_minutes": 0,
        "travel_minutes": 120,
        "staff_cost_ore": 1450000,
        "material_cost_ore": 90000,
        "material_replaced_cost_ore": 0,
        "purchase_cost_ore": 120000,
        "subcontractor_cost_ore": 0,
        "rework_cost_ore": 0,
        "travel_cost_ore": 30000,
        "expense_cost_ore": 0,
        "cost_ore": 1690000,
        "revenue_ore": 2600000,
        "margin_ore": 910000,
        "margin_pct": 35
      }
    ],
    "total": {
      "minutes": 2400,
      "rework_minutes": 0,
      "travel_minutes": 120,
      "staff_cost_ore": 1450000,
      "material_cost_ore": 90000,
      "material_replaced_cost_ore": 0,
      "purchase_cost_ore": 120000,
      "subcontractor_cost_ore": 0,
      "rework_cost_ore": 0,
      "travel_cost_ore": 30000,
      "expense_cost_ore": 0,
      "cost_ore": 1690000,
      "revenue_ore": 2600000,
      "margin_ore": 910000,
      "margin_pct": 35
    }
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 PROJEKT_SAKNAS413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/v1/projects/{id}/economy" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"
post/v1/projects/{id}/phasesprojects:write

Lägg till fas

Skapar en fas genom `project_phase_save`. Svaret är hela projektet.

Parametrar

  • idstig · krävs
  • Idempotency-Keyhuvud · krävs

Kropp

FältTypBeskrivning
name *string
sort_orderinteger
planned_startstring
planned_endstring
statusstring (planned, active, done, cancelled)
budget_minutesinteger
budget_cost_oreinteger
budget_revenue_oreinteger
Svarets schema (data)
FältTypBeskrivning
id *string
project_number *string
name *string
description *string | null
status *string (planned, active, on_hold, done, cancelled)
customer_id *flera
site_id *flera
responsible_id *flera
starts_on *string | null
ends_on *string | null
budget_minutes *flera
budget_cost_ore *flera
budget_revenue_ore *flera
external_id *string | null
created_at *string
updated_at *string
phases *array

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "project_number": "P-1012",
    "name": "Badrum Ekbacken",
    "description": null,
    "status": "planned",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "responsible_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "starts_on": "2026-10-05",
    "ends_on": "2026-10-30",
    "budget_minutes": 9600,
    "budget_cost_ore": 7200000,
    "budget_revenue_ore": 9800000,
    "external_id": "PRJ-12",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "phases": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "name": "Rivning",
        "sort_order": 1,
        "planned_start": "2026-10-05",
        "planned_end": "2026-10-09",
        "status": "planned",
        "budget_minutes": 2400,
        "budget_cost_ore": 1800000,
        "budget_revenue_ore": 2600000,
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

400 IDEMPOTENS_NYCKEL_SAKNAS401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 PROJEKT_SAKNAS409 IDEMPOTENS_KONFLIKT413 PAYLOAD_FOR_STOR422 PROJEKT_AVSLUTAT422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/v1/projects/{id}/phases" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"name":"Rivning","planned_start":"2026-10-05","planned_end":"2026-10-09"}'
patch/v1/projects/{id}/phases/{phase_id}projects:write

Ändra fas

Ändrar en fas.

Parametrar

  • idstig · krävs
  • phase_idstig · krävs

Kropp

FältTypBeskrivning
namestring
sort_orderinteger
planned_startstring
planned_endstring
statusstring (planned, active, done, cancelled)
budget_minutesinteger
budget_cost_oreinteger
budget_revenue_oreinteger
Svarets schema (data)
FältTypBeskrivning
id *string
project_number *string
name *string
description *string | null
status *string (planned, active, on_hold, done, cancelled)
customer_id *flera
site_id *flera
responsible_id *flera
starts_on *string | null
ends_on *string | null
budget_minutes *flera
budget_cost_ore *flera
budget_revenue_ore *flera
external_id *string | null
created_at *string
updated_at *string
phases *array

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "project_number": "P-1012",
    "name": "Badrum Ekbacken",
    "description": null,
    "status": "planned",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "responsible_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "starts_on": "2026-10-05",
    "ends_on": "2026-10-30",
    "budget_minutes": 9600,
    "budget_cost_ore": 7200000,
    "budget_revenue_ore": 9800000,
    "external_id": "PRJ-12",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "phases": [
      {
        "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
        "name": "Rivning",
        "sort_order": 1,
        "planned_start": "2026-10-05",
        "planned_end": "2026-10-09",
        "status": "planned",
        "budget_minutes": 2400,
        "budget_cost_ore": 1800000,
        "budget_revenue_ore": 2600000,
        "updated_at": "2026-10-01T09:00:00+02:00"
      }
    ],
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 PROJEKT_SAKNAS404 FAS_SAKNAS413 PAYLOAD_FOR_STOR422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X PATCH "https://api.fixra.se/v1/projects/{id}/phases/{phase_id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"status":"active"}'
delete/v1/projects/{id}/phases/{phase_id}projects:write

Ta bort fas

Tar bort en fas utan arbetsorder genom `project_phase_delete`.

Parametrar

  • idstig · krävs
  • phase_idstig · krävs
Svarets schema (data)
FältTypBeskrivning
id *string
project_number *string
name *string
description *string | null
status *string (planned, active, on_hold, done, cancelled)
customer_id *flera
site_id *flera
responsible_id *flera
starts_on *string | null
ends_on *string | null
budget_minutes *flera
budget_cost_ore *flera
budget_revenue_ore *flera
external_id *string | null
created_at *string
updated_at *string
phases *array

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "project_number": "P-1012",
    "name": "Badrum Ekbacken",
    "description": null,
    "status": "planned",
    "customer_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "site_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "responsible_id": "5b0c7a52-3f7e-4d1a-9c7e-1f2a3b4c5d6e",
    "starts_on": "2026-10-05",
    "ends_on": "2026-10-30",
    "budget_minutes": 9600,
    "budget_cost_ore": 7200000,
    "budget_revenue_ore": 9800000,
    "external_id": "PRJ-12",
    "created_at": "2026-10-01T09:00:00+02:00",
    "updated_at": "2026-10-01T09:00:00+02:00",
    "phases": [],
    "dry_run": false,
    "idempotent": false
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_UTGANGEN401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 MODUL_AVSTANGD403 MODUL_EJ_AKTIV403 IP_EJ_TILLATEN403 SAKNAR_BEHORIGHET404 PROJEKT_SAKNAS404 FAS_SAKNAS413 PAYLOAD_FOR_STOR422 FAS_HAR_ARBETSORDER429 STRYPT429 RATELIMIT
curl -X DELETE "https://api.fixra.se/v1/projects/{id}/phases/{phase_id}" \
  -H "Authorization: Bearer fx_test_DIN_NYCKEL"

Partner-API

get/partner/v1/kunderkunder.read

Lista kunder

Partnerns kundbolag och väntande inbjudningar — samma lista som portalen (`pp_kunder`). Bara kundfakta och licens, aldrig verksamhetsdata.

Parametrar

  • statusfråga— prov, aktiv, pausad, uppsagd eller inbjuden.
  • sokfråga— Del av namn eller org.nr.
Svarets schema (data)
FältTypBeskrivning
kunder *array

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "kunder": [
      {
        "tenant_id": "3f1c2a9e-7b1d-4c55-9a0e-2d6f1b7c8e90",
        "namn": "Städbolaget AB",
        "org_number": "5591234567",
        "status": "aktiv",
        "plan": "fixra",
        "seats": 8,
        "addons": [
          "ticket"
        ],
        "rabatt_pct": 0,
        "aktiva_anvandare": 6,
        "mrr_ore": 288200,
        "provperiod_slut": null,
        "halsa_score": 72,
        "halsa_signaler": []
      }
    ]
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 PARTNER_AVSTANGD403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/partner/v1/kunder" \
  -H "Authorization: Bearer fx_ptnr_DIN_NYCKEL"
post/partner/v1/kunderkunder.write

Skapa kund

Samma väg och regler som portalens Skapa kund (`pp_kund_skapa`): signup_request → onboarding → välkomstmejl med partnerns namn och logga. Kunden aktiverar själv.

Kropp

FältTypBeskrivning
company_name *string
org_number *string
full_name *string
email *string
phonestring
industrystring
seats *integer
addonsarray
trial_daysinteger
discount_pctnumber
notestring
Svarets schema (data)
FältTypBeskrivning

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "onboarding_id": "3f1c2a9e-7b1d-4c55-9a0e-2d6f1b7c8e90",
    "email": "anna@nyastad.se",
    "company_name": "Nya Städ AB",
    "seats": 5,
    "addons": [],
    "trial_days": 30,
    "discount_pct": 0,
    "mejl_status": "koat"
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 PARTNER_AVSTANGD403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 BOLAG_FINNS_REDAN422 DEAL_SKYDDAD422 PRIS_UNDER_GOLV422 OGILTIG_PROVPERIOD422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/partner/v1/kunder" \
  -H "Authorization: Bearer fx_ptnr_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"company_name":"Nya Städ AB","org_number":"559123-4567","full_name":"Anna Andersson","email":"anna@nyastad.se","seats":5,"addons":[],"trial_days":30}'
get/partner/v1/kunder/{tenant_id}kunder.read

Hämta kund

Kundkortet (`pp_kund_kort`): licens, administratörer, licenshistorik och onboarding.

Parametrar

  • tenant_idstig · krävs
Svarets schema (data)
FältTypBeskrivning

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "kund": {
      "tenant_id": "3f1c2a9e-7b1d-4c55-9a0e-2d6f1b7c8e90",
      "namn": "Städbolaget AB",
      "org_number": "5591234567",
      "status": "aktiv",
      "plan": "fixra",
      "seats": 8,
      "addons": [
        "ticket"
      ],
      "rabatt_pct": 0,
      "aktiva_anvandare": 6,
      "mrr_ore": 288200,
      "provperiod_slut": null,
      "halsa_score": 72,
      "halsa_signaler": []
    },
    "administratorer": [],
    "licenshistorik": [],
    "onboarding": null
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 PARTNER_AVSTANGD403 SAKNAR_BEHORIGHET404 KUND_SAKNAS413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/partner/v1/kunder/{tenant_id}" \
  -H "Authorization: Bearer fx_ptnr_DIN_NYCKEL"
patch/partner/v1/kunder/{tenant_id}/licenslicenser.write

Ändra licens

Antal användare, tillägg och rabatt (`pp_licens_andra`). Loggas i licenshistoriken med aktören `api:<prefix>` och ger händelsen `licens.andrad`.

Parametrar

  • tenant_idstig · krävs

Kropp

FältTypBeskrivning
seatsinteger
addonsarray
discount_pctnumber
reasonstring
Svarets schema (data)
FältTypBeskrivning

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "tenant_id": "3f1c2a9e-7b1d-4c55-9a0e-2d6f1b7c8e90",
    "andrad": true,
    "licens": {
      "seats": 8,
      "addons": [
        "ticket"
      ],
      "discount_pct": 0
    },
    "mrr_ore": 288200
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 PARTNER_AVSTANGD403 SAKNAR_BEHORIGHET404 KUND_SAKNAS413 PAYLOAD_FOR_STOR422 SEATS_UNDER_AKTIVA422 PRIS_UNDER_GOLV422 LICENS_UPPSAGD422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X PATCH "https://api.fixra.se/partner/v1/kunder/{tenant_id}/licens" \
  -H "Authorization: Bearer fx_ptnr_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"seats":8,"addons":["ticket"]}'
post/partner/v1/kunder/{tenant_id}/provperiodlicenser.write

Förläng provperiod

Förlänger provperioden med `dagar` (`pp_provperiod_forlang`), inom partnerns högsta provperiod.

Parametrar

  • tenant_idstig · krävs

Kropp

FältTypBeskrivning
dagar *integer
Svarets schema (data)
FältTypBeskrivning

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "tenant_id": "3f1c2a9e-7b1d-4c55-9a0e-2d6f1b7c8e90",
    "provperiod_slut": "2026-11-15",
    "tidigare": "2026-11-08"
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 PARTNER_AVSTANGD403 SAKNAR_BEHORIGHET404 KUND_SAKNAS413 PAYLOAD_FOR_STOR422 EJ_PROVPERIOD422 OGILTIG_PROVPERIOD422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/partner/v1/kunder/{tenant_id}/provperiod" \
  -H "Authorization: Bearer fx_ptnr_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"dagar":7}'
get/partner/v1/provisionprovision.read

Provision för en månad

Provisionsrader per kund och summa (`pp_provision`). Utan `period` gäller innevarande månad.

Parametrar

  • periodfråga— YYYY-MM.
Svarets schema (data)
FältTypBeskrivning

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "period": "2026-09-01",
    "last": false,
    "summa_ore": 57640,
    "rader": []
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 PARTNER_AVSTANGD403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 OGILTIG_PERIOD422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/partner/v1/provision" \
  -H "Authorization: Bearer fx_ptnr_DIN_NYCKEL"
post/partner/v1/dealsdeals.write

Registrera deal

Dealregistrering (`pp_deal_registrera`). Fixra beslutar; beslutet kommer som `deal.beslutad`.

Kropp

FältTypBeskrivning
company_name *string
org_number *string
contact_namestring
contact_emailstring
est_seatsinteger
notestring
Svarets schema (data)
FältTypBeskrivning

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "deal_id": "3f1c2a9e-7b1d-4c55-9a0e-2d6f1b7c8e90",
    "status": "vantar"
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 PARTNER_AVSTANGD403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 DEAL_SKYDDAD422 DEAL_FINNS422 BOLAG_FINNS_REDAN422 OGILTIGT_ORGANISATIONSNUMMER422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/partner/v1/deals" \
  -H "Authorization: Bearer fx_ptnr_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"company_name":"Prospekt AB","org_number":"559876-5432","est_seats":10}'
get/partner/v1/dealsdeals.write

Lista deals

Partnerns dealregistreringar (`pp_deals`).

Svarets schema (data)
FältTypBeskrivning

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "deals": []
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 PARTNER_AVSTANGD403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/partner/v1/deals" \
  -H "Authorization: Bearer fx_ptnr_DIN_NYCKEL"
get/partner/v1/webhookswebhooks.manage

Lista webhooks

Partnerns mottagare och händelsekatalogen.

Svarets schema (data)
FältTypBeskrivning

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "webhooks": [
      {
        "id": "3f1c2a9e-7b1d-4c55-9a0e-2d6f1b7c8e90",
        "url": "https://exempel.se/fixra",
        "beskrivning": null,
        "events": [
          "licens.andrad"
        ],
        "is_active": true,
        "avstangd_efter_fel": null,
        "senaste_status": null,
        "senaste_fel": null,
        "senaste_leverans": null,
        "skapad": "2026-10-08T12:00:00Z"
      }
    ],
    "handelser": [
      "kund.aktiverad",
      "kund.uppsagd",
      "licens.andrad",
      "provperiod.slutar",
      "halsa.risk",
      "deal.beslutad",
      "provision.last"
    ]
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 PARTNER_AVSTANGD403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/partner/v1/webhooks" \
  -H "Authorization: Bearer fx_ptnr_DIN_NYCKEL"
post/partner/v1/webhookswebhooks.manage

Skapa webhook

Ny mottagare. Svaret har `secret` (whsec_…) en enda gång — signaturen är `X-Fixra-Signature: t=<unix>,v1=<hex HMAC-SHA256 av "t.body">`, samma som Öppet API.

Kropp

FältTypBeskrivning
url *stringBara https://.
events *array
descriptionstring
Svarets schema (data)
FältTypBeskrivning

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "id": "3f1c2a9e-7b1d-4c55-9a0e-2d6f1b7c8e90",
    "url": "https://exempel.se/fixra",
    "beskrivning": null,
    "events": [
      "licens.andrad"
    ],
    "is_active": true,
    "avstangd_efter_fel": null,
    "senaste_status": null,
    "senaste_fel": null,
    "senaste_leverans": null,
    "skapad": "2026-10-08T12:00:00Z",
    "secret": "whsec_…"
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 PARTNER_AVSTANGD403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 WEBHOOK_URL_OGILTIG422 HANDELSE_OGILTIG422 WEBHOOK_GRANS_NADD422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/partner/v1/webhooks" \
  -H "Authorization: Bearer fx_ptnr_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://exempel.se/fixra","events":["licens.andrad","kund.aktiverad"]}'
patch/partner/v1/webhooks/{id}webhooks.manage

Ändra webhook

Adress, händelser, beskrivning eller på/av. Hemligheten byts inte.

Parametrar

  • idstig · krävs

Kropp

FältTypBeskrivning
urlstring
eventsarray
descriptionstring
is_activeboolean
Svarets schema (data)
FältTypBeskrivning

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "3f1c2a9e-7b1d-4c55-9a0e-2d6f1b7c8e90",
    "url": "https://exempel.se/fixra",
    "beskrivning": null,
    "events": [
      "licens.andrad"
    ],
    "is_active": true,
    "avstangd_efter_fel": null,
    "senaste_status": null,
    "senaste_fel": null,
    "senaste_leverans": null,
    "skapad": "2026-10-08T12:00:00Z"
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 PARTNER_AVSTANGD403 SAKNAR_BEHORIGHET404 WEBHOOK_SAKNAS413 PAYLOAD_FOR_STOR422 WEBHOOK_URL_OGILTIG422 PAYLOAD_OGILTIG429 STRYPT429 RATELIMIT
curl -X PATCH "https://api.fixra.se/partner/v1/webhooks/{id}" \
  -H "Authorization: Bearer fx_ptnr_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"is_active":true}'
delete/partner/v1/webhooks/{id}webhooks.manage

Ta bort webhook

Tar bort mottagaren och dess hemlighet.

Parametrar

  • idstig · krävs
Svarets schema (data)
FältTypBeskrivning

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "id": "3f1c2a9e-7b1d-4c55-9a0e-2d6f1b7c8e90",
    "borttagen": true
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 PARTNER_AVSTANGD403 SAKNAR_BEHORIGHET404 WEBHOOK_SAKNAS413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X DELETE "https://api.fixra.se/partner/v1/webhooks/{id}" \
  -H "Authorization: Bearer fx_ptnr_DIN_NYCKEL"
post/partner/v1/webhooks/{id}/testwebhooks.manage

Skicka ping

Lägger en `ping` till just den här mottagaren.

Parametrar

  • idstig · krävs
Svarets schema (data)
FältTypBeskrivning

Exempelsvar · 201

{
  "ok": true,
  "data": {
    "event_id": "3f1c2a9e-7b1d-4c55-9a0e-2d6f1b7c8e90",
    "webhook_id": "3f1c2a9e-7b1d-4c55-9a0e-2d6f1b7c8e90",
    "type": "ping"
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 PARTNER_AVSTANGD403 SAKNAR_BEHORIGHET404 WEBHOOK_SAKNAS413 PAYLOAD_FOR_STOR429 STRYPT429 RATELIMIT
curl -X POST "https://api.fixra.se/partner/v1/webhooks/{id}/test" \
  -H "Authorization: Bearer fx_ptnr_DIN_NYCKEL"
get/partner/v1/webhooks/leveranserwebhooks.manage

Leveranslogg

De senaste leveranserna: händelse, status, försök och HTTP-svar.

Parametrar

  • limitfråga
Svarets schema (data)
FältTypBeskrivning

Exempelsvar · 200

{
  "ok": true,
  "data": {
    "leveranser": []
  },
  "warnings": [],
  "errors": []
}

Felkoder

401 NYCKEL_OGILTIG401 NYCKEL_ATERKALLAD403 SCOPE_SAKNAS403 PARTNER_AVSTANGD403 SAKNAR_BEHORIGHET413 PAYLOAD_FOR_STOR422 PARAMETER_OGILTIG429 STRYPT429 RATELIMIT
curl -X GET "https://api.fixra.se/partner/v1/webhooks/leveranser" \
  -H "Authorization: Bearer fx_ptnr_DIN_NYCKEL"

Ändringslogg

  • Bilagor har download_url och download_expires_at: en signerad länk som gäller 60 minuter och skapas vid varje läsning och webhookleverans (attachment.created). null när filen saknas. Additivt, samma Fixra-Version.
  • v1 utökad: material, inköpsorder, leverantörer, leverantörsfakturor och projekt — 38 operationer och tio nya scopes. Inköpspriset på artiklar lämnas aldrig ut. Additivt, samma Fixra-Version.
  • v1 utökad: fält & arbetsorder — checklistor, tillstånd, omstädning, akutorder, underentreprenör, extra tid, pass (hämta, flytta, flaggor, fordon, start, slutför, raster, massombokning), bilagor med uppladdnings-URL, uppgifter, ärenden, förfrågningar, kundanteckningar, avvikelser med åtgärder och typer, samt åtta nya webhook-händelser. Additivt, samma Fixra-Version.
  • v1 lanserad: resurser, nycklar med scopes, testläge, webhooks och OpenAPI 3.1.