curl --request POST \
--url https://examples.staging.rampapay.com/v1/payouts/qr/resolve \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"content": "000201010212…"
}
'const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({content: '000201010212…'})
};
fetch('https://examples.staging.rampapay.com/v1/payouts/qr/resolve', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://examples.staging.rampapay.com/v1/payouts/qr/resolve"
payload = { "content": "000201010212…" }
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)Read a QR before quoting
Scope: payouts:write
Send the QR your end user scanned and get who it pays and how much, to show before you quote. amount_mode closed: the QR fixes the amount — quote exactly target.amount. open: target is null — ask the end user for the amount and quote that. Then pay with POST /payouts and the same content. Nothing is paid, and it is optional: you can quote and pay without it.
The answer’s id (qrr_…) names this read. Send it as resolution_id on POST /fx/quotes: the quote and the payout made at it carry it, so you — and we — can follow one payment from the QR to its outcome. Quote it when you ask us about a QR that never became a payment.
merchant is everything the QR network answers about who is paid: name, the bank (bank_code, bank_name), account_number and the holder’s identification_number (CI or NIT). Show your end user what they need to recognise the merchant. reference_number is the network’s reference for this read — every scan gets a new one. expires_at is when the QR stops being payable: the network gives a date, so it is the end of that day in La Paz, in UTC. A field the network leaves blank is null.
curl --request POST \
--url https://examples.staging.rampapay.com/v1/payouts/qr/resolve \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"content": "000201010212…"
}
'const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({content: '000201010212…'})
};
fetch('https://examples.staging.rampapay.com/v1/payouts/qr/resolve', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://examples.staging.rampapay.com/v1/payouts/qr/resolve"
payload = { "content": "000201010212…" }
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)Authorizations
On the example server, any key that starts with rpk_mock_, e.g. rpk_mock_yourname. Never your real key.
Body
string, ≤ 500. Required. The raw content of the QR the end user scanned — what POST /payouts takes as qr.content.