Letters
/api/v1/debts/{id}/lettersChargeable: printing and dispatch via Briefdiener (subscription plan quota or your own Briefdiener account). Dunning levels use the standard text; custom requires content. Always send an Idempotency-Key so that retries do not trigger a second letter. Errors: 402 quota_exceeded/not_available, 422 missing_address.
Permission: letters:write
Path parameters
idstringrequiredResource IDmax. 128 characters
Headers
Idempotency-KeystringUnique key (8–255 characters). Repeated requests with the same key return the same response for 24 h.max. 255 characters
Body (JSON) · LetterSend
kind"reminder1" | "reminder2" | "reminder3" | "custom"requiredregisteredbooleansubjectstringmax. 300 characterscontentstringRequired if kind=custom; otherwise default text of the dunning levelmax. 20000 characters
Response 201 · Letter
idstringrequiredobject"letter"requireddebtIdstringrequiredcontactIdstringrequiredcontactNamestringrequiredkind"reminder1" | "reminder2" | "reminder3" | "custom"requiredsubjectstringrequiredstatus"sending" | "sent" | "failed"requireddeliveryStatus"pending" | "delivered" | "failed" | "returned" | nullrequiredmode"own" | "central"requiredown Briefdiener account or subscription plan quotatrigger"manual" | "auto"requiredregisteredbooleanrequiredRegistered mailtrackingRefstring | nullrequiredtrackingUrlstring | nullrequiredpageCountinteger | nullrequired-9007199254740991–9007199254740991priceEurostring | nullrequirederrorstring | nullrequiredcreatedAtstring (date-time)requiredTimestamp (ISO 8601)sentAtstring (date-time) | nullrequiredTimestamp (ISO 8601)
Possible errors: 400, 401, 402, 403, 404, 409, 422, 429, 500
curl -X POST 'https://www.debt-flow.io/api/v1/debts/ID/letters' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"kind": "reminder1",
"registered": false,
"subject": "string",
"content": "string"
}'{
"id": "string",
"object": "letter",
"debtId": "string",
"contactId": "string",
"contactName": "string",
"kind": "reminder1",
"subject": "string",
"status": "sending",
"deliveryStatus": "pending",
"mode": "own",
"trigger": "manual",
"registered": false,
"trackingRef": "string",
"trackingUrl": "string",
"pageCount": 0,
"priceEuro": "string",
"error": "string",
"createdAt": "2026-11-01T09:30:00.000Z",
"sentAt": "2026-11-01T09:30:00.000Z"
}/api/v1/debts/{id}/letters/previewReturns the text, addresses, page count/price (if available) and reasons preventing dispatch – does not send anything.
Permission: letters:read
Path parameters
idstringrequiredResource IDmax. 128 characters
Body (JSON) · LetterSend
kind"reminder1" | "reminder2" | "reminder3" | "custom"requiredregisteredbooleansubjectstringmax. 300 characterscontentstringRequired if kind=custom; otherwise default text of the dunning levelmax. 20000 characters
Response 200 · LetterPreview
subjectstringrequiredsalutationstringrequiredcontentstringrequiredclosingstringrequiredsignatureNamestringrequiredsenderobjectrequirednamestringrequiredcompanystringaddressstringrequired
recipientobjectrequirednamestringrequiredcompanystringaddressstringrequired
referencestringrequiredpageCountinteger | nullrequired-9007199254740991–9007199254740991priceEurostring | nullrequiredquotaobjectrequiredmode"own" | "central" | "none"requiredusedintegerrequired-9007199254740991–9007199254740991limitinteger | nullrequired-9007199254740991–9007199254740991periodStartstring | nullrequiredperiodEndstring | nullrequired
problemsArray<string>requiredReasons why the letter cannot be sent as is
curl -X POST 'https://www.debt-flow.io/api/v1/debts/ID/letters/preview' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"kind": "reminder1",
"registered": false,
"subject": "string",
"content": "string"
}'{
"subject": "string",
"salutation": "string",
"content": "string",
"closing": "string",
"signatureName": "string",
"sender": {
"name": "string",
"company": "string",
"address": "string"
},
"recipient": {
"name": "string",
"company": "string",
"address": "string"
},
"reference": "string",
"pageCount": 0,
"priceEuro": "string",
"quota": {
"mode": "own",
"used": 0,
"limit": 0,
"periodStart": "string",
"periodEnd": "string"
},
"problems": [
"string"
]
}/api/v1/lettersSent letters with dispatch and delivery status, newest first.
Permission: letters:read
Query parameters
debtIdstringmax. 128 characterscontactIdstringmax. 128 characterslimitintegerNumber of entries (1–100)1–100 · Default: 25cursorstring`nextCursor` of the previous pagemax. 500 characters
Response 200
object"list"requireddataArray<Letter>requiredidstringrequiredobject"letter"requireddebtIdstringrequiredcontactIdstringrequiredcontactNamestringrequiredkind"reminder1" | "reminder2" | "reminder3" | "custom"requiredsubjectstringrequiredstatus"sending" | "sent" | "failed"requireddeliveryStatus"pending" | "delivered" | "failed" | "returned" | nullrequiredmode"own" | "central"requiredown Briefdiener account or subscription plan quotatrigger"manual" | "auto"requiredregisteredbooleanrequiredRegistered mailtrackingRefstring | nullrequiredtrackingUrlstring | nullrequiredpageCountinteger | nullrequired-9007199254740991–9007199254740991priceEurostring | nullrequirederrorstring | nullrequiredcreatedAtstring (date-time)requiredTimestamp (ISO 8601)sentAtstring (date-time) | nullrequiredTimestamp (ISO 8601)
hasMorebooleanrequirednextCursorstring | nullrequired
curl 'https://www.debt-flow.io/api/v1/letters' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY"{
"object": "list",
"data": [
{
"id": "string",
"object": "letter",
"debtId": "string",
"contactId": "string",
"contactName": "string",
"kind": "reminder1",
"subject": "string",
"status": "sending",
"deliveryStatus": "pending",
"mode": "own",
"trigger": "manual",
"registered": false,
"trackingRef": "string",
"trackingUrl": "string",
"pageCount": 0,
"priceEuro": "string",
"error": "string",
"createdAt": "2026-11-01T09:30:00.000Z",
"sentAt": "2026-11-01T09:30:00.000Z"
}
],
"hasMore": false,
"nextCursor": "string"
}/api/v1/letters/{id}Permission: letters:read
Path parameters
idstringrequiredResource IDmax. 128 characters
Response 200 · Letter
idstringrequiredobject"letter"requireddebtIdstringrequiredcontactIdstringrequiredcontactNamestringrequiredkind"reminder1" | "reminder2" | "reminder3" | "custom"requiredsubjectstringrequiredstatus"sending" | "sent" | "failed"requireddeliveryStatus"pending" | "delivered" | "failed" | "returned" | nullrequiredmode"own" | "central"requiredown Briefdiener account or subscription plan quotatrigger"manual" | "auto"requiredregisteredbooleanrequiredRegistered mailtrackingRefstring | nullrequiredtrackingUrlstring | nullrequiredpageCountinteger | nullrequired-9007199254740991–9007199254740991priceEurostring | nullrequirederrorstring | nullrequiredcreatedAtstring (date-time)requiredTimestamp (ISO 8601)sentAtstring (date-time) | nullrequiredTimestamp (ISO 8601)
curl 'https://www.debt-flow.io/api/v1/letters/ID' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY"{
"id": "string",
"object": "letter",
"debtId": "string",
"contactId": "string",
"contactName": "string",
"kind": "reminder1",
"subject": "string",
"status": "sending",
"deliveryStatus": "pending",
"mode": "own",
"trigger": "manual",
"registered": false,
"trackingRef": "string",
"trackingUrl": "string",
"pageCount": 0,
"priceEuro": "string",
"error": "string",
"createdAt": "2026-11-01T09:30:00.000Z",
"sentAt": "2026-11-01T09:30:00.000Z"
}/api/v1/letters/quotacentral = quota of the subscription plan (used/limit per month), own = your own Briefdiener account, none = not available (reason).
Permission: letters:read
Response 200 · LetterQuota
mode"own" | "central" | "none"requiredusedintegerrequired-9007199254740991–9007199254740991limitinteger | nullrequired-9007199254740991–9007199254740991periodStartstring | nullrequiredperiodEndstring | nullrequiredreasonstring | nullrequired
curl 'https://www.debt-flow.io/api/v1/letters/quota' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY"{
"mode": "own",
"used": 0,
"limit": 0,
"periodStart": "string",
"periodEnd": "string",
"reason": "string"
}