Online payments
/api/v1/payment-linksNewest first. Filter by invoice (invoiceId), debt (debtId) and status.
Permission: payments:read
Query parameters
invoiceIdstringmax. 128 charactersdebtIdstringmax. 128 charactersstatus"active" | "paid" | "deactivated"limitintegerNumber of entries (1–100)1–100 · Default: 25cursorstring`nextCursor` of the previous pagemax. 500 characters
Response 200
object"list"requireddataArray<PaymentLink>requiredidstringrequiredobject"payment_link"requiredurlstring (uri)requiredPublic link for the payer (without sign-in)status"active" | "paid" | "deactivated"requiredtargetType"invoice" | "debt"requiredinvoiceIdstring | nullrequireddebtIdstring | nullrequiredcontactIdstring | nullrequiredreferencestringrequiredInvoice number or debt referencedescriptionstringrequiredamountDueCentsinteger | nullrequiredCurrent outstanding amount (single retrieval only, otherwise null)0–100000000000paidCentsintegerrequiredPaid via this link0–100000000000processingobject | nullrequiredPayment initiated, credit still pending (e.g. SEPA direct debit)amountCentsintegerrequiredAmount in cents0–100000000000sincestring (date-time)requiredTimestamp (ISO 8601)
paymentsArray<OnlinePayment>requiredidstringrequiredID of the recorded payment (stripe_<Checkout-Session-ID>)object"payment"requiredtargetType"invoice" | "debt"requiredinvoiceIdstring | nullrequireddebtIdstring | nullrequiredamountCentsintegerrequiredAmount in cents0–100000000000currency"EUR"requireddatestring (date)requiredPayment date (Europe/Berlin)method"stripe"requiredpaymentLinkIdstringrequiredstripeobjectrequiredcreatedAtstring (date-time)requiredTimestamp (ISO 8601)
lastCheckoutAtstring (date-time) | nullrequiredTimestamp (ISO 8601)paidAtstring (date-time) | nullrequiredTimestamp (ISO 8601)deactivatedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)createdAtstring (date-time)requiredTimestamp (ISO 8601)updatedAtstring (date-time)requiredTimestamp (ISO 8601)
hasMorebooleanrequirednextCursorstring | nullrequired
curl 'https://www.debt-flow.io/api/v1/payment-links' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY"{
"object": "list",
"data": [
{
"id": "pl_7hQ2mK9xR4tB1nC8vD3eF6gH",
"object": "payment_link",
"url": "https://example.com",
"status": "active",
"targetType": "invoice",
"invoiceId": "string",
"debtId": "string",
"contactId": "string",
"reference": "string",
"description": "string",
"amountDueCents": 0,
"paidCents": 0,
"processing": {
"amountCents": 0,
"since": "2026-11-01T09:30:00.000Z"
},
"payments": [
{
"id": null,
"object": null,
"targetType": null,
"invoiceId": null,
"debtId": null,
"amountCents": null,
"currency": null,
"date": null,
"method": null,
"paymentLinkId": null,
"stripe": null,
"createdAt": null
}
],
"lastCheckoutAt": "2026-11-01T09:30:00.000Z",
"paidAt": "2026-11-01T09:30:00.000Z",
"deactivatedAt": "2026-11-01T09:30:00.000Z",
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z"
}
],
"hasMore": false,
"nextCursor": "string"
}/api/v1/payment-linksCreates the permanent payment link for a finalised, open invoice or for an open debt – or returns the link that is already active. In each case, the amount outstanding at the time of the call is paid. Requires an active Stripe account (409 stripe_not_connected).
Permission: payments:write
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) · PaymentLinkCreate
invoiceIdstringInvoice (finalised, open)max. 128 charactersdebtIdstringDebt (open)max. 128 characters
Response 201 · PaymentLink
idstringrequiredobject"payment_link"requiredurlstring (uri)requiredPublic link for the payer (without sign-in)status"active" | "paid" | "deactivated"requiredtargetType"invoice" | "debt"requiredinvoiceIdstring | nullrequireddebtIdstring | nullrequiredcontactIdstring | nullrequiredreferencestringrequiredInvoice number or debt referencedescriptionstringrequiredamountDueCentsinteger | nullrequiredCurrent outstanding amount (single retrieval only, otherwise null)0–100000000000paidCentsintegerrequiredPaid via this link0–100000000000processingobject | nullrequiredPayment initiated, credit still pending (e.g. SEPA direct debit)amountCentsintegerrequiredAmount in cents0–100000000000sincestring (date-time)requiredTimestamp (ISO 8601)
paymentsArray<OnlinePayment>requiredidstringrequiredID of the recorded payment (stripe_<Checkout-Session-ID>)object"payment"requiredtargetType"invoice" | "debt"requiredinvoiceIdstring | nullrequireddebtIdstring | nullrequiredamountCentsintegerrequiredAmount in cents0–100000000000currency"EUR"requireddatestring (date)requiredPayment date (Europe/Berlin)method"stripe"requiredpaymentLinkIdstringrequiredstripeobjectrequiredaccountIdstringrequiredcheckoutSessionIdstringrequiredpaymentIntentIdstring | nullrequired
createdAtstring (date-time)requiredTimestamp (ISO 8601)
lastCheckoutAtstring (date-time) | nullrequiredTimestamp (ISO 8601)paidAtstring (date-time) | nullrequiredTimestamp (ISO 8601)deactivatedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)createdAtstring (date-time)requiredTimestamp (ISO 8601)updatedAtstring (date-time)requiredTimestamp (ISO 8601)
curl -X POST 'https://www.debt-flow.io/api/v1/payment-links' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"invoiceId": "string",
"debtId": "string"
}'{
"id": "pl_7hQ2mK9xR4tB1nC8vD3eF6gH",
"object": "payment_link",
"url": "https://example.com",
"status": "active",
"targetType": "invoice",
"invoiceId": "string",
"debtId": "string",
"contactId": "string",
"reference": "string",
"description": "string",
"amountDueCents": 0,
"paidCents": 0,
"processing": {
"amountCents": 0,
"since": "2026-11-01T09:30:00.000Z"
},
"payments": [
{
"id": "string",
"object": "payment",
"targetType": "invoice",
"invoiceId": "string",
"debtId": "string",
"amountCents": 0,
"currency": "EUR",
"date": "2026-11-01",
"method": "stripe",
"paymentLinkId": "string",
"stripe": {
"accountId": "string",
"checkoutSessionId": "string",
"paymentIntentId": "string"
},
"createdAt": "2026-11-01T09:30:00.000Z"
}
],
"lastCheckoutAt": "2026-11-01T09:30:00.000Z",
"paidAt": "2026-11-01T09:30:00.000Z",
"deactivatedAt": "2026-11-01T09:30:00.000Z",
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z"
}/api/v1/payment-links/{id}Including the current outstanding amount (amountDueCents) and the payments received via the link.
Permission: payments:read
Path parameters
idstringrequiredResource IDmax. 128 characters
Response 200 · PaymentLink
idstringrequiredobject"payment_link"requiredurlstring (uri)requiredPublic link for the payer (without sign-in)status"active" | "paid" | "deactivated"requiredtargetType"invoice" | "debt"requiredinvoiceIdstring | nullrequireddebtIdstring | nullrequiredcontactIdstring | nullrequiredreferencestringrequiredInvoice number or debt referencedescriptionstringrequiredamountDueCentsinteger | nullrequiredCurrent outstanding amount (single retrieval only, otherwise null)0–100000000000paidCentsintegerrequiredPaid via this link0–100000000000processingobject | nullrequiredPayment initiated, credit still pending (e.g. SEPA direct debit)amountCentsintegerrequiredAmount in cents0–100000000000sincestring (date-time)requiredTimestamp (ISO 8601)
paymentsArray<OnlinePayment>requiredidstringrequiredID of the recorded payment (stripe_<Checkout-Session-ID>)object"payment"requiredtargetType"invoice" | "debt"requiredinvoiceIdstring | nullrequireddebtIdstring | nullrequiredamountCentsintegerrequiredAmount in cents0–100000000000currency"EUR"requireddatestring (date)requiredPayment date (Europe/Berlin)method"stripe"requiredpaymentLinkIdstringrequiredstripeobjectrequiredaccountIdstringrequiredcheckoutSessionIdstringrequiredpaymentIntentIdstring | nullrequired
createdAtstring (date-time)requiredTimestamp (ISO 8601)
lastCheckoutAtstring (date-time) | nullrequiredTimestamp (ISO 8601)paidAtstring (date-time) | nullrequiredTimestamp (ISO 8601)deactivatedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)createdAtstring (date-time)requiredTimestamp (ISO 8601)updatedAtstring (date-time)requiredTimestamp (ISO 8601)
curl 'https://www.debt-flow.io/api/v1/payment-links/ID' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY"{
"id": "pl_7hQ2mK9xR4tB1nC8vD3eF6gH",
"object": "payment_link",
"url": "https://example.com",
"status": "active",
"targetType": "invoice",
"invoiceId": "string",
"debtId": "string",
"contactId": "string",
"reference": "string",
"description": "string",
"amountDueCents": 0,
"paidCents": 0,
"processing": {
"amountCents": 0,
"since": "2026-11-01T09:30:00.000Z"
},
"payments": [
{
"id": "string",
"object": "payment",
"targetType": "invoice",
"invoiceId": "string",
"debtId": "string",
"amountCents": 0,
"currency": "EUR",
"date": "2026-11-01",
"method": "stripe",
"paymentLinkId": "string",
"stripe": {
"accountId": "string",
"checkoutSessionId": "string",
"paymentIntentId": "string"
},
"createdAt": "2026-11-01T09:30:00.000Z"
}
],
"lastCheckoutAt": "2026-11-01T09:30:00.000Z",
"paidAt": "2026-11-01T09:30:00.000Z",
"deactivatedAt": "2026-11-01T09:30:00.000Z",
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z"
}/api/v1/payment-links/{id}/checkoutWithout authentication: creates a Stripe Checkout Session on the payee's Stripe account for the current outstanding amount and returns the URL to which the browser is redirected. A still-valid session with the same amount is reused.
No authentication required.
Path parameters
idstringrequiredResource IDmax. 128 characters
Response 200 · CheckoutRedirect
urlstring (uri)requiredStripe Checkout page (browser redirect)expiresAtstring (date-time)requiredTimestamp (ISO 8601)amountCentsintegerrequiredAmount in cents0–100000000000
curl -X POST 'https://www.debt-flow.io/api/v1/payment-links/ID/checkout'{
"url": "https://example.com",
"expiresAt": "2026-11-01T09:30:00.000Z",
"amountCents": 0
}/api/v1/payment-links/{id}/deactivateThe link no longer accepts payments. A new link can then be created for the same invoice/debt.
Permission: payments: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
Response 200 · PaymentLink
idstringrequiredobject"payment_link"requiredurlstring (uri)requiredPublic link for the payer (without sign-in)status"active" | "paid" | "deactivated"requiredtargetType"invoice" | "debt"requiredinvoiceIdstring | nullrequireddebtIdstring | nullrequiredcontactIdstring | nullrequiredreferencestringrequiredInvoice number or debt referencedescriptionstringrequiredamountDueCentsinteger | nullrequiredCurrent outstanding amount (single retrieval only, otherwise null)0–100000000000paidCentsintegerrequiredPaid via this link0–100000000000processingobject | nullrequiredPayment initiated, credit still pending (e.g. SEPA direct debit)amountCentsintegerrequiredAmount in cents0–100000000000sincestring (date-time)requiredTimestamp (ISO 8601)
paymentsArray<OnlinePayment>requiredidstringrequiredID of the recorded payment (stripe_<Checkout-Session-ID>)object"payment"requiredtargetType"invoice" | "debt"requiredinvoiceIdstring | nullrequireddebtIdstring | nullrequiredamountCentsintegerrequiredAmount in cents0–100000000000currency"EUR"requireddatestring (date)requiredPayment date (Europe/Berlin)method"stripe"requiredpaymentLinkIdstringrequiredstripeobjectrequiredaccountIdstringrequiredcheckoutSessionIdstringrequiredpaymentIntentIdstring | nullrequired
createdAtstring (date-time)requiredTimestamp (ISO 8601)
lastCheckoutAtstring (date-time) | nullrequiredTimestamp (ISO 8601)paidAtstring (date-time) | nullrequiredTimestamp (ISO 8601)deactivatedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)createdAtstring (date-time)requiredTimestamp (ISO 8601)updatedAtstring (date-time)requiredTimestamp (ISO 8601)
curl -X POST 'https://www.debt-flow.io/api/v1/payment-links/ID/deactivate' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY"{
"id": "pl_7hQ2mK9xR4tB1nC8vD3eF6gH",
"object": "payment_link",
"url": "https://example.com",
"status": "active",
"targetType": "invoice",
"invoiceId": "string",
"debtId": "string",
"contactId": "string",
"reference": "string",
"description": "string",
"amountDueCents": 0,
"paidCents": 0,
"processing": {
"amountCents": 0,
"since": "2026-11-01T09:30:00.000Z"
},
"payments": [
{
"id": "string",
"object": "payment",
"targetType": "invoice",
"invoiceId": "string",
"debtId": "string",
"amountCents": 0,
"currency": "EUR",
"date": "2026-11-01",
"method": "stripe",
"paymentLinkId": "string",
"stripe": {
"accountId": "string",
"checkoutSessionId": "string",
"paymentIntentId": "string"
},
"createdAt": "2026-11-01T09:30:00.000Z"
}
],
"lastCheckoutAt": "2026-11-01T09:30:00.000Z",
"paidAt": "2026-11-01T09:30:00.000Z",
"deactivatedAt": "2026-11-01T09:30:00.000Z",
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z"
}/api/v1/payment-links/{id}/publicWithout authentication: recipient, reference and outstanding amount for the payment page (/pay/{id}). The link ID is random and cannot be guessed.
No authentication required.
Path parameters
idstringrequiredResource IDmax. 128 characters
Response 200 · PublicPaymentLink
idstringrequiredobject"public_payment_link"requiredstatus"payable" | "processing" | "paid" | "unavailable"requiredcreditorNamestringrequiredPayeetargetType"invoice" | "debt"requiredreferencestringrequireddescriptionstringrequiredamountDueCentsintegerrequiredAmount in cents0–100000000000currency"EUR"requiredlivemodebooleanrequiredfalse = test mode, no real money is moved
curl 'https://www.debt-flow.io/api/v1/payment-links/ID/public'{
"id": "string",
"object": "public_payment_link",
"status": "payable",
"creditorName": "string",
"targetType": "invoice",
"reference": "string",
"description": "string",
"amountDueCents": 0,
"currency": "EUR",
"livemode": false
}/api/v1/stripe-accountStatus of the Stripe Connect connection (the user's Standard account) and settings for payment links. Payments go directly to the user's Stripe account; DebtFlow charges no fee.
Permission: payments:read
Response 200 · StripeAccount
object"stripe_account"requiredstatus"unavailable" | "not_connected" | "onboarding" | "restricted" | "active" | "disconnected"required`unavailable` = not set up on this server, `onboarding` = details missing at Stripe, `restricted` = Stripe has restricted payments, `active` = payments possibleoauthAvailablebooleanrequiredAn existing Stripe account can be connected via OAuthaccountIdstring | nullrequiredStripe account ID (acct_…)connectedVia"oauth" | "onboarding" | nullrequiredchargesEnabledbooleanrequiredpayoutsEnabledbooleanrequireddetailsSubmittedbooleanrequiredrequirementsDueArray<string>requiredDetails still missing at Stripe (Stripe field names)businessNamestring | nullrequiredcountrystring | nullrequireddefaultCurrencystring | nullrequiredlivemodeboolean | nullrequiredfalse = test modesettingsPaymentLinkSettingsrequiredincludeInInvoicesbooleanrequiredInclude payment link + QR code in invoice PDF and invoice emailincludeInDunningbooleanrequiredInclude payment link in dunning letters (email and letter)
connectedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)updatedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)
curl 'https://www.debt-flow.io/api/v1/stripe-account' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY"{
"object": "stripe_account",
"status": "unavailable",
"oauthAvailable": false,
"accountId": "string",
"connectedVia": "oauth",
"chargesEnabled": false,
"payoutsEnabled": false,
"detailsSubmitted": false,
"requirementsDue": [
"string"
],
"businessName": "string",
"country": "string",
"defaultCurrency": "string",
"livemode": false,
"settings": {
"includeInInvoices": false,
"includeInDunning": false
},
"connectedAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z"
}/api/v1/stripe-accountDetermines whether the payment link is automatically inserted into invoices (PDF and email) and into dunning letters.
Permission: payments:write
Body (JSON) · StripeAccountPatch
settingsobjectrequiredincludeInInvoicesbooleanInclude payment link + QR code in invoice PDF and invoice emailincludeInDunningbooleanInclude payment link in dunning letters (email and letter)
Response 200 · StripeAccount
object"stripe_account"requiredstatus"unavailable" | "not_connected" | "onboarding" | "restricted" | "active" | "disconnected"required`unavailable` = not set up on this server, `onboarding` = details missing at Stripe, `restricted` = Stripe has restricted payments, `active` = payments possibleoauthAvailablebooleanrequiredAn existing Stripe account can be connected via OAuthaccountIdstring | nullrequiredStripe account ID (acct_…)connectedVia"oauth" | "onboarding" | nullrequiredchargesEnabledbooleanrequiredpayoutsEnabledbooleanrequireddetailsSubmittedbooleanrequiredrequirementsDueArray<string>requiredDetails still missing at Stripe (Stripe field names)businessNamestring | nullrequiredcountrystring | nullrequireddefaultCurrencystring | nullrequiredlivemodeboolean | nullrequiredfalse = test modesettingsPaymentLinkSettingsrequiredincludeInInvoicesbooleanrequiredInclude payment link + QR code in invoice PDF and invoice emailincludeInDunningbooleanrequiredInclude payment link in dunning letters (email and letter)
connectedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)updatedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)
curl -X PATCH 'https://www.debt-flow.io/api/v1/stripe-account' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"settings": {
"includeInInvoices": false,
"includeInDunning": false
}
}'{
"object": "stripe_account",
"status": "unavailable",
"oauthAvailable": false,
"accountId": "string",
"connectedVia": "oauth",
"chargesEnabled": false,
"payoutsEnabled": false,
"detailsSubmitted": false,
"requirementsDue": [
"string"
],
"businessName": "string",
"country": "string",
"defaultCurrency": "string",
"livemode": false,
"settings": {
"includeInInvoices": false,
"includeInDunning": false
},
"connectedAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z"
}/api/v1/stripe-account/refreshQueries the current state (payments/payouts enabled, missing information) directly from Stripe, e.g. after returning from onboarding.
Permission: payments:read
Response 200 · StripeAccount
object"stripe_account"requiredstatus"unavailable" | "not_connected" | "onboarding" | "restricted" | "active" | "disconnected"required`unavailable` = not set up on this server, `onboarding` = details missing at Stripe, `restricted` = Stripe has restricted payments, `active` = payments possibleoauthAvailablebooleanrequiredAn existing Stripe account can be connected via OAuthaccountIdstring | nullrequiredStripe account ID (acct_…)connectedVia"oauth" | "onboarding" | nullrequiredchargesEnabledbooleanrequiredpayoutsEnabledbooleanrequireddetailsSubmittedbooleanrequiredrequirementsDueArray<string>requiredDetails still missing at Stripe (Stripe field names)businessNamestring | nullrequiredcountrystring | nullrequireddefaultCurrencystring | nullrequiredlivemodeboolean | nullrequiredfalse = test modesettingsPaymentLinkSettingsrequiredincludeInInvoicesbooleanrequiredInclude payment link + QR code in invoice PDF and invoice emailincludeInDunningbooleanrequiredInclude payment link in dunning letters (email and letter)
connectedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)updatedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)
curl -X POST 'https://www.debt-flow.io/api/v1/stripe-account/refresh' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY"{
"object": "stripe_account",
"status": "unavailable",
"oauthAvailable": false,
"accountId": "string",
"connectedVia": "oauth",
"chargesEnabled": false,
"payoutsEnabled": false,
"detailsSubmitted": false,
"requirementsDue": [
"string"
],
"businessName": "string",
"country": "string",
"defaultCurrency": "string",
"livemode": false,
"settings": {
"includeInInvoices": false,
"includeInDunning": false
},
"connectedAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z"
}