Guider
Praktiska guider för att integrera med Finvis publika API.
OnboardingLägg till klient, företag och bankkontonRekommenderat flöde när en partnerintegration ska börja hämta bankdata för en ny klient eller ett nytt företag.
Åtkomstgränsen för kunddata. API-klienten får bara läsa och skriva data för företag som är kopplade till den klientmiljön.
Den juridiska personen du onboardar. Svaret från /companies innehåller id som används som company_id och X-Company-ID.
Ett bankkonto under ett företag. Kontot identifieras stabilt med bank_id och external_ref, vanligtvis IBAN.
Begär token med rätt scopes
Använd OAuth2 client credentials. För onboarding behövs write:ledger; för att läsa bankdata behövs read:ledger och ofta read:reporting.
curl -sS -X POST https://api.finvis.se/public/auth/token/ \
-u "${CLIENT_ID}:${CLIENT_SECRET}" \
-d "grant_type=client_credentials" \
-d "scope=read:ledger write:ledger read:reporting"Upserta företaget
POST /companies är idempotent på organisationsnummer för API-klienten. Spara id från svaret; det är company_id för alla efterföljande företagsscopade anrop.
curl -sS -X POST https://api.finvis.se/public/companies/ \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Idempotency-Key: company-5590284682-v1" \
-H "Content-Type: application/json" \
-d '{"orgnr":"5590284682","name":"Innovaktiv AB","country":"SE"}'Upserta bankkontot
Skicka X-Company-ID och samma company_id i body. Kontot upsertas med klientmiljö, bank_id och external_ref, så samma konto kan skickas igen utan dubletter.
curl -sS -X POST https://api.finvis.se/public/accounts/ \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "X-Company-ID: ${COMPANY_ID}" \
-H "Idempotency-Key: account-seb-main-v1" \
-H "Content-Type: application/json" \
-d '{
"company_id":"${COMPANY_ID}",
"bank_id":"seb",
"external_ref":"SE1750000000050111084407",
"external_ref_type":"IBAN",
"currency":"SEK",
"status":"active"
}'Läs bankdata med company header
Alla konto-, saldo-, transaktions- och rapporteringsanrop ska skickas med X-Company-ID. Det gör att samma API-klient kan arbeta säkert med flera företag.
curl -sS "https://api.finvis.se/public/accounts/${ACCOUNT_ID}/transactions?from_date=2026-01-01" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "X-Company-ID: ${COMPANY_ID}"Kontrakt att följa
- •Spara id-värdena från API-svaren. Inferera inte ägarskap senare från IBAN eller kontonummer.
- •X-Company-ID måste tillhöra API-klienten och matcha company_id när body eller query innehåller company_id.
- •Alla skrivande onboarding-anrop ska ha Idempotency-Key så retries inte skapar dubletter.
- •Använd read:ledger för bankkonton, saldon och transaktioner; använd write:ledger för att skapa eller uppdatera företag och konton.
API-kontraktFiltrering, paginering och felhanteringPraktiska regler för listanrop, headers, felkoder och retries i produktionsintegrationer.
Headers
- Authorization
- Obligatorisk för alla skyddade anrop. Skicka Bearer-token från OAuth2 client credentials-flödet.
- X-Company-ID
- Obligatorisk för företagsscopade bankdata-, rapporterings- och betalningsanrop. Värdet måste vara företagets id från /companies.
- Idempotency-Key
- Obligatorisk för skrivande endpoints. Använd en stabil unik nyckel per logisk operation, inte per retry.
- Content-Type
- Skicka application/json för JSON-body. Token-endpointen använder application/x-www-form-urlencoded.
Vanliga filter
- from_date / to_date
- ISO-datum i formatet YYYY-MM-DD. Använd båda för stabila avgränsade exporter.
- page / page_size
- page är 1-indexerad. page_size är 100 som standard och max 1000. Återställ page till 1 när filter ändras.
- account_id
- Begränsar resultat till ett konto inom aktuell X-Company-ID-scope.
- direction
- Transaktionsfilter med värdena credit eller debit.
- currency
- ISO 4217-kod, till exempel SEK eller EUR. Aggregat ska alltid tolkas per valuta.
- status / balance_type
- Endpoint-specifika filter, till exempel kontostatus eller saldotyp. Skicka inte okända värden.
Paginering
Alla listresponser använder samma envelope. count är totalt antal matchande rader, total_pages är antal sidor för vald page_size och results innehåller aktuell sida.
{
"count": 1234,
"total_pages": 13,
"page": 2,
"page_size": 100,
"next": "https://api.finvis.se/public/transactions/?page=3",
"previous": "https://api.finvis.se/public/transactions/?page=1",
"results": []
}Felkoder
- 400 validation_error
- Requesten är formellt felaktig eller saknar obligatoriska fält. Läs errors för fältspecifika detaljer.
- 401 authentication_failed
- Token saknas, är ogiltig eller har gått ut. Hämta ny token och försök igen.
- 403 permission_denied
- Token saknar scope eller X-Company-ID är inte åtkomlig för API-klienten.
- 404 not_found
- Objektet finns inte inom aktuell klient- och företagsscope.
- 409 conflict
- Operationen krockar med befintligt tillstånd, ofta idempotency key med annan payload.
- 429 throttled
- Rate limit. Respektera Retry-After eller X-RateLimit-Reset innan retry.
Retries och stabilitet
- •Retrya 429 och tillfälliga 5xx-fel med exponential backoff och jitter.
- •Retrya inte 400, 403 eller 404 utan att ändra requesten.
- •Förnya token före expiry; vid 401, hämta ny token och kör om anropet en gång.
- •Vid filtrerade listor, håll sortering och filter stabila och följ next-länken när den finns.
Filtrerat listanrop
curl -sS "https://api.finvis.se/public/transactions/?from_date=2026-01-01&to_date=2026-01-31&direction=credit&page=1&page_size=100" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "X-Company-ID: ${COMPANY_ID}"Skrivande anropIdempotensAlla skrivande endpoints kräver en Idempotency-Key-header för replay-skydd.
Regler
- 1. Samma nyckel + samma payload returnerar det ursprungliga svaret.
- 2. Samma nyckel + annan payload returnerar 409 Conflict.
- 3. Nycklar löper ut efter en retentionsperiod.
Exempel
curl -X POST https://api.finvis.se/public/webhooks/ \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Idempotency-Key: 9c1a1c1d-3c02-48b6-8f36-6c58d15f8d30" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/webhooks/finvis", "event_types": ["transaction.created"]}'ÅtkomstKlientåtkomst för partnersSå ger du en integration säker åtkomst till rätt klientdata i Finvis.
Arkitektur
Finvis använder en OAuth-klient per partnerintegration och separata företagsscopade anrop med X-Company-ID. Det gör att samma integration kan läsa bankdata för flera klienter och företag utan att behörigheter blandas.
Viktiga punkter
- • Inga refresh tokens används. Förnya genom att begära ny access token.
- • Företagsscopade anrop kräver Authorization-header och X-Company-ID-header.
- • X-Company-ID måste tillhöra API-klienten och företaget som anropet gäller.
Token-flöde
Använd klientuppgifter och scopes för att hämta en access token med rätt behörighet.
POST /public/auth/token/{
"grant_type": "client_credentials",
"scope": "read:ledger read:reporting"
}{
"access_token": "....",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "read:ledger read:reporting"
}API-anrop
Företagsscopade /public/*-anrop ska inkludera bearer-token och X-Company-ID så anropet kopplas till rätt företagsdata.
curl -sS https://api.finvis.se/public/accounts/ \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "X-Company-ID: ${COMPANY_ID}"Tokenförnyelse
Inga refresh tokens. Anropa token-endpointen igen före utgångsdatum. Rekommenderat: förnya vid ~55 minuter när expires_in=3600.
Klientisolering
Åtkomst styrs av API-klientens kopplade företag, X-Company-ID och OAuth2-scopes. Ett anrop kan inte läsa data för ett företag som inte är kopplat till klienten.
Skrivbegränsning
POST, PUT och PATCH med partner-tokens returnerar 403 om skrivåtkomst inte har godkänts explicit.