# Felsökning & FAQ

Nästan alla supportärenden vi får är en av punkterna nedan. Leta upp symtomet, läs orsaken, gå till sidan som förhindrar det.

## Sessionen dör när flera klienter kör

- **Symtom:** anrop börjar plötsligt ge `401` fastän token nyss fungerade, ofta i vågor.
- **Orsak:** ett API-konto har en aktiv session. Varje ny inloggning avlivar den föregående — inklusive era egna testskript, en andra instans i klustret eller en kollegas lokala miljö.
- **Åtgärd:** en singleton per konto, delad tokenlagring mellan instanser och separata konton per miljö. Se [Autentisering & tokens](/docs/authentication#one-session-per-account).

## Inloggning vid varje öppning

- **Symtom:** långsamma öppningar, sporadiska `401` och dörrar som inte öppnas när två personer trycker samtidigt.
- **Orsak:** varje öppning loggar in på nytt, vilket både lägger till latens och avlivar den föregående sessionen.
- **Åtgärd:** logga in server-side en gång och återanvänd token. Öppningsögonblicket ska innehålla exakt ett anrop. Se [Golden path](/docs/golden-path#unlock-moment).

## Glömd roterad refresh-token

- **Symtom:** förnyelsen fungerar en gång och misslyckas nästa gång, med `400` eller `401` från `/api/auth/refresh`.
- **Orsak:** refresh-tokens är engångs. Svaret innehåller **både** en ny access-token och en ny refresh-token, och den gamla dör direkt. Sparas bara access-token är sessionen förlorad vid nästa förnyelse.
- **Åtgärd:** skriv båda i samma atomiska operation. Se [Autentisering & tokens](/docs/authentication#token-refresh).

## Två samtidiga förnyelser

- **Symtom:** sessionen dör under last, men fungerar i lugna perioder.
- **Orsak:** två samtidiga `401` startar två parallella refresh-anrop. Det andra använder en token som det första just förbrukat.
- **Åtgärd:** single-flight-lås runt förnyelsen. Se [Autentisering & tokens](/docs/authentication#failure-handling).

## Enhetslistan hämtas vid varje öppning

- **Symtom:** onödig latens och fler anrop än nödvändigt, ibland `429`.
- **Orsak:** enhetslistan hämtas i öppningsögonblicket i stället för på schema.
- **Åtgärd:** cachelagra mappningen och uppdatera den på schema samt vid `404`. Se [Golden path](/docs/golden-path#device-mapping) och [Gränser & retry](/docs/limits).

## Fel eller föråldrat deviceId

- **Symtom:** `404` på unlock för en dörr som brukade fungera.
- **Orsak:** `{deviceId}` är hårdkodat, eller mappningen är gammal efter att en enhet bytts ut.
- **Åtgärd:** kör om enhetssynken och uppdatera mappningen. Hårdkoda aldrig id:t. Se [Koncept & entitetsmodell](/docs/concepts#device-id).

## 403 på en dörr ni ser i listan

- **Symtom:** enheten finns i `GET /api/user/device` men unlock ger `403`.
- **Orsak:** nyckeln som ger öppningsrätt saknas eller har återkallats, även om enheten är synlig.
- **Åtgärd:** kontakta KiiOn för att kontrollera nyckeldelningen. Retry hjälper inte. Se [Support](/docs/support).

## Rätt anrop, fel miljö

- **Symtom:** `401` direkt efter en till synes lyckad inloggning, eller enhetslistan är tom.
- **Orsak:** STAGE-uppgifter används mot PROD eller tvärtom. Kontona är separata.
- **Åtgärd:** kontrollera `BASE_URL` mot kontot. Se [API-referens](/docs/api-reference#base-urls).

## Token gick ut mitt i drift

- **Symtom:** allt fungerar i dagar och slutar sedan fungera.
- **Orsak:** ingen proaktiv förnyelse — koden väntar på ett fel som kommer när access-token går ut.
- **Åtgärd:** förnya var 36:e timme eller utifrån `exp`. Se [Autentisering & tokens](/docs/authentication#lifetimes).

## 200 på unlock men dörren öppnas inte

- **Symtom:** API:t svarar `200`, dörren rör sig inte.
- **Orsak:** `200` betyder att kommandot är accepterat och vidarebefordrat — inte att dörren fysiskt öppnats. Enheten kan vara offline eller ur räckvidd.
- **Åtgärd:** läs enhetens tillstånd med `GET /api/device/{deviceId}` och kontrollera `online`. Se [Quickstart](/docs/quickstart#step-3-unlock).

**Hittar du inte felet?**
- [Statuskoder & felsvar — hela katalogen](/docs/errors)
- [Support — kanaler och eskalering](/docs/support)
