QR data for the invoice
POST /Card/Handlers/{invoiceId}/sbp
Returns the QR data for the invoice. Idempotent by construction: the QR is built from the invoice’s existing checkout session, so a repeated call returns the same one — a new session would leave the payer with two QR codes, only one of which works.
The token is verified before the database is touched: until it matches, the existence of the invoice must not be revealed — otherwise identifiers can be enumerated from the responses.
⚠️ The request and response bodies are a sandbox contract (the platform
documents describe only the addresses and the meaning). The envelope follows
JSON v3. sandbox_confirm_url exists in the sandbox only: there is no real SBP
here, and without following that URL the widget never reaches paid.
Request parameters
| Field | Type | Required | Description |
|---|---|---|---|
invoiceId | string | yes | Invoice identifier |
{
"success": true,
"data": {
"reference": "0d0f3c58-9b1e-4a77-9a0c-000000000001",
"method": "sbp",
"screen": "qr",
"deeplink_url": "https://pay-sandbox.digitalspb.com/checkout/0d0f3c58-9b1e-4a77-9a0c-000000000003/sbp/confirm",
"qr_payload": "https://pay-sandbox.digitalspb.com/checkout/0d0f3c58-9b1e-4a77-9a0c-000000000003/sbp/confirm",
"price": {
"amount": "100.00",
"currency": "RUB",
"vat_included": true
},
"merchant_order_id": "ORDER-000000001",
"expires_at": "2026-09-21T12:00:00Z",
"poll_interval_seconds": 5,
"sandbox_confirm_url": "https://pay-sandbox.digitalspb.com/checkout/0d0f3c58-9b1e-4a77-9a0c-000000000003/sbp/confirm"
}
}Response codes
| Code | Description |
|---|---|
201 | QR data |
401 | The token did not match |
404 | The invoice was not found or has no payment session |