- One-step: use the Merchant Initiate Transaction (MIT) endpoint
POST /v1/sessions/pay. Best for automated invoicing or recurring billing. - Two-step: create a session via
POST /v1/sessionsorPOST /v1/sessions-profile, then callPOST /v1/sessions/{session_id}/payto complete it. Useful when you want to set up the session first and pay it later, or when integrating with existing session creation flows.
Billing Address Requirements
Both flows require a billing address with the same fields as customer checkout. The location differs: in one-step it’s insession.order.billing_address, in two-step it’s in the pay request body.
One-Step: Create and Pay
A single call creates the session and registers the invoice: Identity verification is automatically skipped. The billing address is provided insession.order.billing_address (see required fields). The transaction is AUTHORIZED on creation and moves to CAPTURED once Kravia confirms the shopper has paid.
B2B Example
B2C Example
For B2C invoices, omitbusiness_name and organization_number:
One-Step Payment Fields
| Field | Type | Required | Description |
|---|---|---|---|
payment_product_type | String | Yes | "kravia.invoice_b2b", "kravia.invoice_b2b_grouped", or "kravia.invoice_b2c" |
operation | String | Yes | Must be "invoice_payment" |
days_until_due | Integer | Yes | Days until invoice is due (0-365) |
invoice_channel | String | No | "kravia" (default) or "merchant". See Invoice Delivery. |
Two-Step: Create Session, Then Pay
Create a session first, then programmatically call the pay endpoint. We recommend settingrequire_identity_verification: false on the payment type configuration to skip identity verification.
Step 1: Create the Session
For B2BStep 2: Pay the Session
Call the pay endpoint with thepayment_product_type and billing_address. Note that the billing address is provided in the pay request body, not in the session order:
B2B:
Two-Step Pay Fields
| Field | Type | Required | Description |
|---|---|---|---|
payment_product_type | String | Yes | "kravia.invoice_b2b", "kravia.invoice_b2b_grouped", or "kravia.invoice_b2c" |
billing_address | Object | Yes | Customer billing details, see billing address requirements |
Response
Both approaches return a transaction with statusAUTHORIZED. An INITIATE_CAPTURE event is added automatically as Kravia begins delivery. The transaction moves to CAPTURED (or PARTIALLY_CAPTURED) once Kravia confirms the shopper has paid.
Cancellations
Refund is not supported for Kravia. To cancel an invoice, callPOST /v1/transactions/{id}/void. Void is allowed on AUTHORIZED (cancels the invoice) and on PARTIALLY_CAPTURED (cancels the remaining amount). See Cancellations in Customer checkout for the full rules per state.
Duplicate Prevention
Use theDintero-Feature-Toggles header to prevent duplicate invoices:
| Toggle | Behavior |
|---|---|
strict-merchant-reference | Returns 400 if merchant_reference already exists in any session |
strict-success-merchant-reference | Returns 400 if merchant_reference exists in a successfully authorized session. Allows retries after failures. |
See Also
- Customer Checkout: customer selects invoice at checkout
- Grouped Invoices: consolidate multiple purchases into a single invoice
- Invoice Delivery: control who delivers the invoice