Skip to navigation

Dunning & payment retries

This guide talks about ahat Solvimon does when an invoice is not paid: how payment attempts are retried, what dunning actions look like on the invoice, and how to drive reminders and escalation from workflows.


Why this matters

A failed payment is not an exception; on a card-based subscription book it is a steady percentage of every billing run. Dunning is the process that turns those failures back into cash: retry the payment, remind the customer, and escalate when the reminders do not work. Solvimon tracks the attempts and exposes the triggers; the retry cadence itself lives with your payment service provider.

How it works

Two separate mechanisms operate on an unpaid invoice.

Payment retries are attempts to charge the stored payment method again. For card payments through Adyen, this is Adyen Auto Rescue, which decides which refused or charged-back payments are worth retrying and picks the timing. Solvimon records each attempt.

Dunning actions are the collection steps Solvimon itself takes against an invoice: the payment requests it raises and their outcome. Each carries a status:

StatusMeaning
PENDINGThe dunning action has been raised and is awaiting an outcome
SUCCESSFULThe payment was collected
FAILEDThe attempt failed; failure_reason carries the detail
CANCEL_PENDINGA cancellation has been requested and is being processed
CANCELLEDThe dunning action was cancelled before completion

A dunning action references the payment_acceptor_id it was raised against and the first_payment_id of the attempt chain, so a sequence of retries on one invoice stays traceable to a single collection effort.

Retry counts and intervals are configured at the payment service provider, not in Solvimon. Solvimon exposes the resulting attempts (attempt, and whether a next_attempt_scheduled exists) but has no retry-schedule setting of its own.

Inspecting attempts

To see what has been tried on an invoice, read its payment attempts:

GET
/v:version/invoices/:resourceId/payment-attempts
curl https://test.api.solvimon.com/v1/invoices//payment-attempts \
-H "X-API-KEY: <apiKey>" \
-H "Content-Type: application/json"
Response
{
"data": [
{
"object_type": "payment_attempt",
"id": "pa_8f3b2c1d4e5f678901234567",
"created_at": "2024-01-15T09:30:00Z",
"timestamp": "2024-01-15T09:30:00Z",
"customer_id": "cus_1234567890abcdef",
"customer": {
"object_type": "customer",
"id": "cus_1234567890abcdef",
"created_at": "2023-12-01T10:00:00Z",
"parent_customer_id": "cus_parent_9876543210fedcba",
"parent_customer_ids": [
"cus_parent_9876543210fedcba"
],
"reference": "CUST-20240115",
"status": "ACTIVE",
"timezone": "Europe/Amsterdam",
"type": "ORGANIZATION",
"email": "billing@acmecorp.com",
"notification_preferences": [
{
"type": "INVOICE",
"channels": [
{
"type": "EMAIL",
"enabled": true
}
]
}
],
"locale": "en-US",
"individual": {
"name": {
"first_name": "John",
"last_name": "Doe",
"infix": ""
},
"residential_address": {
"line1": "123 Main Street",
"line2": "Suite 400",
"city": "Amsterdam",
"postal_code": "1012 WX",
"state": "North Holland",
"country": "NL"
}
},
"organization": {
"legal_name": "Acme Corporation",
"tax_id": "NL123456789B01",
"tax_ids": [
{
"id": "NL123456789B01",
"type": "VAT"
}
],
"registration_number": "KvK 12345678",
"tax_exempt": false,
"tax_exempt_note": "",
"registered_address": {
"line1": "123 Main Street",
"line2": "Suite 400",
"city": "Amsterdam",
"postal_code": "1012 WX",
"state": "North Holland",
"country": "NL"
}
},
"custom_fields": [
{
"id": "cf_001",
"reference": "preferred_contact",
"value": "email",
"values": [
"email"
],
"integration_details": {
"id": "int_001",
"reference": "adyen_gateway",
"payment_gateway_variant": "ADYEN",
"adyen": {
"recurring_detail_reference": "recurring_12345"
},
"stripe": {
"payment_method_id": "pm_1GqIC8Lz0qyl6XeW3r5b6X9Y"
}
}
}
],
"pricing_plan_subscription_selector": {
"data": [
{
"field": "BILLING_ENTITY_REGISTERED_ADDRESS_COUNTRY",
"value": "NL"
}
],
"rules": [
{
"field": "BILLING_ENTITY_REGISTERED_ADDRESS_COUNTRY",
"type": "EQUALS"
}
],
"filters": [
{
"field": "BILLING_ENTITY_REGISTERED_ADDRESS_COUNTRY",
"type": "EQUALS",
"value": "NL"
}
],
"fallback": "LATEST"
},
"linked_integrations": [
{
"id": "int_001",
"link_details": [
{
"url": "https://dashboard.adyen.com",
"custom_field_name": "adyen_account"
}
]
}
],
"roles": [
"DEFAULT"
],
"processing_only": false
},
"invoice_id": "inv_20240115_0001",
"payment_acceptor_id": "pa_merchant_001",
"payment_acceptor_reference": "merchant_ref_20240115",
"payment_method_id": "pm_card_visa_1234",
"payment_method_details": {
"type": "CARD",
"card": {
"brand": "VISA",
"name": "John Doe",
"expiry_date": {
"expiry_month": 12,
"expiry_year": 2026
},
"last_four_digits": "4242",
"country": "US"
},
"online_banking": {
"variant": "SEPA",
"owner_name": "John Doe",
"iban": "NL91ABNA0417164300",
"bic": "ABNANL2A",
"country": "NL"
},
"buy_now_pay_later": {
"variant": "Afterpay"
},
"direct_debit": {
"variant": "SEPA",
"owner_name": "John Doe",
"iban": "NL91ABNA0417164300",
"bic": "ABNANL2A",
"country": "NL"
},
"digital_wallet": {
"variant": "ApplePay"
},
"unknown": {
"variant": "unknown"
}
},
"integration_payment_method_reference": "int_pm_987654321",
"external_reference": "ext_ref_20240115",
"amount": {
"quantity": "15000",
"currency": "AED"
},
"result": "AUTHORIZED",
"result_details": {
"code": "00",
"reason": "Approved",
"external_code": "AUTH_00",
"external_reason": "Transaction approved"
},
"dunning_action_details": {
"attempt": 1,
"external_reference": "dunning_ext_ref_001",
"next_attempt_scheduled": true
},
"updated_at": "2024-01-15T10:00:00Z",
"context": {
"type": "INVOICE",
"related_resource_ids": [
{
"type": "PLATFORM",
"id": "platform_001"
}
],
"metadata": {},
"init_pricing_plan_subscription": {
"template_pricing_plan_subscription_id": "tpl_sub_001",
"pricing_plan_subscription_id": "sub_001",
"billing_entity_id": "be_001",
"customer_details": {
"object_type": "customer",
"id": "cus_1234567890abcdef",
"created_at": "2023-12-01T10:00:00Z",
"parent_customer_id": "cus_parent_9876543210fedcba",
"parent_customer_ids": [
"cus_parent_9876543210fedcba"
],
"reference": "CUST-20240115",
"status": "ACTIVE",
"timezone": "Europe/Amsterdam",
"type": "ORGANIZATION",
"email": "billing@acmecorp.com",
"notification_preferences": [
{
"type": "INVOICE",
"channels": [
{
"type": "EMAIL",
"enabled": true
}
]
}
],
"locale": "en-US",
"individual": {
"name": {
"first_name": "John",
"last_name": "Doe",
"infix": ""
},
"residential_address": {
"line1": "123 Main Street",
"line2": "Suite 400",
"city": "Amsterdam",
"postal_code": "1012 WX",
"state": "North Holland",
"country": "NL"
}
},
"organization": {
"legal_name": "Acme Corporation",
"tax_id": "NL123456789B01",
"tax_ids": [
{
"id": "NL123456789B01",
"type": "VAT"
}
],
"registration_number": "KvK 12345678",
"tax_exempt": false,
"tax_exempt_note": "",
"registered_address": {
"line1": "123 Main Street",
"line2": "Suite 400",
"city": "Amsterdam",
"postal_code": "1012 WX",
"state": "North Holland",
"country": "NL"
}
},
"custom_fields": [
{
"id": "cf_001",
"reference": "preferred_contact",
"value": "email",
"values": [
"email"
],
"integration_details": {
"id": "int_001",
"reference": "adyen_gateway",
"payment_gateway_variant": "ADYEN",
"adyen": {
"recurring_detail_reference": "recurring_12345"
},
"stripe": {
"payment_method_id": "pm_1GqIC8Lz0qyl6XeW3r5b6X9Y"
}
}
}
],
"pricing_plan_subscription_selector": {
"data": [
{
"field": "BILLING_ENTITY_REGISTERED_ADDRESS_COUNTRY",
"value": "NL"
}
],
"rules": [
{
"field": "BILLING_ENTITY_REGISTERED_ADDRESS_COUNTRY",
"type": "EQUALS"
}
],
"filters": [
{
"field": "BILLING_ENTITY_REGISTERED_ADDRESS_COUNTRY",
"type": "EQUALS",
"value": "NL"
}
],
"fallback": "LATEST"
},
"linked_integrations": [
{
"id": "int_001",
"link_details": [
{
"url": "https://dashboard.adyen.com",
"custom_field_name": "adyen_account"
}
]
}
],
"roles": [
"DEFAULT"
],
"processing_only": false
},
"pricing_plan_schedule_customizations": [
{
"pricing_plan_schedule_id": "sched_001",
"seats_values": [
{
"pricing_item_config_id": "config_001",
"number": "10",
"amount": {
"quantity": "100000",
"currency": "AED"
},
"start_at": "2024-01-15T09:30:00Z",
"end_at": "2024-12-31T23:59:59Z"
}
],
"enabled_pricings": [
{
"pricing_id": "price_001",
"start_at": "2024-01-15T09:30:00Z",
"end_at": "2025-01-15T09:30:00Z"
}
],
"promotion_codes": [
"NEWYEAR2024"
],
"pricing_currency": "AED",
"billing_period": {
"type": "DAY",
"value": 30
}
}
],
"enabled_pricings": [
{
"pricing_id": "price_001",
"start_at": "2024-01-15T09:30:00Z",
"end_at": "2025-01-15T09:30:00Z"
}
]
},
"create_payment_method": {
"payment_method_id": "pm_card_visa_1234"
},
"payment_request": {
"payment_request_id": "pr_20240115_0001"
}
}
}
],
"page": 1,
"limit": 1,
"links": {
"first": "/v1/invoices/inv_20240115_0001/payment-attempts?page=1",
"previous": null,
"current": "/v1/invoices/inv_20240115_0001/payment-attempts?page=1",
"next": null
},
"total_number_of_pages": 1
}

Each attempt carries the attempt number, an external_reference to the attempt at the provider, and next_attempt_scheduled, which tells you whether the provider intends to try again. When next_attempt_scheduled is false and the result is still unpaid, the automated retry chain is finished and the invoice needs human collection.

Payment results use a fixed set of values: AUTHORIZED, PENDING, REFUSED, CANCELLED, ERROR, REFUNDED, and CHARGED_BACK. result_details carries the provider’s reason, which is what you surface to the customer or to your collections team.

To see the payments themselves rather than the attempt chain, use GET /v{version}/invoices/{resourceId}/payments.

Stopping dunning on an invoice

When an invoice should no longer be chased, for example because it is disputed or is being settled by bank transfer, cancel its outstanding dunning actions:

POST
/v:version/invoices/:resourceId/cancel-dunning-actions
curl -X POST https://test.api.solvimon.com/v1/invoices//cancel-dunning-actions \
-H "X-API-KEY: <apiKey>" \
-H "Content-Type: application/json" \
-d '{}'
Response
{
"object_type": "invoice",
"id": "inv_1234567890abcdef",
"invoice_number": "INV-2024-0001",
"purchase_order_number": "PO-987654321",
"platform_id": "platform_001",
"sales_tax_percentage": "5.00",
"customer": {
"object_type": "customer",
"id": "cust_abcdef123456",
"created_at": "2024-04-01T10:00:00Z",
"parent_customer_id": "cust_parent_001",
"parent_customer_ids": [
"cust_parent_001",
"cust_grandparent_001"
],
"reference": "CUST-REF-001",
"status": "ACTIVE",
"timezone": "America/New_York",
"type": "ORGANIZATION",
"email": "contact@acmecorp.com",
"notification_preferences": [
{
"type": "INVOICE",
"channels": [
{
"type": "EMAIL",
"enabled": true
}
]
}
],
"locale": "en-US",
"individual": {
"name": {
"first_name": "John",
"last_name": "Doe",
"infix": ""
},
"residential_address": {
"line1": "123 Main St",
"line2": "Suite 400",
"city": "New York",
"postal_code": "10001",
"state": "NY",
"country": "US"
}
},
"organization": {
"legal_name": "Acme Corporation",
"tax_id": "98-7654321",
"tax_ids": [
{
"id": "taxid_001",
"type": "EIN",
"tax_id_validation_result": {
"id": "val_001",
"validation_date": "2024-04-01T09:00:00Z",
"source": "IRS",
"valid": "VALID",
"message": "Tax ID validated successfully"
}
}
],
"registration_number": "REG-123456",
"tax_exempt": false,
"tax_exempt_note": "",
"registered_address": {
"line1": "123 Corporate Blvd",
"line2": "Floor 5",
"city": "New York",
"postal_code": "10001",
"state": "NY",
"country": "US"
},
"tax_registrations": [
{
"id": "taxreg_001",
"description": "NY State Tax Registration",
"tax_id": "98-7654321",
"tax_ids": [
{
"id": "taxid_001",
"type": "EIN",
"tax_id_validation_result": {
"id": "val_001",
"validation_date": "2024-04-01T09:00:00Z",
"source": "IRS",
"valid": "VALID",
"message": "Tax ID validated successfully"
}
}
],
"registration_number": "REG-123456",
"registered_address": {
"line1": "123 Corporate Blvd",
"line2": "Floor 5",
"city": "New York",
"postal_code": "10001",
"state": "NY",
"country": "US"
}
}
]
},
"custom_fields": [
{
"id": "cf_001",
"reference": "customer_segment",
"value": "enterprise",
"values": [
"enterprise"
],
"integration_details": {
"id": "int_001",
"reference": "adyen_integration",
"payment_gateway_variant": "ADYEN",
"adyen": {
"recurring_detail_reference": "recurring_123"
},
"stripe": {
"payment_method_id": "pm_123456789"
}
}
}
],
"pricing_plan_subscription_selector": {
"data": [
{
"field": "BILLING_ENTITY_REGISTERED_ADDRESS_COUNTRY",
"value": "US"
}
],
"rules": [
{
"field": "BILLING_ENTITY_REGISTERED_ADDRESS_COUNTRY",
"type": "EQUALS"
}
],
"filters": [
{
"field": "BILLING_ENTITY_REGISTERED_ADDRESS_COUNTRY",
"type": "EQUALS",
"value": "US"
}
],
"fallback": "LATEST"
},
"linked_integrations": [
{
"id": "link_001",
"link_details": [
{
"url": "https://integration.acme.com/details",
"custom_field_name": "integration_link"
}
]
}
],
"roles": [
"DEFAULT"
],
"processing_only": false
},
"billing_entity": {
"object_type": "billing_entity",
"id": "be_001",
"created_at": "2023-12-01T08:00:00Z",
"reference": "BE-REF-001",
"status": "ACTIVE",
"timezone": "America/New_York",
"legal_name": "Acme Billing Entity",
"tax_id": "12-3456789",
"tax_ids": [
{
"id": "taxid_be_001",
"type": "EIN",
"tax_id_validation_result": {
"id": "val_be_001",
"validation_date": "2024-03-30T12:00:00Z",
"source": "IRS",
"valid": "VALID",
"message": "Valid tax ID"
}
}
],
"registration_number": "REG-BE-001",
"registered_address": {
"line1": "456 Billing St",
"line2": "Suite 100",
"city": "New York",
"postal_code": "10002",
"state": "NY",
"country": "US"
},
"email": "billing@acmecorp.com",
"tax_settings": {
"apply_local_vat_for_missing_tax_id": false
},
"tax_registrations": [
{
"id": "taxreg_be_001",
"description": "NY Billing Tax Registration",
"tax_id": "12-3456789",
"tax_ids": [
{
"id": "taxid_be_001",
"type": "EIN",
"tax_id_validation_result": {
"id": "val_be_001",
"validation_date": "2024-03-30T12:00:00Z",
"source": "IRS",
"valid": "VALID",
"message": "Valid tax ID"
}
}
],
"registration_number": "REG-BE-001",
"registered_address": {
"line1": "456 Billing St",
"line2": "Suite 100",
"city": "New York",
"postal_code": "10002",
"state": "NY",
"country": "US"
}
}
],
"custom_fields": [
{
"id": "cf_be_001",
"reference": "billing_entity_note",
"value": "Primary billing entity",
"values": [
"Primary billing entity"
],
"integration_details": {
"id": "int_be_001",
"reference": "stripe_integration",
"payment_gateway_variant": "STRIPE",
"adyen": {
"recurring_detail_reference": "recurring_be_123"
},
"stripe": {
"payment_method_id": "pm_be_123456"
}
}
}
],
"default_customer_country_selector": [
"US"
],
"default_billing_currency_selector": [
"USD"
],
"linked_integrations": [
{
"id": "link_be_001",
"link_details": [
{
"url": "https://billing.integration.acme.com",
"custom_field_name": "billing_integration_link"
}
]
}
]
},
"status": "CANCELLED",
"on_hold": false,
"type": "STANDARD",
"created_at": "2024-01-10T14:00:00Z",
"updated_at": "2024-04-10T12:00:00Z",
"invoice_date": "2024-01-15T09:30:00Z",
"delivery_date": "2024-01-16T09:30:00Z",
"due_date": "2024-02-15T09:30:00Z",
"billing_period_date": "2024-01-01T00:00:00Z",
"billing_currency": "USD",
"invoice_amount_including_tax": {
"quantity": "1500.00",
"currency": "USD"
},
"open_invoice_amount": {
"quantity": "1500.00",
"currency": "USD"
},
"closed_invoice_amount": {
"quantity": "0.00",
"currency": "USD"
},
"timezone": "America/New_York",
"billing_period": {
"type": "MONTH",
"value": 1
},
"pricing_plan_subscription_ids": [
"sub_001"
],
"pricing_amount_type": "EXCLUDING_TAX",
"periods": [],
"closed_periods": [],
"tax_categories": [
{
"base_amount": {
"quantity": "1428.57",
"currency": "USD"
},
"tax_amount": {
"quantity": "71.43",
"currency": "USD"
},
"total_amount": {
"quantity": "1500.00",
"currency": "USD"
},
"category": "SALES_TAX",
"local_amounts": {
"base_amount": {
"quantity": "1428.57",
"currency": "USD"
},
"tax_amount": {
"quantity": "71.43",
"currency": "USD"
},
"total_amount": {
"quantity": "1500.00",
"currency": "USD"
},
"used_exchange_rate": {
"currency": "USD",
"base_currency": "USD",
"rate_timestamp": "2024-01-15T00:00:00Z",
"rate": "1.0",
"source": "Internal"
},
"display": true
},
"notes": [
"Tax applied as per state regulations"
],
"rates": [
{
"name": "Standard Rate",
"percentage": "5.00",
"tax_amount": {
"quantity": "71.43",
"currency": "USD"
}
}
],
"percentage": "5.00",
"name": "State Sales Tax"
}
],
"tax_summary": {
"base_amount": {
"quantity": "1428.57",
"currency": "USD"
},
"tax_amount": {
"quantity": "71.43",
"currency": "USD"
},
"total_amount": {
"quantity": "1500.00",
"currency": "USD"
},
"local_amounts": {
"base_amount": {
"quantity": "1428.57",
"currency": "USD"
},
"tax_amount": {
"quantity": "71.43",
"currency": "USD"
},
"total_amount": {
"quantity": "1500.00",
"currency": "USD"
},
"used_exchange_rate": {
"currency": "USD",
"base_currency": "USD",
"rate_timestamp": "2024-01-15T00:00:00Z",
"rate": "1.0",
"source": "Internal"
},
"display": true
},
"notes": [
"Summary of taxes for invoice"
],
"country_code": "US"
},
"dunning_actions": [
{
"payment_acceptor_id": "pa_001",
"external_reference": "dunning_001",
"status": "CANCEL_PENDING",
"failure_reason": "Customer requested cancellation",
"first_payment_id": "pay_001"
}
],
"payment_acceptor_ids": [
"pa_001"
],
"payment_actions": [],
"pay_invoice_link": {
"expiry_period": {
"type": "DAY",
"value": 7
},
"portal_url_id": "portal_123",
"url": "https://pay.acmecorp.com/invoice/inv_1234567890abcdef"
},
"notes": [
"Invoice cancelled due to customer request"
],
"linked_invoices": [],
"custom_fields": [],
"other_custom_fields": [],
"credit": {
"original_invoice_info": {
"id": "inv_0987654321fedcba",
"invoice_number": "INV-2023-0999"
},
"note": "Credit issued for cancelled invoice",
"original_invoice_id": "inv_0987654321fedcba"
},
"e_invoices": [],
"used_exchange_rates": [
{
"currency": "USD",
"base_currency": "USD",
"rate_timestamp": "2024-01-15T00:00:00Z",
"rate": "1.0",
"source": "Internal"
}
],
"processing_only_customers": [],
"meter_values": [],
"credit_types": [],
"display_invoice_sub_lines_per_processing_only_customer": false,
"forwarded_from_customers": [],
"validation_result": [
{
"status": "VALID",
"details": "Invoice data validated successfully"
}
],
"reprocess": {
"to_be_reprocessed_at": null,
"reprocess_status": "NONE",
"reprocess_id": null
},
"used_tax_registration": {
"id": "taxreg_001",
"description": "NY State Tax Registration",
"tax_id": "98-7654321",
"tax_ids": [
{
"id": "taxid_001",
"type": "EIN",
"tax_id_validation_result": {
"id": "val_001",
"validation_date": "2024-04-01T09:00:00Z",
"source": "IRS",
"valid": "VALID",
"message": "Tax ID validated successfully"
}
}
],
"registration_number": "REG-123456",
"registered_address": {
"line1": "123 Corporate Blvd",
"line2": "Floor 5",
"city": "New York",
"postal_code": "10001",
"state": "NY",
"country": "US"
}
},
"footnote": "Thank you for your business.",
"approval_status": "PENDING_REVIEW",
"updated_to_final_at": "2024-04-10T12:00:00Z",
"has_usage_based_pricing": false,
"coupons": [],
"promotion_codes": [],
"linked_integrations": [],
"billing_type": "DEFAULT",
"paid": false,
"auto_rescues": [],
"linked_invoices_ids": [],
"to_be_reprocessed": false,
"to_be_reprocessed_at": null
}

Actions move to CANCEL_PENDING and then CANCELLED. Cancelling dunning does not change the invoice’s payment_status; the invoice stays unpaid until a payment is recorded or it is marked paid.

Cancelling a subscription can also cancel its dunning actions as part of the cancellation. See Subscription lifecycle.

A pending auto rescue is also cancelled automatically when the invoice is settled another way. If a payment was refused for insufficient funds, Solvimon schedules an automatic rescue with the payment provider; if the platform then pays the invoice directly through POST /v1/invoices/{id}/pay, that pending rescue is cancelled rather than firing later and charging the customer a second time. A second auto rescue is not started for an invoice that already has one active.

A call to the payment provider can itself fail with a rate-limit response (429) during a burst of payments, separately from the payment being refused. Solvimon retries a 429 with exponential backoff and jitter instead of failing the payment action, so a rate limit does not raise an alert or mark the action ERROR.

Reminders and escalation with workflows

Solvimon has no fixed dunning ladder. You build the reminder and escalation sequence with workflows, which gives you control over timing, channel, and wording per billing entity or customer segment.

The two triggers that matter:

  • Failed payment. Fires when a payment attempt fails, so you can email the customer to update their payment method, notify an account owner, or open a task in your CRM.
  • Overdue invoice. Fires on invoices past their due date, on the schedule you set, which is how you build the reminder ladder (for example at 3, 14, and 30 days overdue).

See Common use cases for a worked overdue-reminder sequence.

Recurring collection with payment schedules

For instalment plans and recurring collection outside the invoice cycle, a payment schedule collects on its own cadence. A schedule has a type of ONE_OFF, RECURRING, or INSTALLMENTS, and a status of ACTIVE, PAUSED, CANCELLED, or DONE.

Two fields matter for collections:

  • payment_method_fallback names the method to try when the primary method fails, so a failed card can fall back to direct debit without manual intervention.
  • Dunning can be enabled or disabled per schedule, so an instalment plan can be exempted from the standard chase.

Pause a schedule with POST /v{version}/payment-schedules/{resourceIdOrReference}/pause while a dispute is open, and activate it again afterwards, rather than cancelling and rebuilding it.

Edge cases

  • Chargebacks are not failed payments. A CHARGED_BACK payment was collected and then reversed. It does not re-enter the retry chain; handle it as a dispute.
  • Partial payments leave the invoice PARTIALLY_PAID. Dunning continues against the remaining balance.
  • Overpayments leave the invoice OVERPAID rather than creating a credit automatically.
  • Manual bank transfers arrive outside the PSP, so mark the invoice paid to stop the chase. See Payment collections.