> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rampapay.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get a test QR to pay (sandbox only)

> **Scope:** `payouts:write`

Sandbox only — in production your end user scans a merchant's QR. A collection QR from the QR network's test environment, for the amount you pick: the only QRs the sandbox can pay. `qr` is exactly what `POST /payouts` takes; `png_base64` is the same QR as an image, to scan with your app. Read it, quote the same amount, then pay it. `expires_at` is when the QR stops being payable. 20 per hour per key.



## OpenAPI

````yaml api-reference/openapi.json POST /sandbox/qr-codes
openapi: 3.0.3
info:
  title: Rampa Pay API
  version: 1.0.0
  description: >-
    Hold a USDT balance at Rampa and pay Bolivian merchant QRs in bolivianos.
    Amounts are decimal strings.
servers:
  - url: https://examples.staging.rampapay.com/v1
    description: 'Example server: sample answers, nothing real moves'
security:
  - apiKey: []
tags:
  - name: Accounts
    description: Every balance you hold with Rampa, in one place.
  - name: Wallet
    description: Your USDT balance at Rampa, and how money gets into it.
  - name: Payouts
    description: >-
      Quote a BOB amount in USDT; once your end user accepts, pay it out at that
      quote from your USDT wallet — to a merchant QR today, to a bank account
      soon.
  - name: Webhooks
    description: Where we send events. Each endpoint gets its own signing secret.
paths:
  /sandbox/qr-codes:
    post:
      tags:
        - Payouts
      summary: Get a test QR to pay (sandbox only)
      description: >-
        **Scope:** `payouts:write`


        Sandbox only — in production your end user scans a merchant's QR. A
        collection QR from the QR network's test environment, for the amount you
        pick: the only QRs the sandbox can pay. `qr` is exactly what `POST
        /payouts` takes; `png_base64` is the same QR as an image, to scan with
        your app. Read it, quote the same amount, then pay it. `expires_at` is
        when the QR stops being payable. 20 per hour per key.
      operationId: sandbox-qr-code
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - amount
              properties:
                amount:
                  type: string
                  description: >-
                    `BOB decimal, ≤ 2 decimals`. Required. What the QR asks for.
                    At most the per-payment limit.
            example:
              amount: '100.00'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                type: object
                properties:
                  qr:
                    type: object
                    properties:
                      content:
                        type: string
                  amount:
                    type: string
                  currency:
                    type: string
                  reference_number:
                    type: string
                  png_base64:
                    type: string
                  expires_at:
                    type: string
              example:
                qr:
                  content: 000201010212…
                amount: '100.00'
                currency: BOB
                reference_number: '11198641'
                png_base64: iVBORw0KGgo…
                expires_at: '2026-09-27T15:02:00.000Z'
        '400':
          description: amount is missing, not positive, or has more than 2 decimals.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: Not in this environment (production never has it).
        '422':
          description: >-
            `AMOUNT_EXCEEDS_PROVIDER_LIMIT` — Above the per-payment cap. The
            body carries max_amount.
        '429':
          description: >-
            `TEST_QR_LIMIT_EXCEEDED` — More than 20 in an hour.
            retry_after_seconds says when.
        '503':
          description: >-
            `TEST_QR_UNAVAILABLE` — The test environment could not make one
            right now. Try again shortly.
components:
  responses:
    Unauthorized:
      description: >-
        `AUTHENTICATION_FAILED` — the key is missing, unknown, revoked or
        expired, or the tenant is suspended.
    Forbidden:
      description: '`SCOPE_REQUIRED` — your key lacks this endpoint''s scope. Ask Rampa.'
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        On the example server, any key that starts with `rpk_mock_`, e.g.
        `rpk_mock_yourname`. Never your real key.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.