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. Be administratören i kundens organisation skapa en API-nyckel under
Inställningar → API-nycklarmed rätt scopes för er integration. - 2. Nyckeln visas en gång i klartext på formen
fsk_live_…— spara den säkert. Vi lagrar bara en SHA-256-hash, så den kan inte återskapas. - 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.