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.
OnderdeelWaarde
API-adreshttps://crm.credifin.nl
AuthenticatieHeader Api-Key
FormaatJSON in UTF-8
Voorkeursroute voor nieuwe koppelingenPOST /api/v1/dossiers
Volledige referentiecrm.credifin.nl/api/docs
OpenAPI 3.1-contractcrm.credifin.nl/api/openapi.json
Schema: jouw systeem en Credifin wisselen via crm.credifin.nl gegevens uit: dossiers aanleveren, betalingen melden, status en saldo opvragen en webhook-meldingen.

Aansluiten in drie stappen

  1. Credifin activeert de koppeling. Vraag activering aan via je contactpersoon of plan een API-intake. Daarna verschijnt in het klantportaal het onderdeel Koppelingen → API.
  2. 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.
  3. 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.

Drie stappen: Credifin activeert de koppeling, jij maakt de API-key in het klantportaal en test je eerste aanvraag met de validatieroute.

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.

Tijdlijn: het incassotraject start op de dag na de laatste vervaldatum. Consumenten in Nederland krijgen eerst een kosteloze veertiendagenbrief, bedrijven niet.

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.

Stappenplan in zes stappen: controleren, aanleveren, aanvullen, volgen, betaling melden en webhooks.

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.

Webhooks: Credifin stuurt een ondertekende melding naar jouw URL en probeert het opnieuw na 1 minuut, 5 minuten, 30 minuten, 2 uur, 12 uur en 24 uur als er geen 2xx-antwoord komt.
GebeurtenisWanneer
dossier.createdEr is een nieuw dossier voor je geopend.
dossier.status.changedDe status van een dossier is gewijzigd, ook bij sluiten.
dossier.paidHet openstaande saldo is op nul gekomen.
paymentplan.createdEr is een betalingsregeling vastgelegd.
payment.receivedEr is een betaling geboekt, bij Credifin of bij jou.
invoice.createdEr is een factuur aan het dossier toegevoegd.
creditnote.createdEr is een creditnota geboekt.
cost.createdEr is een kostenpost toegevoegd.
courtcost.createdEr zijn gerechtskosten geboekt.
note.addedEen behandelaar heeft een voor jou zichtbaar bericht geplaatst.
communication.sentCredifin heeft de debiteur een e-mail, brief of sms gestuurd.
communication.receivedDe debiteur heeft per e-mail gereageerd.
phone.callEr is met de debiteur gebeld of een belpoging gedaan.
debtor.updatedGegevens van een debiteur zijn gewijzigd.
debtor.contact.updatedEen adres of contactpersoon van een debiteur is gewijzigd.
creditor.createdAlleen voor agenten: er is een nieuwe klant onder je agentschap aangemaakt.
webhook.testTestmelding 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

StatusBetekenis
openIn behandeling, inclusief de kosteloze veertiendagenfase.
payment planEr loopt een betalingsregeling.
promise to payDe debiteur heeft een betaaltoezegging gedaan.
pausedTijdelijk stilgezet, bijvoorbeeld bij een betwisting.
closedAfgerond en afgerekend.
lostGesloten 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.