Decodes a QR code string and returns a decode response with the fields needed for getQuotation and executePayout.
Flow:
Authenticates the request and verifies customer_id exists under your account (registered via registerCustomer).
Derives routing hints from the QR, then parses and enriches the QR string through country-appropriate local payment providers.
Validates supported country/currency for the QR against your account configuration (INVALID_COUNTRY_CODE, INVALID_CURRENCY when not allowed).
Computes is_dynamic and is_business from provider QR metadata when available, otherwise from fallback rules on the decoded data.
Creates a PENDING transaction and returns tx_id.
Authentication:
REQUIRED: Basic Auth: Authorization: Basic base64(client_id:client_secret).
Body-based client_id / client_secret is deprecated and not supported.
Exchange app identity comes from authentication (do not rely on a body exchange_app_id).
Request body
qr_string (string, required)
customer_id (string, required)
be provided in request body,
not contain /,
exist under your account’s registered_customers, and
match the customer_id bound to the transaction.
partner_transaction_id (string, optional)
payment_currency (string, optional): ISO 4217. For Indonesia, required when currency cannot be resolved from the QR; otherwise 400 with payment_currency is required for Indonesia QR decode (or provide a QR that includes currency).
wallet_identifier (string, optional): stored on the transaction when provided.
Response (200 JSON) — curated public fields only (no internal _-prefixed blobs).
is_dynamic, is_business, amount, merchant, country, tx_id, currency, partner_transaction_id (empty string if not sent)
missing_fields (optional): machine-readable schemas for required data not yet satisfied
suggested_values (optional): hints keyed by field paths for UI prefill
sender / recipient (optional): grouped echoes when meaningful after decode
When amount > 0 and pricing succeeds: amount_usd, fee, percentage_fee, fixed_fee (USD values rounded to 2 decimal places in JSON). exchange_rate is not returned here (use getQuotation / executePayout for rate details).
Bank terminology: Prefer grouped recipient.bank_no; legacy flat keys are mapped internally.
Currency precision: Decimal amounts follow the currency table in this collection overview.
Payout flow: decodeQr → getQuotation (recommended when locking fees/amount) → executePayout.
Note: Stored qr_data may include provider-internal fields; they are not returned on this endpoint.