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": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"caseVoucherId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"currency": "DKK",
"date": "<string>",
"paidCaseVoucher": {
"caseVoucherId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"referenceId": "<string>",
"amount": 123
}
}Register direct payment
Register money the debtor paid straight to the creditor rather than to the collector, against the case voucher it settles.
The case voucher is referenced by the creditor’s own referenceId — normally the invoice number — or by its caseVoucherId, exactly one of the two. Either is looked up within the creditor given in creditorId, so a reference id must match exactly one case voucher there and an id must belong to that creditor. The whole payment is applied to that one voucher through a fixed distribution, so a payment covering several invoices has to be sent as one request per invoice.
The deposit is always registered with source CREDITOR. Use POST /v1/{tenantId}/case-vouchers/{caseId} when you need the general case-voucher endpoint instead.
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": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"caseVoucherId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"currency": "DKK",
"date": "<string>",
"paidCaseVoucher": {
"caseVoucherId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"referenceId": "<string>",
"amount": 123
}
}Authorizations
Authentication can be done by using a bearer token in the Authorization header. This is done using the following format Authorization: Bearer {token}.
Path Parameters
Id of the tenant
Query Parameters
Id of the creditor the case voucher belongs to
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.
The creditor's reference for the case voucher the money paid off — normally the invoice number. It is looked up within the creditor given in creditorId, 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