1
Create your customer
The debtor, with the contact details the collector will write to.
2
Add the case vouchers
The unpaid invoices, and any reminder and compensation fees you have already
charged.
3
Attach the documentation
Invoice copies, contracts, photos — whatever proves the claim.
4
Register direct payments
Money the debtor pays straight to you after handover.
5
Book the settlement
What you are paid, and what you are charged.
Before you start
- Get access to the creditor portal. Your debt collection partner invites you. If you do not have access yet, reach out to them.
- Create an API key. In the portal, go to Developers → API, name the key
and grant it the scopes listed under Scopes. Authenticate with
Authorization: Bearer {token}— see Authentication. - Note your ids. The same page shows your
tenantId— your debt collection partner’s tenant, which is part of every URL — and yourcreditorId, which identifies you. - Ask for the configuration ids you need. The case group you should send cases under, the handles of any custom attributes, and the id of any custom voucher type. These are set up in the platform by your partner.
- Add a webhook. Under Developers → Webhooks in the portal, or with Create webhook. It only ever receives events for your own cases. See Webhooks.
Identifiers to store on both sides
Getting the identifier mapping right is the most important part of the integration. Decide up front which id lives where, and persist it.1. Create your customer
A customer is your relationship with the party that owes the money. It holds one or more users: the people involved. Exactly one of them is the debtor.POST /v1/{tenantId}/customers?creditorId={creditorId}
- One user must be the debtor.
relation: "debtor"is the party the claim is against, and the one the debt is registered on. Anyone else on the matter — a guardian, an administrator, a contact at a company — isrelation: "alternative-contact". contact: truemarks the user Debbie addresses its letters, emails and texts to.isCompanysays whether the customer is a business or a private individual. Sendcvron the user for a company andcprfor a person.referenceIdis your customer number — the one in the system you keep your books in. It is what the settlement refers to, so it has to match. It only needs to be unique within your creditor, which is whyGET /customers/by-reference-id/{referenceId}?creditorId={creditorId}finds the customer again instead of you keeping a mapping table.
customerId. Store it.
API reference: Create customer
See POST Create customer for full
details.
2. Add the case vouchers for collection
A case voucher is one financial entry on the claim. Send the unpaid invoice, plus any reminder fees and compensation fees you have already charged, in one request. Debbie decides itself whether that opens a new case or extends an existing one for the same debtor.POST /v1/{tenantId}/customers/{customerId}/add-case-vouchers
Voucher types
voucherTypeId says what the entry is. These are the ones an invoice-to-cash
integration normally sends:
The full list, including subscription and loan types, is on the
Voucher types page, and Get voucher
types returns the same list at
runtime including any types your debt collection partner has defined
themselves. Fetch it once and cache it rather than hard-coding the ids.
Amounts, references and duplicates
- Amounts are integers in the minor unit, and debt is negative.
-450000is a debt of 4,500.00 DKK. A positive amount is a credit note or a payment. referenceIdis your invoice number. It is what you will refer to when you register a direct payment, and what the settlement reports back, so send the number your own system knows.uniqueIdstops duplicates. It is unique across the whole tenant, so a replayed request is rejected rather than creating the invoice twice. Setting it to the invoice number is usually right.
You do not send source
Everything you send through this API is imposed by you, and is registered with
source: "CREDITOR" whatever the field says. Leave it out.
Attributes and case groups
Two mechanisms carry your own structure into the collection process:- Attributes (properties) are custom fields on a case or a case voucher — a
meter number, a contract id, a subscription plan. Your debt collection partner
defines the property types in the platform and gives you the handle to use
as the key:
"properties": { "meterNumber": "874113" }. Attributes can be printed in the letters to the debtor and reported on, so anything the collector or the debtor needs to recognise the claim belongs here. - Case groups segment your portfolio — a product line, a business unit, a
brand. Pass
constraints.caseGroupIdand the case is opened in that group, which decides how the collector treats and reports on it. The id comes from your partner.constraintsonly applies when the vouchers open a new case; it is ignored when they land on an existing one.
caseId it landed
on and the caseVoucherId it was created as. Store the caseId — you need
it for the next step.
API reference: Add case vouchers
See POST Add case
vouchers for full
details.
3. Attach the documentation
A claim that is documented is a claim that survives an objection. Attach the invoice copy, the contract, the delivery note, the photo — whatever your partner would otherwise have to ask you for. Documents are attached in two calls: upload the file, then create the document that points at it.Upload the file
POST /v1/{tenantId}/files
content is the file, base64 encoded. The response is the stored file:
The upload calls the identifier
id; everywhere it is referenced afterwards —
on a document, and as the appendix of a case voucher — the field is called
fileId. It is the same value. On a document only the id is read: the name
and content type are taken from the stored file.Create the document
POST /v1/{tenantId}/documents
entityIdandentityTypesay what the document belongs to.casewith thecaseIdyou got back in step 2 is what you want for invoice copies and anything else about a specific claim.creditorwith your owncreditorIdis for documents about the relationship itself — a power of attorney, a standing agreement — and they are not tied to a case.typeis alwaysOTHER. The other document types — foundation, verdict, settlement — decide whether a debt has a legal foundation and when it expires, and are set by your debt collection partner as the case progresses through the courts.minAccessRoledecides who can see it. Consider setting it todebtor: the document then shows up in the debtor’s self-service portal, so someone disputing an invoice can see the invoice. Leave it out and the document stays between you and your collection partner.
API reference: Add document
See POST Add document for full
details.
4. Register direct payments and credit notes
Once a case is handed over, the debtor may still pay you rather than your debt collection partner — into your own bank account, or through your own portal. Those payments have to reach Debbie, or the collection process keeps chasing money that has already arrived, and the settlement is wrong.POST /v1/{tenantId}/case-vouchers/allocations?creditorId={creditorId}
- Each match identifies an invoice. Use
caseVoucherReferenceIdfor thereferenceIdyou sent the invoice under, orcaseVoucherIdfor Debbie’s id. Give exactly one per match. References must identify exactly one case voucher within your creditor. You can mix the two identifier types in the list, but the same target must not appear twice. - Amounts belong to the matches. Each positive
amountis in minor units and cannot exceed the target’s remaining fixed-distribution capacity. Earlier payments and credit notes matched against it count. There is no separate total amount on the request. - One payment voucher is created per case. The two invoices in one case
share a payment voucher with their combined amount. An invoice on another
case gets a separate payment voucher. Each fixed distribution stays within
its case. The response is an array of the created vouchers and their
targetCaseVouchers, including eachmatchedAmount. - All targets must use the same currency. Optional
currencyasserts that currency; when omitted it is taken from the first target. No conversion is performed. - Send one
Idempotency-Keyfor the whole request. Retry the same request with the same key within 48 hours to get the original result. The operation is atomic: if any match fails, none of the payment vouchers are created. sourceis not a field here either. A direct payment is by definition money that never passed through your collection partner, and is always registered asCREDITOR.
Credit notes
Use the same endpoint withvoucherTypeId set to
ef2cdc50-230f-4046-b1af-0f9c498dddd3 to register a credit note. Send a positive
amount for each entry in matches and its issue date in date. One credit-note
voucher is created per case, with fixed distributions to the matched invoices
on that case. Its amount is the sum of that case’s match amounts.
Only deposits and credit notes are currently supported.
When the allocation is refused
Every refusal carries amessage that says why. These are the ones to handle:
A
400 or 404 will not succeed on retry with the same body; put those aside
for review rather than back on the queue.
API reference: Register case voucher allocation
See POST Register case voucher
allocation for full
details.
5. Book the settlement
When your debt collection partner settles with you, a settlement is created andbillings.create fires with a billingId. That is the trigger to fetch what
the settlement is made of — the payments and how they were split, and the fees
and disbursements you are charged — and post it.
Settlements
Settlement has enough detail of its own that it has a separate guide. See
Settlements.
What happens in between
Between handover and settlement, the collection process is your partner’s. Three webhooks tell you what is going on without you having to ask:
There is no per-payment event today: money reaching a case is accounted for in
the settlement, and visible in the creditor portal meanwhile.
billings.create
is the one your integration has to handle.
Subscribe to them under Developers → Webhooks in the portal or with
Create webhook; a webhook of yours
only ever carries your own creditor’s events.
Scopes
Grant the API key only what the integration uses:Checklist before going live
1
The customer reference is the one you post money into
customer.referenceId is the customer number from the system that receives
the settlement, and caseVoucher.referenceId is your invoice number.2
Every write is replayable
Idempotency-Key on every request, uniqueId on every voucher, and failed
calls go to a retry queue rather than being dropped.3
Identifiers are stored on both sides
customerId, caseId and the caseVoucherId of every voucher you created
are persisted in your own system.4
Documentation follows the claim
Invoice copies and contracts are uploaded and attached to the case, and it
is decided per document type whether the debtor should be able to see it.
5
Direct payments flow to Debbie the same day
Payments into your own account are registered against the invoice they
settle, keyed on the bank transaction id.
6
The webhook receiver verifies and is idempotent
X-Verification-Token is checked, creditorId is checked against your own,
the handler tolerates duplicate deliveries, and it responds 200 before doing
downstream work.7
Settlement is booked in full
billings.create triggers a fetch of both the deposit distribution and the
billing vouchers, and the payout, the commission, the fees and the
disbursements are all posted. See Settlements.