For utviklere
Partner-API
Send oss en klient under deres egen pseudonyme identifikator - uten e-post, navn og andre personopplysninger - og les når som helst status for klientens opplæring. Det fungerer som en compliancesjekk før en kontrakt, et innskudd eller en utbetaling.
Versjon 1.3.2 · JSON over HTTPS · OpenAPI
Slik fungerer det
API-et er det samme for alle partnere. I fem trinn:
- Vi slår på API-et for bedriften deres; i administrasjonen deres oppretter dere en API-nøkkel under fanen API.
- Når en klient skal læres opp, kaller systemet deres POST /v1/users med deres identifikator for klienten.
- Vi oppretter en profil uten e-post og returnerer en inngangslenke (entryUrl); den viser dere klienten som en knapp.
- Klienten klikker på den og er rett inne i kurset.
- Status leser dere når som helst via GET /v1/users/{identifier}, eller vi varsler serveren deres via en webhook.
Dere er behandlingsansvarlig for identifikatoren, vi behandler bare pseudonymiserte opplysninger. Send aldri en e-postadresse eller et navn som identifikator - en e-postadresse avviser API-et med feilen 422.
Adresse og autentisering
Hvert kall går via HTTPS til adressen nedenfor og bærer API-nøkkelen deres i headeren Authorization.
https://api.responsiblo.com Authorization: Bearer rsb_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- rsb_live_... åpner produksjonsprogrammet deres, rsb_test_... testprogrammet deres (sandbox).
- Nøkkelen vises bare én gang, når den opprettes; vi lagrer bare fingeravtrykket av den. Oppbevar den som en hemmelighet på serveren deres - aldri i en nettleser eller en app.
- Nøkkelen har tillatelser: read (status og listen over personer, sertifikatet) og write (å sende og anonymisere personer). Den kan være begrenset til IP-adressene deres og ha en gyldighet.
- Bytte: dere oppretter en ny nøkkel, den gamle gjelder i 7 dager til og utløper deretter.
- Svar lagres aldri i hurtigbuffer (Cache-Control: no-store), og API-et tar ikke imot kall fra en nettleser (ingen CORS).
POST /v1/users
Sender en person til nøkkelens program (tillatelse write).
curl -X POST https://api.responsiblo.com/v1/users \
-H "Authorization: Bearer $RSB_KEY" \
-H "Content-Type: application/json" \
-d '{"identifier":"client-48213","language":"cs","label":"campaign-2026-10"}'
| Felt | Påkrevd | Betydning |
|---|---|---|
identifier |
ja | Deres pseudonym for personen, 1 til 64 tegn A-Z a-z 0-9 . _ : @ -; aldri en e-postadresse (avvist med 422). |
program |
nei | Programmets kode; hvis dere oppgir den, må det være nøkkelens program. |
language |
nei | Kursets språk (cs, en, ...); standard er programmets første språk. |
label |
nei | Deres etikett - en kohort eller en kampanje, 1 til 64 tegn, aldri en personopplysning. |
expiresAt |
nei | Siste dag med tilgang, ÅÅÅÅ-MM-DD. |
201 Created for en ny person, 200 OK når identifikatoren allerede finnes - ingenting endres, kallet kan trygt gjentas. Innholdet i svaret er status nedenfor, inkludert entryUrl. En oppbrukt grense for personer eller for programmets lisenser gir 403.
GET /v1/users/{identifier}
En persons status (tillatelse read): det en compliancesjekk trenger, ikke noe mer.
curl https://api.responsiblo.com/v1/users/client-48213 -H "Authorization: Bearer $RSB_KEY"
{
"identifier": "client-48213",
"program": "your-program",
"status": "in_progress",
"progress": 43,
"lessonsCompleted": 3,
"lessonsTotal": 7,
"quizScore": null,
"label": "campaign-2026-10",
"createdAt": "2026-10-20T10:02:11Z",
"startedAt": "2026-10-20T10:05:40Z",
"completedAt": null,
"lastActivityAt": "2026-10-20T10:31:40Z",
"expiresAt": null,
"certificate": null,
"entryUrl": "https://your-company.responsiblo.com/entry/..."
}
status | Betydning |
|---|---|
enrolled |
sendt, ikke gått inn ennå |
started |
gått inn, ingenting fullført ennå |
in_progress |
har fullført leksjoner, programmet ikke ennå |
completed |
programmet er fullført (completedAt) |
expired |
tilgangen er avsluttet (expiresAt er passert; en person i sandboxen avsluttes etter 7 dager) |
quizScore er resultatet av den avsluttende quizen i %, så snart den er fullført. Tidspunkter er i UTC på hele sekunder. Feltet certificate inneholder personens sertifikat (se nedenfor); så lenge personen ikke har et, er det null.
?include=detail
Legger til fremdriften i hvert kurs og resultatet av hver quiz - aldri de enkelte svarene.
"courses": [{"id": "733db340-...", "name": "Introduction", "progress": 40, "lessonsCompleted": 2, "lessonsTotal": 5, "completed": false}],
"quizzes": [{"id": "d2e72fd7-...", "name": "Quiz of the introduction", "score": 85, "completedAt": "2026-10-20T10:31:40Z"}]
GET /v1/users
Liste over personene dere har sendt til nøkkelens program (tillatelse read), side for side: hvert element har samme form som status ovenfor. Valgfritt status (bare personer med den statusen), limit (1 til 500, standard 100) og cursor.
curl "https://api.responsiblo.com/v1/users?status=completed&limit=100" -H "Authorization: Bearer $RSB_KEY"
{
"items": [{ "identifier": "client-48213", "status": "completed", "...": "the state of GET /v1/users/{identifier}" }],
"nextCursor": "MjAyNi0xMC0yMFQxMDowMjoxMVp8...",
"limit": 100
}
curl "https://api.responsiblo.com/v1/users?status=completed&limit=100&cursor=MjAyNi0xMC0yMFQxMDowMjoxMVp8..." -H "Authorization: Bearer $RSB_KEY"
- Fortsett med cursor = nextCursor så lenge nextCursor ikke er null; markøren er en ugjennomsiktig tekst, sett den aldri sammen selv.
- Personene kommer etter når de ble sendt, i en fast rekkefølge (også ved samme tidspunkt), ingen to ganger; anonymiserte personer er ikke på listen.
- Med filteret status går vi gjennom høyst 2000 personer per side, en side kan derfor ha færre elementer enn limit, også ingen - fortsett så lenge det finnes en nextCursor.
Personens sertifikat
Så snart personen fullfører programmet, utsteder kurset et sertifikat - under personens pseudonym (profilens kallenavn ID XXXXXX), uten navn og uten e-post. Ingenting sendes på e-post; personens status inneholder feltet certificate med nummer, tidspunkter og den offentlige verifiseringssiden, og PDF-en laster dere ned via GET /v1/users/{identifier}/certificate.
"certificate": {
"number": "RSP-7KQ2-M4XH-9TWB",
"issuedAt": "2026-10-20T10:39:15Z",
"expiresAt": "2028-10-20T10:39:12Z",
"verifyUrl": "https://responsiblo.com/verify/RSP-7KQ2-M4XH-9TWB"
}
curl https://api.responsiblo.com/v1/users/client-48213/certificate -H "Authorization: Bearer $RSB_KEY" -o client-48213.pdf
- Verifiseringssiden verifyUrl viser bare pseudonymet, programmet, partneren og gyldigheten - aldri identifikatoren deres.
- PDF-en returnerer application/pdf (tillatelse read). Uten sertifikat er svaret 404 certificateNotFound, mens PDF-en fortsatt lages, 404 certificatePdfNotReady med Retry-After.
- Et tilbakekalt sertifikat utleveres aldri (feltet certificate er da null, PDF-en 404); et sertifikat med utløpt gyldighet forblir et sant bevis og utleveres.
- En webhook varsler om sertifikatet med hendelsen certificate.issued (rett etter user.completed).
DELETE /v1/users/{identifier}
Anonymiserer en person (tillatelse write): identifikatoren deres, etiketten og hver webhookmelding som nevner den, forsvinner fra profilen; inngangslenkene slutter å gjelde. Sertifikatet og resultatet av kurset blir værende under sertifikatets nummer - som compliancebevis.
curl -X DELETE https://api.responsiblo.com/v1/users/client-48213 -H "Authorization: Bearer $RSB_KEY" HTTP/1.1 204 No Content
Svar 204 uten innhold; hvert senere kall med samme identifikator returnerer 404 userNotFound, så en gjentakelse er trygg. Samme identifikator kan dere deretter sende på nytt som en ny person.
Inngangslenke
Vis entryUrl til personen (en knapp Start kurset i systemet deres). Den logger personen inn i kurset - uten e-post og uten passord.
Lenken gjelder i 30 dager og kan brukes flere ganger; hvert kall GET /v1/users/{identifier} returnerer en ny. Send den aldri til noen andre: den som har lenken, kommer inn som den personen.
Webhooks
Under fanen API i administrasjonen deres setter dere opp én webhook per program: en offentlig HTTPS-adresse til serveren deres og hendelsene. Deretter sender vi dere POST med JSON - bare identifikatorer og statuser, aldri inngangslenken.
| Hendelse | Når |
|---|---|
user.enrolled |
personen er sendt (første gang webhooken deres kjenner den) |
user.started |
personen har gått inn i kurset |
user.completed |
personen har fullført programmet |
certificate.issued |
personen har fått et sertifikat; data inneholder certificate (nummer, tidspunkter, verifyUrl) |
user.expired |
personens tilgang er avsluttet |
POST https://your-server.example/responsiblo/webhook
Content-Type: application/json
X-Responsiblo-Event: user.completed
X-Responsiblo-Delivery: 5b0c1f9e-2d1a-4a57-9a3e-0d6c9c1f2b77
X-Responsiblo-Signature: t=1792492800,v1=3f1c...e9
{
"id": "5b0c1f9e-2d1a-4a57-9a3e-0d6c9c1f2b77",
"type": "user.completed",
"createdAt": "2026-10-20T10:40:00Z",
"apiVersion": "1.3.2",
"program": "your-program",
"data": {
"identifier": "client-48213",
"status": "completed",
"progress": 100,
"lessonsCompleted": 7,
"lessonsTotal": 7,
"quizScore": 85,
"label": "campaign-2026-10",
"startedAt": "2026-10-20T10:05:40Z",
"completedAt": "2026-10-20T10:39:12Z",
"expiresAt": null
}
}
Signatur
Hver melding bærer headeren X-Responsiblo-Signature: t=<Unix-tid>,v1=<HMAC-SHA256 av teksten t.innhold med webhookens hemmelighet, hex>. Hemmeligheten (whsec_...) vises én gang når webhooken opprettes. Før dere stoler på en melding, kontroller signaturen og alderen på t; bruk X-Responsiblo-Delivery som idempotensnøkkel.
// PHP: $secret = "whsec_...", $header = X-Responsiblo-Signature, $body = the raw body
preg_match('/^t=(\d+),v1=([0-9a-f]{64})$/', $header, $m);
$valid = $m
&& abs(time() - (int) $m[1]) <= 300
&& hash_equals(hash_hmac('sha256', $m[1] . '.' . $body, $secret), $m[2]);
Levering og nye forsøk
Levert = svar 2xx innen 10 sekunder. Ellers prøver vi igjen etter 1 minutt, 5 minutter, 30 minutter, 2 timer og 12 timer, deretter gir vi opp. Omdirigeringer følger vi ikke.
20 ikke-leverte meldinger på rad slår av webhooken til dere slår den på igjen; meldingene fra den perioden venter. Knappen Test sender et ping; leveringsloggen finner dere i administrasjonen deres.
Hendelsen certificate.issued legger dere til en webhook i innstillingene for den; en webhook som ble opprettet før versjon 1.2, får den ikke av seg selv.
Feil
Hver feil har én og samme form: status, code, reason og message; en feil 422 legger til errors (felt - hva som er galt).
{ "status": "error", "code": 422, "reason": "invalidBody", "message": "The body is not valid.",
"errors": { "identifier": "identifier must be a pseudonym of the partner, never an e-mail address" } }
| HTTP | reason | Hva dere skal gjøre |
|---|---|---|
| 400 | invalidJson |
send ett JSON-objekt |
| 401 | missingToken, invalidToken |
send en gyldig nøkkel (en tilbakekalt og en utløpt nøkkel ser like ut); headeren WWW-Authenticate sier Bearer |
| 403 | scopeDenied, ipNotAllowed, apiDisabled, partnerInactive, spaceUnavailable, httpsRequired, userLimitReached, seatsExhausted |
nøkkelen har ikke lov til dette, API-et er slått av for bedriften deres, eller programmet er fullt |
| 404 | userNotFound, notFound |
i nøkkelens program finnes ingen person med denne identifikatoren (heller ikke en anonymisert) |
| 404 | certificateNotFound, certificatePdfNotReady |
personen har ennå ikke et sertifikat, eller PDF-en lages - prøv igjen etter Retry-After |
| 409 | identifierTaken |
identifikatoren tilhører en person i et annet program |
| 422 | invalidBody, invalidParameter |
se errors (et felt i innholdet eller en parameter i spørringen - hva som er galt) |
| 429 | rateLimited |
vent Retry-After sekunder |
| 500 | internalError |
prøv igjen senere; oppgi incidentId til kundestøtten vår |
For programmer og agenter
- Avgjør ut fra code og reason, aldri ut fra teksten i message; errors er et objekt felt -> hva som er galt.
- Gjenta bare 429, 500 og certificatePdfNotReady, og da etter Retry-After sekunder (ellers med økende intervall); gjenta ikke andre 4xx enn 429 uten å rette kallet.
- POST /v1/users er idempotent etter identifier (201 første gang, deretter 200); DELETE returnerer 204 første gang og 404 deretter - begge kan trygt gjentas.
- Dedupliser webhooks etter X-Responsiblo-Delivery; rekkefølgen på meldingene er ikke garantert, det er status i data som avgjør.
Låneveileder
Låneveilederen er et kort kurs for søkere hos en långiver: før kontrakten signeres, går søkeren gjennom tre leksjoner, åtte praktiske situasjoner og eventuelt en quiz, alt med tallene i sitt eget tilbud, og bekrefter tilbudet til slutt. På hver skjerm kan søkeren be om en forklaring. Dere sender tilbudet via API-et, får en inngangslenke, og en webhook varsler dere om resultatet.
Låneveilederen aktiverer vi etter avtale med dere.
Også her er søkeren bare deres pseudonyme profil fra POST /v1/users. Tilbudet identifiseres av referansene deres (externalApplicationId, offerReference) og dokumentene bare av en lenke med et SHA-256-fingeravtrykk - aldri navn, e-post, fødselsnummer, kontonummer eller telefonnummer. responsiblo godkjenner ikke lånet, laster ikke ned eller lagrer dokumentene, verifiserer ikke identiteten og utsteder ikke noe sertifikat for veilederen.
- Dere oppretter søkerens profil: POST /v1/users med deres pseudonym.
- Dere sender tilbudet: POST /v1/users/{identifier}/loan-offers; svaret 201 inneholder entryUrl.
- entryUrl gir dere søkeren via deres egen verifiserte kanal. Lenken gjelder i 30 dager og kan brukes flere ganger; veilederen viser tallene i søkerens tilbud.
- Når det er ferdig, får dere vite det via en webhook (loanGuide.completed, loanGuide.assistanceRequested med flere).
- Status leser dere via GET …/loan-offers/{offerReference}, dokumentasjonen for saksmappen deres via GET …/evidence. Endret tilbud = nytt tilbud med supersedes, trukket søknad = POST …/cancel.
Fram til aktiveringen svarer veilederens operasjoner 404 notFound eller 409 loanGuideNotConfigured. Tillatelsen write sender og kansellerer et tilbud, read leser status og dokumentasjonen.
POST /v1/users/{identifier}/loan-offers
Sender et tilbud til søkerens profil (tillatelse write). Den valgfrie headeren Idempotency-Key har 1 til 255 synlige ASCII-tegn. Eksempel: lån på 10 000 CZK, 10 800 CZK å betale i én betaling 30 dager etter utbetalingen, effektiv rente 155,10 %.
curl -X POST https://api.responsiblo.com/v1/users/applicant-30417/loan-offers \
-H "Authorization: Bearer $RSB_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: offer-30417-1" \
-d '{
"externalApplicationId": "APP-30417",
"offerReference": "OFF-30417-1",
"locale": "cs-CZ",
"currency": "CZK",
"principalMinor": 1000000,
"disbursedAmountMinor": 1000000,
"totalPayableMinor": 1080000,
"aprPercent": "155.10",
"interestRate": { "percent": "8", "period": "month" },
"repayment": {
"type": "singlePayment",
"amountMinor": 1080000,
"due": { "kind": "relative", "days": 30, "anchor": "disbursement" }
},
"documents": [
{ "role": "precontract_information", "reference": "DOC-PRE-30417", "title": "Předsmluvní informace",
"url": "https://documents.lender.example/pre/30417.pdf",
"sha256": "623f4a37e444268c076896d6c2f389b46f568d1a26539b013f2ba25d03846f72" },
{ "role": "contract_package", "reference": "DOC-CON-30417", "title": "Smlouva a podmínky",
"url": "https://documents.lender.example/contract/30417.pdf",
"sha256": "9c7bfe0077d1189914f0e1c483c961f4c5b36e9892385f3d2ab6168e0c088aa6" }
],
"validUntil": "2026-11-15T18:00:00Z"
}'
HTTP/1.1 201 Created
{
"offerReference": "OFF-30417-1",
"externalApplicationId": "APP-30417",
"offerStatus": "active",
"guideStatus": "created",
"validUntil": "2026-11-15T18:00:00Z",
"snapshotSha256": "8055bfa3c5f2c163691b85785eaf61221169a123bed67aff2c1dbaf2a8e44e7e",
"entryUrl": "https://your-company.responsiblo.com/entry/...",
"createdAt": "2026-11-10T09:14:05Z"
}
| Felt | Påkrevd | Betydning |
|---|---|---|
externalApplicationId |
ja | Deres søknadsnummer, 1 til 128 tegn A-Z a-z 0-9 . _ : -; aldri en e-postadresse. |
offerReference |
ja | Deres referanse for tilbudet, samme regler som externalApplicationId. |
locale |
ja | Veilederens språk og land: cs-CZ. |
currency |
ja | Valuta: CZK. |
principalMinor |
ja | Lånebeløpet i haléř (hundredeler av en koruna), et heltall fra 1 til 10 000 000 000. |
disbursedAmountMinor |
ja | Utbetalt beløp i haléř; må være lik lånebeløpet. |
totalPayableMinor |
ja | Totalt beløp å betale i haléř; minst lånebeløpet og nøyaktig summen av betalingene. |
aprPercent |
ja | Effektiv rente i prosent som tekst ("155.10"), beregnet og garantert av dere. Positive kostnader med effektiv rente 0 avviser API-et. |
interestRate |
nei | Rentesats {percent, period}, period = year, month eller day. |
repayment |
ja | Nedbetaling: singlePayment {amountMinor, due} med en dato (kind date) eller et antall dager fra utbetalingen (kind relative, 1 til 365), eller installments {schedule: [{date, amountMinor}]} med 1 til 360 avdrag i stigende rekkefølge, ingen i fortiden. Typen må samsvare med produktet som er innstilt for veilederen deres. |
documents |
ja | 2 til 10 dokumenter {role, reference, title, url, sha256}; rollene innstillingene for veilederen deres krever, må være dekket (som standard precontract_information og contract_package). url bare HTTPS på en vert som er tillatt i innstillingene for veilederen deres, høyst 2 048 tegn, uten påloggingsopplysninger; sha256 = 64 heksadesimale tegn som dere oppgir. |
validUntil |
ja | Tilbudets gyldighet, RFC 3339 med tidssoneforskyvning, i fremtiden og høyst 7 dager frem. |
supersedes |
nei | offerReference for det aktive tilbudet på samme profil som det nye tilbudet erstatter. |
returnUrl |
nei | Valgfritt: adressen som siden Ferdig sender søkeren tilbake til etter veilederen. Bare absolutt HTTPS, maks. 2 048 tegn, uten påloggingsopplysninger; symbolene {offerReference} og {externalApplicationId} erstatter vi med tilbudets referanser. Uten den gjelder returadressen fra innstillingene for veilederen deres. |
Samme innhold på nytt (under de samme referansene eller samme Idempotency-Key) returnerer 200 med det eksisterende tilbudet og en ny entryUrl; annet innhold under dem returnerer 409 offerConflict. En profil har ett aktivt tilbud: et nytt uten supersedes returnerer 409 activeOfferExists, feil supersedes 409 notSupersedable. Innstillingene for veilederen deres (quiz, kontakt) låses til tilbudet i det øyeblikket.
Status, dokumentasjon og kansellering
GET /v1/users/{identifier}/loan-offers/{offerReference}- status (tillatelse read): offerStatus (active, expired, superseded, cancelled), guideStatus (created, in_progress, completed), fullførte leksjoner, praktiske situasjoner, quiz (null når den er slått av) og tidspunktene for når tilbudet ble presentert og bekreftet og når det ble bedt om forklaring. Aldri svar, verdier i tilbudet eller lenken. Fullføringen blir stående selv om tilbudet senere utløper.GET /v1/users/{identifier}/loan-offers/{offerReference}/evidence- dokumentasjonen for saksmappen deres (tillatelse read): schemaVersion loan-guide-evidence/1, et øyeblikksbilde av tilbudet deres med fingeravtrykket snapshotSha256, kursutgaven med fingeravtrykk av leksjonene, hendelsene i rekkefølgen sequence, hvert svar med alle forsøk, bekreftelsen og limitations - hva dokumentasjonen ikke beviser (presentert betyr ikke lest, identiteten er oppgitt av dere, dokumentene bare som referanse, ikke noe sertifikat, ingen godkjenning av lånet).POST /v1/users/{identifier}/loan-offers/{offerReference}/cancel- kansellerer et aktivt tilbud (tillatelse write), reasonCode = withdrawn_by_provider eller application_closed; 200 returnerer status, et tilbud som ikke er aktivt eller har fullført veileder, returnerer 409 notActive.
curl https://api.responsiblo.com/v1/users/applicant-30417/loan-offers/OFF-30417-1 -H "Authorization: Bearer $RSB_KEY"
{
"offerReference": "OFF-30417-1",
"externalApplicationId": "APP-30417",
"offerStatus": "active",
"guideStatus": "completed",
"quizEnabled": true,
"lessonsCompleted": 3,
"lessonsTotal": 3,
"practiceCompleted": true,
"quizPassed": true,
"offerPresentedAt": "2026-11-10T18:32:47Z",
"confirmedAt": "2026-11-10T18:34:02Z",
"completedAt": "2026-11-10T18:34:02Z",
"assistanceRequested": false,
"assistanceRequestedAt": null,
"validUntil": "2026-11-15T18:00:00Z",
"evidenceErased": false,
"...": "..."
}
curl -X POST https://api.responsiblo.com/v1/users/applicant-30417/loan-offers/OFF-30417-1/cancel \
-H "Authorization: Bearer $RSB_KEY" \
-H "Content-Type: application/json" \
-d '{"reasonCode":"withdrawn_by_provider"}'
?externalApplicationId= trengs bare når én offerReference hører til flere søknader på profilen (ellers 409 ambiguousOfferReference).
Veilederens webhooks
Programmets webhook (se Webhooks) mottar veilederens hendelser uten eget abonnement. Signatur, levering og nye forsøk er de samme som for andre hendelser; data inneholder identifier, offerReference, externalApplicationId, guideStatus, occurredAt og sequence (rekkefølgen på hendelsene for ett tilbud) - aldri dokumentasjonen, verdier i tilbudet eller inngangslenken.
| Hendelse | Når |
|---|---|
loanGuide.completed |
søkeren gikk gjennom veilederen og bekreftet tilbudet |
loanGuide.assistanceRequested |
søkeren ba om en forklaring (ring søkeren) |
loanGuide.expired |
tilbudets validUntil er passert |
loanGuide.superseded |
et nytt tilbud erstattet det (supersedes) |
loanGuide.cancelled |
dere kansellerte tilbudet |
POST https://your-server.example/responsiblo/webhook
Content-Type: application/json
X-Responsiblo-Event: loanGuide.completed
X-Responsiblo-Delivery: 0f6e2a4c-91d3-4b8e-a7c5-3e2d1b9f6a08
X-Responsiblo-Signature: t=1794335647,v1=8b2d...4c
{
"id": "0f6e2a4c-91d3-4b8e-a7c5-3e2d1b9f6a08",
"type": "loanGuide.completed",
"createdAt": "2026-11-10T18:34:07Z",
"apiVersion": "1.3.2",
"program": "your-program",
"data": {
"identifier": "applicant-30417",
"offerReference": "OFF-30417-1",
"externalApplicationId": "APP-30417",
"guideStatus": "completed",
"occurredAt": "2026-11-10T18:34:02Z",
"sequence": 23
}
}
Hver hendelse når én webhook høyst én gang (idempotensnøkkel = X-Responsiblo-Delivery). En webhook som opprettes senere, spiller ikke av eldre hendelser, og hendelser eldre enn 28 dager varsles ikke lenger.
Lagringstid for dokumentasjonen
Når tilbudets forløp avsluttes (fullført, kansellert, utløpt eller erstattet tilbud), løper lagringstiden fra innstillingene for veilederen deres (som standard 30 dager). Deretter slettes dokumentasjonen: GET …/evidence returnerer 410 evidenceErased, og status svarer fortsatt med evidenceErased: true, referansene og tidspunktene. Et aktivt tilbud slettes aldri. Last ned dokumentasjonen dere må oppbevare, rett etter loanGuide.completed.
Feil i veilederen
Feilene har API-ets form ovenfor. I tillegg for veilederen:
| HTTP | reason | Hva dere skal gjøre |
|---|---|---|
| 404 | offerNotFound |
profilen har ikke et slikt tilbud (userNotFound = profilen finnes ikke) |
| 409 | offerConflict, activeOfferExists, notSupersedable |
referansene eller Idempotency-Key tilhører allerede et annet innhold, eller profilen har et annet aktivt tilbud - send supersedes |
| 409 | loanGuideNotConfigured |
veilederen er ikke aktivert for programmet deres - skriv til oss |
| 409 | ambiguousOfferReference |
legg til ?externalApplicationId= |
| 409 | notActive |
tilbudet er ikke aktivt eller har fullført veileder |
| 410 | evidenceErased |
dokumentasjonen ble slettet etter lagringstiden, status blir stående |
| 422 | invalidOffer |
errors = {sti: kode[,kode]} med stien i innholdet (repayment.schedule[2].date, documents[0].url); kodene i tabellen nedenfor |
| 422 | invalidBody |
supersedes, Idempotency-Key eller innholdet i kanselleringen |
errors | Koder for feilen invalidOffer |
|---|---|
required |
feltet mangler |
invalidFormat |
feil form (type, mønster, lengde, lenke uten HTTPS eller med påloggingsopplysninger) |
outOfRange |
utenfor tillatt område (beløp, antall dokumenter, avdrag eller dager) |
notEqualPrincipal |
utbetalt beløp er ikke lik lånebeløpet |
sumMismatch |
summen av betalingene er ikke lik totalt beløp å betale |
belowPrincipal |
totalt beløp å betale er lavere enn lånebeløpet |
aprContradiction |
effektiv rente 0 ved positive kostnader |
typeMismatch |
nedbetalingstypen samsvarer ikke med produktet som er innstilt for veilederen deres |
missingRole |
det mangler et dokument med en rolle som innstillingene for veilederen deres krever |
hostNotAllowed |
dokumentets lenke peker til en vert som innstillingene for veilederen deres ikke tillater |
notAscending |
datoene for avdragene er ikke stigende eller gjentas |
inPast |
datoen for et avdrag eller validUntil er i fortiden |
tooFar |
validUntil er mer enn 7 dager frem |
unsupported |
verdi som ikke støttes (locale, currency, type, period, kind) |
unknownField |
et felt API-et ikke kjenner |
looksLikeEmail |
referansen ser ut som en e-postadresse |
En feil gjentar aldri en verdi dere har sendt. Eksempel: samme tilbud med en betaling på 10 700 CZK i stedet for 10 800 CZK og en gyldighet på 9 dager:
"repayment": { "type": "singlePayment", "amountMinor": 1070000, "due": { "kind": "relative", "days": 30, "anchor": "disbursement" } },
"validUntil": "2026-11-19T18:00:00Z"
HTTP/1.1 422 Unprocessable Entity
{
"status": "error",
"code": 422,
"reason": "invalidOffer",
"message": "The offer contains invalid data.",
"errors": {
"repayment.amountMinor": "sumMismatch",
"validUntil": "tooFar"
}
}
Grenser
120 kall i minuttet per nøkkel. Etter 30 avviste nøkler fra én adresse innen ti minutter må adressen vente 10 minutter.
Loggen over kall (uten innhold, identifikatoren bare som SHA-256-fingeravtrykk) lagrer vi i 180 dager, leverte og oppgitte webhookmeldinger i 30 dager.
Status og kontrakt
GET /v1/status- uten nøkkel, returnerer {"status":"ok","version":"1.3.2"}GET /openapi- uten nøkkel, OpenAPI 3-dokumentet for partner-API-et
Sandbox
Testnøkkelen rsb_test_... åpner testprogrammet deres med det samme kurset. Personer der avsluttes etter 7 dager; webhooken til testprogrammet er atskilt fra produksjonens.
Versjonshistorikk
- 1.3.2 (2026-11) - Hver operasjon i OpenAPI-dokumentet har et navn og en beskrivelse, og operasjonene er delt inn i grupper. /v1/status og webhooks oppgir versjonen 1.3.2. Formen på forespørsler og svar er uendret.
- 1.3.1 (2026-10) - Rettelser uten endring av endepunktene og svarene deres.
- 1.3.0 (2026-10) - Låneveileder: POST /v1/users/{identifier}/loan-offers, status, dokumentasjon og kansellering av et tilbud, webhooks loanGuide.*, lagringstid for dokumentasjonen. Valgfritt felt returnUrl på et tilbud (egen returadresse).
- 1.2.0 (2026-10) - GET /v1/users med sideinndeling, personens sertifikat (feltet certificate, GET /v1/users/{identifier}/certificate, hendelsen certificate.issued), DELETE /v1/users/{identifier} (anonymisering), identifikator på høyst 64 tegn, lagring av loggen.
- 1.1.0 (2026-10) - API-nøkler, POST /v1/users, GET /v1/users/{identifier} med ?include=detail, inngangslenke, webhooks, én form for feil, offentlig status og OpenAPI, grenser.
- 1.0.0 (2024) - GET /v1/user/{identifier} med JWT for partnernøkkelen.
Vil dere ha API-et for bedriften deres? Skriv til oss