curl --request POST \
--url https://api.debbiecollect.com/v1/{tenantId}/direct-payments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"caseVoucherReferenceId": "D12412347",
"amount": 120000,
"date": "2026-06-04",
"currency": "DKK"
}
'import requests
url = "https://api.debbiecollect.com/v1/{tenantId}/direct-payments"
payload = {
"caseVoucherReferenceId": "D12412347",
"amount": 120000,
"date": "2026-06-04",
"currency": "DKK"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
caseVoucherReferenceId: 'D12412347',
amount: 120000,
date: '2026-06-04',
currency: 'DKK'
})
};
fetch('https://api.debbiecollect.com/v1/{tenantId}/direct-payments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.debbiecollect.com/v1/{tenantId}/direct-payments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'caseVoucherReferenceId' => 'D12412347',
'amount' => 120000,
'date' => '2026-06-04',
'currency' => 'DKK'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.debbiecollect.com/v1/{tenantId}/direct-payments"
payload := strings.NewReader("{\n \"caseVoucherReferenceId\": \"D12412347\",\n \"amount\": 120000,\n \"date\": \"2026-06-04\",\n \"currency\": \"DKK\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.debbiecollect.com/v1/{tenantId}/direct-payments")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"caseVoucherReferenceId\": \"D12412347\",\n \"amount\": 120000,\n \"date\": \"2026-06-04\",\n \"currency\": \"DKK\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.debbiecollect.com/v1/{tenantId}/direct-payments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"caseVoucherReferenceId\": \"D12412347\",\n \"amount\": 120000,\n \"date\": \"2026-06-04\",\n \"currency\": \"DKK\"\n}"
response = http.request(request)
puts response.read_body{
"caseId": "3f1c2d4e-5a6b-7c8d-9e0f-1a2b3c4d5e6f",
"caseVoucherId": "1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
"amount": 120000,
"currency": "DKK",
"date": "2026-06-04T00:00:00.000Z",
"paidCaseVoucher": {
"caseVoucherId": "7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d",
"referenceId": "D12412347",
"amount": -120000
}
}Register direct payment
Register money the debtor paid straight to you rather than to your debt collection partner, against the case voucher it settles.
Reference the case voucher by your own referenceId — the invoice number you sent it under — or by the caseVoucherId Debbie returned when it was created; exactly one of the two. The whole payment is applied to that one voucher, so a payment of 1,200.00 on an invoice of 1,200.00 settles it. A payment that covers several invoices has to be sent as one request per invoice.
The payment is always registered with source CREDITOR; there is no field for it. That is what tells the settlement it never passed through your debt collection partner.
Send an Idempotency-Key header, one per request, so a retry within 48 hours is answered with the original result instead of registering the payment again. See Idempotency.
Required scope: write:case-vouchers
curl --request POST \
--url https://api.debbiecollect.com/v1/{tenantId}/direct-payments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"caseVoucherReferenceId": "D12412347",
"amount": 120000,
"date": "2026-06-04",
"currency": "DKK"
}
'import requests
url = "https://api.debbiecollect.com/v1/{tenantId}/direct-payments"
payload = {
"caseVoucherReferenceId": "D12412347",
"amount": 120000,
"date": "2026-06-04",
"currency": "DKK"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
caseVoucherReferenceId: 'D12412347',
amount: 120000,
date: '2026-06-04',
currency: 'DKK'
})
};
fetch('https://api.debbiecollect.com/v1/{tenantId}/direct-payments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.debbiecollect.com/v1/{tenantId}/direct-payments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'caseVoucherReferenceId' => 'D12412347',
'amount' => 120000,
'date' => '2026-06-04',
'currency' => 'DKK'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.debbiecollect.com/v1/{tenantId}/direct-payments"
payload := strings.NewReader("{\n \"caseVoucherReferenceId\": \"D12412347\",\n \"amount\": 120000,\n \"date\": \"2026-06-04\",\n \"currency\": \"DKK\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.debbiecollect.com/v1/{tenantId}/direct-payments")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"caseVoucherReferenceId\": \"D12412347\",\n \"amount\": 120000,\n \"date\": \"2026-06-04\",\n \"currency\": \"DKK\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.debbiecollect.com/v1/{tenantId}/direct-payments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"caseVoucherReferenceId\": \"D12412347\",\n \"amount\": 120000,\n \"date\": \"2026-06-04\",\n \"currency\": \"DKK\"\n}"
response = http.request(request)
puts response.read_body{
"caseId": "3f1c2d4e-5a6b-7c8d-9e0f-1a2b3c4d5e6f",
"caseVoucherId": "1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
"amount": 120000,
"currency": "DKK",
"date": "2026-06-04T00:00:00.000Z",
"paidCaseVoucher": {
"caseVoucherId": "7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d",
"referenceId": "D12412347",
"amount": -120000
}
}Authorizations
Authentication with an API key can be done by using a bearer token in the Authorization header. This is done using the following format Authorization: Bearer {token}. API keys are issued and revoked directly from the creditor portal under Developers > API.
Path Parameters
Id of your debt collection partner's tenant. You can find it on the API page in the creditor portal.
Query Parameters
Your creditor id. You can find it on the API page in the creditor portal.
Body
The payment
Exactly one of caseVoucherId and caseVoucherReferenceId must be given; the other may be left out or null. A body with both or neither is rejected with Give exactly one of caseVoucherId and caseVoucherReferenceId.
The amount paid, positive, in the minor unit. 1,200.00 is sent as 120000. It cannot exceed what is still outstanding on the referenced case voucher.
Debbie's id of the case voucher the money paid off, as returned when the voucher was created. It must belong to the creditor. Give either this or caseVoucherReferenceId, not both.
Your reference for the case voucher the money paid off — normally the invoice number. It is looked up within your creditor, and must match exactly one case voucher. Give either this or caseVoucherId, not both.
The date the money was received. Defaults to now.
Optional. When given, it must match the currency of the referenced case voucher — it is a check, not a conversion.
DKK, SEK, NOK, USD, EUR, GBP, CHF Free text shown on the payment.
Response
The payment was registered
Id of the case the payment was registered on
Id of the created deposit
Currency
DKK, SEK, NOK, USD, EUR, GBP, CHF The case voucher the payment was applied to
Show child attributes
Show child attributes