Partner-API · v1

Utvecklare & integratörer

FRES-App exponerar ett REST-API med Bearer-autentisering för partners som vill läsa eller skriva data från sina egna system — t.ex. fastighetsförvaltning, drift-/larmcentraler, fakturasystem eller BI-verktyg.

Komma igång

  1. 1. Be administratören i kundens organisation skapa en API-nyckel underInställningar → API-nycklarmed rätt scopes för er integration.
  2. 2. Nyckeln visas en gång i klartext på formenfsk_live_…— spara den säkert. Vi lagrar bara en SHA-256-hash, så den kan inte återskapas.
  3. 3. Skicka nyckeln som Authorization: Bearer fsk_live_…på varje anrop. Testa enklast mot/api/v1/mesom returnerar vilken organisation token:n är knuten till.

Snabbtest med curl

Sätt din nyckel som miljövariabel och kör smoke-testet — om allt är rätt får ni tillbaka org-id, namn och vilka scopes nyckeln har.

export FRES_API_KEY="fsk_live_abc123def456..."

# 1. Smoke-test — vem är jag?
curl -s "https://app.fresab.se/api/v1/me" \
  -H "Authorization: Bearer $FRES_API_KEY"

# 2. Lista fastigheter (kräver scope sites:read)
curl -s "https://app.fresab.se/api/v1/sites?limit=10" \
  -H "Authorization: Bearer $FRES_API_KEY"

# 3. Lista senaste 30 dagarnas SBA-protokoll
curl -s "https://app.fresab.se/api/v1/sba-protocols?performed_since=$(date -u -d '30 days ago' +%FT%TZ)" \
  -H "Authorization: Bearer $FRES_API_KEY"

# 4. Rapportera in en utförd brandskyddsrond
curl -s -X POST "https://app.fresab.se/api/v1/sba-protocols" \
  -H "Authorization: Bearer $FRES_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "site_id":       "00000000-0000-0000-0000-000000000000",
    "protocol_type": "brandskyddsrond",
    "name":          "Månadsrond juni 2026",
    "status":        "completed",
    "performed_at":  "2026-06-17T09:00:00Z",
    "observations":  "Allt OK utom blockerad utrymningsväg i källaren.",
    "deviations_found": true,
    "items": []
  }'

Tillgängliga endpoints

Urval för att komma igång

Vi har sammanställt ett urval av de mest efterfrågade endpoints så ni kan köra era tester och bygga en första integration. Om ni behöver fler resurser (t.ex. fakturering, projekt, time-entries eller specifika filter) — mejlainfo@fresab.se så utökar vi biblioteket. Vi prioriterar use-cases från befintliga partners.

Arbetsordrar

work-orders:read · work-orders:write
  • GET/api/v1/work-ordersLista AO. Stöd för status, site_id, updated_since, cursor.
  • GET/api/v1/work-orders/{id}Hämta en specifik AO med detaljer.
  • POST/api/v1/work-ordersSkapa en AO. AO-nummer tilldelas automatiskt.

SBA — protokoll & ronderingar

sba:read · sba:write
  • GET/api/v1/sba-protocolsLista protokoll. Filter: site_id, type, status, performed_since.
  • GET/api/v1/sba-protocols/{id}Hämta ett enskilt protokoll med items + observationer.
  • POST/api/v1/sba-protocolsRapportera in ett genomfört protokoll.
  • GET/api/v1/sba/objectsLista brandskyddsobjekt (släckare, branddörrar etc.).
  • POST/api/v1/sba/objectsRegistrera ett nytt brandskyddsobjekt på en fastighet.
  • GET/api/v1/sba/deviationsLista avvikelser. Filter: site_id, status, severity.
  • POST/api/v1/sba/deviationsSkapa en avvikelse kopplad till ett protokoll.

Kunder

customers:read · customers:write
  • GET/api/v1/customersLista kunder. Filter: type (company|private|brf), search.
  • POST/api/v1/customersSkapa kund.

Fastigheter

sites:read
  • GET/api/v1/sitesLista fastigheter. Filter: customer_id, updated_since.

Checklistor

checklists:read
  • GET/api/v1/checklistsLista företagets checklistor (mallar).

Introspektion

vilken som helst
  • GET/api/v1/meReturnerar vilken organisation token:n verkar mot. Bra för smoke-test.

Paginering

List-endpoints använder cursor-paginering. Svaret innehållerpagination.next_cursorom det finns fler rader — skicka tillbaka det som?cursor=…i nästa anrop. Max limit=100.

Inkrementell synk

Alla list-endpoints stöder?updated_since=<ISO-tid>för att bara hämta rader uppdaterade efter en viss tidpunkt. Spara den högsta returneradeupdated_atsom ert nästa cursor-värde — perfekt för att bygga en periodisk poll-integration.

Rate limits

Standard är 120 anrop/minut per API-nyckel. Vid överskridande returneras HTTP 429 medRetry-After: 60. Kontakta oss om er integration behöver högre tak.

Felformat

Alla fel returneras i samma struktur:

{
  "error": {
    "code": "invalid_status",
    "message": "status måste vara: draft, completed, signed"
  }
}

Saknar du en endpoint, eller har frågor?

Skicka ett mejl till info@fresab.se med kort beskrivning av er integration och vilken data ni behöver läsa eller skriva. Vi svarar inom någon arbetsdag och kan oftast lägga till nya endpoints inom en vecka om use-caset är tydligt.