Release 2026-06-01
This release introduces payment-method-specific statement descriptors.
statement_descriptor is removed from checkout and payment creation requests and replaced with method-specific fields
for cards and SEPA Direct Debit.
Statement descriptor per payment method
Field statement_descriptor is now payment-method-specific.
This allows each payment method to use its own capabilities, length, and supported characters instead of being limited by the most restrictive method.
For example, if the same field were reused for cards and SEPA Direct Debit, SEPA Direct Debit values (up to 140 characters) would be limited by the cards constraint (18 characters).
Breaking change: statement_descriptor is no longer supported in checkout and payment creation request payloads.
What changes
- Checkout creation POST
api.getpaid.io/v2/checkouts- Request
- Breaking:
statement_descriptorfield is removed. - New
payment_methods.options.cards.dynamic_descriptorfield for cards. - New
payment_methods.options.sepa_direct_debit.remittance_infofield for SEPA Direct Debit.
- Breaking:
- Response:
- Breaking:
statement_descriptorfield is removed and it is no longer returned on checkout creation.
- Breaking:
- Request
- Checkout details GET
api.getpaid.io/v2/checkouts/{checkout_id}- Breaking:
statement_descriptoris no longer returned. - New
payment_methods.optionsblock is returned if sent in the creation request.
- Breaking:
- Payment creation POST
api.getpaid.io/v2/payments- Request:
- Breaking:
statement_descriptorfield is removed. - New
methodblock for requests. - New
method.dynamic_descriptorfield for cards whenmethod.typeiscard. - New
method.remittance_infofield for SEPA Direct Debit whenmethod.typeissepa_direct_debit.
- Breaking:
- Response:
statement_descriptormaximum length is now140.
- Request:
- Payment details GET
api.getpaid.io/v2/payments/{payment_id}statement_descriptormaximum length is now140.
Migration checklist
- Remove
statement_descriptorfrom checkout and payment creation request payloads. - Stop reading
statement_descriptorin checkout creation responses. - If needed, start reading the
payment_methods.optionsblock in the checkout details response. - Set method-specific fields in request payloads:
- Checkouts:
payment_methods.options.cards.dynamic_descriptorand/orpayment_methods.options.sepa_direct_debit.remittance_info. - Payments:
method.dynamic_descriptorormethod.remittance_infodepending on themethod.type.
- Checkouts:
- Update request validation rules:
- Cards
dynamic_descriptor:^[a-zA-Z0-9 *\._-]{1,18}$. - SEPA Direct Debit
remittance_info: maximum of140characters.
- Cards
- Keep reading
statement_descriptorin payment creation and payment detail responses and expect a maximum of140characters.
Detailed changes
Checkout creation
Changes in the checkout creation request and response (POST api.getpaid.io/v2/checkouts
endpoint).
Before:
{
"reference": "ORD-202510-0232",
"amount": 10000,
"currency": "EUR",
"description": "Order #202510-0232",
// Removed. Use instead:
// "payment_methods.options.cards.dynamic_descriptor" for cards
// "payment_methods.options.sepa_direct_debit.remittance_info" for SDDs
"statement_descriptor": "TITAN*202510-0232",
[...]
}
{
"reference": "ORD-202510-0232",
"amount": 10000,
"currency": "EUR",
"description": "Order #202510-0232",
// Removed. The buyer-visible statement descriptor is calculated
// once the payment method is known, in the payment details
"statement_descriptor": "GPD*TITAN*202510-0232",
[...]
}
After:
{
"reference": "ORD-202510-0232",
"amount": 10000,
"currency": "EUR",
"description": "Order #202510-0232",
"payment_methods": {
// "options" is available for any payment methods strategy
// selection: "explicit", "default", etc.
"type": "default",
[...],
"options": {
"cards": {
// Value will be prefixed with "GPD*" in the payment statement descriptor
"dynamic_descriptor": "TITAN*202510-0232"
},
"sepa_direct_debit": {
"remittance_info": "Titan Auto Parts Ord. #0232 Inv. #202500632"
}
}
},
[...]
}
Checkout details
statement_descriptor field is removed and replaced by the payment_methods.options block in checkout details (GET
api.getpaid.io/v2/checkouts/{checkout_id} endpoint).
Before:
{
[...],
"amount": 10000,
"currency": "EUR",
"description": "Order #202510-0232",
// Removed. The buyer-visible statement descriptor is calculated
// once the payment method is known, in the payment details
"statement_descriptor": "GPD*TITAN*202510-0232",
[...]
}
After:
{
[...],
"reference": "ORD-202510-0232",
"amount": 10000,
"currency": "EUR",
"description": "Order #202510-0232",
"payment_methods": {
"type": "default",
[...],
"options": {
"cards": {
"dynamic_descriptor": "TITAN*202510-0232"
},
"sepa_direct_debit": {
"remittance_info": "Titan Auto Parts Ord. #0232 Inv. #202500632"
}
}
},
[...]
}
Payment creation
Changes in the payment creation request (POST api.getpaid.io/v2/payments
endpoint).
Before:
{
"reference": "ORD-202510-0232",
"amount": 10000,
"currency": "EUR",
"description": "Order #202510-0232",
// Removed. Use instead:
// "method.dynamic_descriptor" for cards
// "method.remittance_info" for SEPA Direct Debit
"statement_descriptor": "TITAN*202510-0232",
[...]
}
After (cards):
{
"reference": "ORD-202510-0232",
"amount": 10000,
"currency": "EUR",
"description": "Order #202510-0232",
"method": {
"type": "card",
"dynamic_descriptor": "TITAN*202510-0232"
},
[...]
}
After (SEPA Direct Debit):
{
"reference": "ORD-202510-0232",
"amount": 10000,
"currency": "EUR",
"description": "Order #202510-0232",
"method": {
"type": "sepa_direct_debit",
"remittance_info": "Titan Auto Parts Ord. #0232 Inv. #202500632"
},
[...]
}
Payment creation response and details
statement_descriptor is computed and returned as the buyer sees it in their bank account in both the payment creation
response (POST api.getpaid.io/v2/payments endpoint) and payment details
(GET api.getpaid.io/v2/payments/{payment_id} endpoint).
{
[...],
"reference": "ORD-202510-0232",
"amount": 10000,
"currency": "EUR",
"description": "Order #202510-0232",
// For cards, it is the "method.dynamic_descriptor"
// preceded by the prefix "GPD*"
"statement_descriptor": "GPD*TITAN*202510-0232",
[...]
}
{
"reference": "ORD-202510-0232",
"amount": 10000,
"currency": "EUR",
"description": "Order #202510-0232",
// For SEPA Direct Debit, it is the "method.remittance_info"
"statement_descriptor": "Titan Auto Parts Ord. #0232 Inv. #202500632",
[...]
}