Wat je met de API kunt
Deze handleiding legt uit hoe je aansluit en welke keuzes je maakt. Alle endpoints, velden en voorbeelden staan in de volledige technische referentie op crm.credifin.nl/api/docs.
- Dossiers aanleveren: debiteur, facturen, documenten en extra gegevens in één aanvraag.
- Dossiers volgen: status, openstaand saldo en het volledige financiële overzicht met hoofdsom, rente, incassokosten, betalingen en creditnota's.
- Betalingen melden die de debiteur rechtstreeks aan jou heeft betaald.
- Aanvullen: extra gegevens en documenten toevoegen terwijl het dossier loopt.
- Meldingen ontvangen via webhooks, zodat je niet steeds hoeft op te vragen of er iets is veranderd.
| Onderdeel | Waarde |
|---|---|
| API-adres | https://crm.credifin.nl |
| Authenticatie | Header Api-Key |
| Formaat | JSON in UTF-8 |
| Voorkeursroute voor nieuwe koppelingen | POST /api/v1/dossiers |
| Volledige referentie | crm.credifin.nl/api/docs |
| OpenAPI 3.1-contract | crm.credifin.nl/api/openapi.json |
Aansluiten in drie stappen
- Credifin activeert de koppeling. Vraag activering aan via je contactpersoon of plan een API-intake. Daarna verschijnt in het klantportaal het onderdeel Koppelingen → API.
- Je maakt zelf de API-key. Een klantbeheerder klikt op Genereer API-key. Naam, rechten en geldigheid worden automatisch ingevuld. De sleutel begint met cfi_live_ en blijft geldig tot je hem intrekt.
- Kopieer en test. Bewaar de sleutel in een beveiligde opslag, zoals een secret manager. Test je eerste aanvraag met de validatieroute uit stap 1 van het stappenplan hieronder.
Het API-adres is voor iedere klant hetzelfde. De sleutel bepaalt automatisch voor welke opdrachtgever een aanvraag geldt. Je ziet en wijzigt alleen je eigen dossiers.
Rechten van een sleutel
| Recht (scope) | Wat je ermee kunt |
|---|---|
| dossiers:read | Dossiers, debiteuren, facturen, betalingen en documenten lezen |
| dossiers:create | Dossiers aanleveren en aanvullen, betalingen melden |
| creditors:create | Alleen voor agenten: nieuwe klanten aanmaken onder het eigen agentschap |
Werk je als agent voor meerdere klanten?
Dan krijg je één sleutel voor je hele agentschap. Met GET /api/creditor zie je voor welke klanten die sleutel werkt.
Bij het aanleveren geef je in het veld creditor het klantnummer of de uuid van de klant mee. Nieuwe klanten vallen automatisch onder dezelfde sleutel; je hoeft per klant niets in te stellen.
Authenticatie en veilig werken
Stuur de sleutel mee in de header Api-Key van elke aanvraag, uitsluitend via HTTPS.
Test je verbinding met een eenvoudige leesaanvraag: GET /api/creditor. Je krijgt dan je eigen opdrachtgever terug.
Veilig opnieuw versturen met Idempotency-Key
Stuur bij elke POST een Idempotency-Key mee: een unieke sleutel per aanvraag, bijvoorbeeld je eigen ordernummer. Krijg je een time-out? Verstuur dan exact dezelfde body met dezelfde key.
Credifin geeft dan hetzelfde antwoord terug en maakt nooit een tweede dossier aan. Gebruik dezelfde key nooit voor een andere body; dan krijg je 409 IDEMPOTENCY_KEY_REUSED. Bij POST /api/v1/dossiers is de key verplicht.
Goede gewoonten
- Zet de sleutel nooit in een URL, browsercode, openbare repository of logbestand.
- Een sleutel die is uitgelekt of niet meer nodig is, trek je in via Koppelingen → API met Sleutel intrekken.
- Bewaar de X-Request-Id van elke aanvraag. Daarmee vinden wij één aanroep terug bij een supportvraag, zonder dat je sleutels of persoonsgegevens hoeft te delen.
- Elke response bevat X-RateLimit-Limit, X-RateLimit-Remaining en X-RateLimit-Reset. Krijg je 429, wacht dan het aantal seconden uit Retry-After af.
Wetgeving: wat Credifin automatisch regelt
Je levert per factuur alleen de hoofdsom aan. Wettelijke rente en incassokosten berekent Credifin zelf, op basis van de facturen, het type debiteur en het land.
- Bedrijf of particulier. Vul je companyName of companyNumber (KvK-nummer) in, dan behandelt Credifin de debiteur als bedrijf. Laat je die leeg en vul je firstName en lastName in, dan gaat het om een particulier. Deze keuze bepaalt welke regels gelden.
- Nederlandse consumenten (WIK). Het traject begint met de kosteloze veertiendagenbrief. Pas als die termijn verstrijkt zonder betaling, rekent Credifin incassokosten volgens de wettelijke staffel. Binnen die termijn kan de debiteur altijd zonder incassokosten betalen.
- Zakelijke debiteuren. Er gaat geen veertiendagenbrief uit en Credifin rekent met de wettelijke handelsrente.
- Debiteuren buiten Nederland. Credifin stuurt geen WIK-brief naar debiteuren buiten Nederland. Geef daarom altijd de juiste landcode mee.
- Nooit te vroeg. Het dossier staat direct in het systeem, maar het incassotraject start nooit vóór de dag na de laatste vervaldatum die je opgeeft.
Heb je zelf al een veertiendagenbrief verstuurd? Stem dat vooraf met ons af, zodat de debiteur geen tweede brief krijgt.
Dataformaten
| Gegeven | Formaat | Voorbeeld |
|---|---|---|
| Bedrag | Decimaal getal in euro, geen centen | 847.50 |
| Datum | JJJJ-MM-DD | 2026-10-15 |
| Tijdstip in responses | ISO 8601 in UTC | 2026-10-15T09:30:00.000Z |
| Tijdstip in filters | JJJJ-MM-DD UU:mm:ss | 2026-10-01 00:00:00 |
| Land | ISO 3166-1, hoofdletters | NL, BE, DE |
| Taal | ISO 639-1, kleine letters | nl, en, de, fr |
| Valuta | ISO 4217, standaard EUR | EUR |
| Telefoonnummer | Internationaal formaat | +31612345678 |
Bijlagen stuur je als base64 mee, zonder data:-voorvoegsel. Toegestaan zijn pdf, afbeeldingen (ook HEIC), HTML, XML/UBL, EML, MSG, DOCX, XLSX, tekst en csv.
Een bestand mag maximaal 10 MB zijn. Via POST /api/v1/dossiers lever je per dossier maximaal 25 bijlagen aan, samen maximaal 25 MB. Credifin controleert elk bestand op inhoud en haalt het door een virusscanner voordat het wordt opgeslagen.
Lijsten worden verdeeld over pagina's. Stuur X-API-NEXT-PAGE (eerste pagina is 1) en X-API-PAGE-LIMIT (standaard 20, maximaal 200) mee. De response geeft in X-API-NEXT-PAGE het volgende paginanummer terug; is die leeg, dan heb je alles.
Stappenplan: van eerste dossier tot volledige koppeling
In zes stappen van je eerste test naar een volledige koppeling. Kopieerbare voorbeelden in cURL, JavaScript en PHP staan in de technische referentie.
Stap 1: Controleer je aanvraag zonder iets op te slaan
Met POST /api/v1/dossiers/validate controleert Credifin precies dezelfde velden als bij een echte aanlevering. Er wordt niets opgeslagen en er start geen traject. Gebruik deze route tijdens het bouwen en vóór je eerste echte aanlevering.
Stuur dezelfde JSON-body die je straks echt aanlevert: je referentie, de debiteur met adres en taal, en de facturen. Is alles in orde, dan meldt de API dat de aanvraag geldig is en dat er niets is opgeslagen, met het aantal facturen en het totaalbedrag. Klopt er iets niet, dan zie je per veld wat er mis is.
Stap 2: Lever het dossier aan
Stuur dezelfde body naar POST /api/v1/dossiers, nu met een vaste Idempotency-Key. Credifin verwerkt de hele aanvraag in één keer: alles wordt opgeslagen of niets. Je loopt dus nooit tegen een half aangemaakt dossier aan.
Je krijgt 201 Created terug, met onder meer de dossierId. Bewaar die; je gebruikt hem bij alle vervolgaanvragen.
| Veld | Verplicht | Toelichting |
|---|---|---|
| reference | Nee | Jouw dossierreferentie. Laat je hem weg, dan maakt Credifin een dossiernummer aan. |
| creditor | Alleen voor agenten | Klantnummer of uuid van de klant waarvoor je aanlevert. |
| debtor.reference | Ja | Jouw klant- of debiteurnummer. |
| debtor.companyName of debtor.lastName | Ja | Bedrijfsnaam, of achternaam bij een particulier. |
| debtor.language | Ja | Taal van de debiteur, bijvoorbeeld nl. |
| debtor.address | Ja | street, houseNumber, postalCode, city en country. |
| debtor.email en debtor.phone | Nee, wel aanbevolen | Met meer contactgegevens bereiken we de debiteur sneller. |
| invoices | Ja | 1 tot 100 facturen, elk met reference, date, dueDate en amount. |
| attachments en meta | Nee | Documenten en extra dossiergegevens, zie stap 3. |
Gaat het om een particulier, vul dan firstName en lastName in en laat companyName en companyNumber leeg.
Stap 3: Geef extra gegevens en documenten mee
Hoe meer informatie in het dossier staat, hoe vaker Credifin een vraag van de debiteur direct kan beantwoorden. Stuur daarom documenten en extra gegevens mee, zoals het contract, de factuur-pdf of een bevestigingsmail.
Documenten stuur je mee in attachments: per bestand de bestandsnaam en de inhoud als base64. Extra gegevens stuur je mee in meta, als lijst van naam en waarde, bijvoorbeeld contractnummer of opzegdatum.
Een bijlage bij een specifieke factuur zet je in attachments binnen die factuur. Kies voor meta vaste namen per soort gegeven en schrijf datums als JJJJ-MM-DD.
Later aanvullen kan per dossier via POST /api/dossier/{dossier}/meta en POST /api/dossier/{dossier}/attachment. Een veld met dezelfde naam wordt overschreven.
Stap 4: Volg de stand van je dossiers
| Vraag | Route |
|---|---|
| Welke dossiers zijn gewijzigd sinds mijn vorige synchronisatie? | GET /api/dossier met X-API-FILTER-FROM |
| Wat is de volledige financiële stand van een dossier? | GET /api/dossier/{dossier}/financial |
| Alleen het openstaande saldo? | GET /api/dossier/{dossier}/open-amount |
| Wat is de status? | GET /api/dossier/{dossier}/status |
| Heeft mijn referentie al een dossier? | GET /api/dossier/{reference}/verification |
| Loopt er een betalingsregeling? | GET /api/dossier/{dossier}/paymentplan |
Haal de gewijzigde dossiers op met X-API-FILTER-FROM (bijvoorbeeld 2026-10-01 00:00:00) en loop de pagina's door tot X-API-NEXT-PAGE leeg is.
Stap 5: Meld betalingen die je zelf ontvangt
Heeft de debiteur rechtstreeks aan jou betaald? Meld dat dan met POST /api/payment. Het saldo, een lopende regeling en de afrekening worden direct bijgewerkt, en je behandelaar ziet de melding.
Geef het dossier, het bedrag, de ontvangstdatum en je eigen kenmerk mee, bijvoorbeeld het nummer van het bankafschrift.
Betalingen op de derdengeldenrekening van Credifin boeken wij zelf; die meld je niet. Daarom accepteert deze route alleen betalingen die jij hebt ontvangen. Staat deze functie nog uit voor jouw organisatie, dan krijg je PAYMENT_REPORTING_NOT_ENABLED. Vraag ons dan om hem aan te zetten.
Stap 6: Ontvang meldingen via webhooks
In plaats van steeds op te vragen of er iets is veranderd, laat je Credifin een bericht sturen. Een klantbeheerder voegt onder Koppelingen → Webhooks een URL toe, kiest de gebeurtenissen en krijgt eenmalig een geheim om meldingen mee te controleren. Credifin zet webhooks per opdrachtgever aan.
| Gebeurtenis | Wanneer |
|---|---|
| dossier.created | Er is een nieuw dossier voor je geopend. |
| dossier.status.changed | De status van een dossier is gewijzigd, ook bij sluiten. |
| dossier.paid | Het openstaande saldo is op nul gekomen. |
| paymentplan.created | Er is een betalingsregeling vastgelegd. |
| payment.received | Er is een betaling geboekt, bij Credifin of bij jou. |
| invoice.created | Er is een factuur aan het dossier toegevoegd. |
| creditnote.created | Er is een creditnota geboekt. |
| cost.created | Er is een kostenpost toegevoegd. |
| courtcost.created | Er zijn gerechtskosten geboekt. |
| note.added | Een behandelaar heeft een voor jou zichtbaar bericht geplaatst. |
| communication.sent | Credifin heeft de debiteur een e-mail, brief of sms gestuurd. |
| communication.received | De debiteur heeft per e-mail gereageerd. |
| phone.call | Er is met de debiteur gebeld of een belpoging gedaan. |
| debtor.updated | Gegevens van een debiteur zijn gewijzigd. |
| debtor.contact.updated | Een adres of contactpersoon van een debiteur is gewijzigd. |
| creditor.created | Alleen voor agenten: er is een nieuwe klant onder je agentschap aangemaakt. |
| webhook.test | Testmelding vanuit het klantportaal. |
Elke melding is een POST met JSON en de headers Credifin-Event, Credifin-Event-Id en Credifin-Signature. Controleer de handtekening: bereken HMAC-SHA256 over het tijdstempel, een punt en de ruwe body, met je geheim als sleutel. Vergelijk de uitkomst met v1 uit de header. Wijs meldingen af waarvan het tijdstempel meer dan vijf minuten afwijkt. Een voorbeeld in Node.js en PHP staat in de technische referentie.
- Antwoord snel. Bevestig binnen tien seconden met een 2xx-status en verwerk de melding daarna. Redirects worden niet gevolgd.
- Herkansingen. Mislukt een melding, dan probeert Credifin het opnieuw na 1 minuut, 5 minuten, 30 minuten, 2 uur, 12 uur en 24 uur. Na 50 mislukte pogingen op rij wordt de webhook gepauzeerd.
- Dubbel of in een andere volgorde. Een melding kan meer dan één keer aankomen. Bewaar het id en negeer herhalingen. Gebruik occurredAt voor de volgorde.
- Testen. Met Test versturen in het portaal krijg je direct een testmelding en zie je het antwoord van je server.
Dossierstatussen
| Status | Betekenis |
|---|---|
| open | In behandeling, inclusief de kosteloze veertiendagenfase. |
| payment plan | Er loopt een betalingsregeling. |
| promise to pay | De debiteur heeft een betaaltoezegging gedaan. |
| paused | Tijdelijk stilgezet, bijvoorbeeld bij een betwisting. |
| closed | Afgerond en afgerekend. |
| lost | Gesloten zonder volledige incasso. |
Het veld dossierClosed geeft in één oogopslag aan of een dossier gesloten is.
Fouten en support
Gebruik in je eigen software de vaste code uit een foutmelding, niet de leesbare tekst; die tekst kan veranderen. Herhaal een aanvraag alleen als retryable op true staat, en gebruik dan dezelfde Idempotency-Key.
/api/v1-routes geven fouten terug als application/problem+json. De bestaande /api/...-routes gebruiken een error-object met vergelijkbare velden.
Elke foutmelding bevat een vaste code, een leesbare uitleg, een requestId en retryable. Bij een validatiefout staat per veld wat er mis is, bijvoorbeeld veld invoices[0].dueDate met code INVALID_DATE.
| HTTP-status | Betekenis |
|---|---|
| 200 OK | Gelukt. Ook bij aanmaken via de bestaande /api/...-routes. |
| 201 Created | Dossier aangemaakt via POST /api/v1/dossiers. |
| 400 Bad Request | De body is geen geldige JSON. |
| 401 Unauthorized | Sleutel ontbreekt, is verlopen of is ingetrokken. |
| 403 Forbidden | De sleutel mag dit niet, bijvoorbeeld door een ontbrekend recht of een andere opdrachtgever. |
| 404 Not Found | Niet gevonden binnen jouw opdrachtgever. |
| 409 Conflict | Dubbele referentie of een Idempotency-Key die al voor een andere body is gebruikt. |
| 413 Payload Too Large | De aanvraag of een bijlage is te groot. |
| 415 Unsupported Media Type | Verkeerd Content-Type of een bestandstype dat niet is toegestaan. |
| 422 Unprocessable Entity | Een veld voldoet niet aan de regels; zie errors. |
| 429 Too Many Requests | Te veel aanvragen; wacht Retry-After af. |
| 500 Internal Server Error | Fout aan onze kant; herhaal veilig met dezelfde Idempotency-Key. |
| Code | Wanneer | Wat te doen |
|---|---|---|
| CREDITOR_REQUIRED | Een agentsleutel levert aan zonder creditor. | Geef het klantnummer of de uuid van de klant mee. |
| CREDITOR_MISMATCH | De opdrachtgever in de body hoort niet bij deze sleutel. | Laat creditor weg of gebruik de juiste sleutel. |
| IDEMPOTENCY_KEY_REUSED | Dezelfde key met een andere body. | Gebruik per aanvraag een eigen key. |
| DOSSIER_CLOSED | Betaling, creditnota of kosten op een gesloten dossier. | Neem contact met ons op voor een correctie. |
| PAYMENT_REPORTING_NOT_ENABLED | Betalingen melden staat uit voor je organisatie. | Vraag ons om dit aan te zetten. |
| DOCUMENTS_NOT_ENABLED | Documenten zijn voor je organisatie niet vrijgegeven. | Vraag ons om dit aan te zetten. |
| FILE_BLOCKED | De bijlage bevat gevaarlijke inhoud, zoals een pdf met script. | Stuur een gewone pdf of afbeelding. |
| MALWARE_DETECTED | De virusscanner heeft malware gevonden. | Controleer het bronsysteem; het bestand is niet opgeslagen. |
Kom je er niet uit?
Stuur ons de X-Request-Id (of requestId) van de aanvraag, het tijdstip en de route. Stuur nooit je API-key mee. Daarmee vinden wij de aanroep terug en kijken we met je mee.
Wil je sparren over jouw API-koppeling?
Heb je een concrete use case of wil je weten wat er technisch mogelijk is met de Credifin API? Plan een korte call met ons team en we denken met je mee over de beste inrichting.