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

# Fixed payment requests

When a [payment request](/payment-requests) is created in *fixed mode*, the payment currency and network are provided via the API. The customer skips currency selection on the CryptoProcessing payment page, while the exchange rate is locked and the payment timer starts immediately upon creation. The API immediately returns the fixed payment details, which can be used to redirect the customer directly to the payment page or within your own payment experience.

<Warning>
  This is an advanced integration guide. This guide is intended for merchants who already provide currency selection within their own checkout.

  **For most merchants, we recommend following the standard [integration guide](/payment-requests/integration-guide)**, where customers select the payment currency and network on the CryptoProcessing payment page. This requires less implementation effort and automatically supports newly added currencies and networks.
</Warning>

<Steps>
  <Step title="Complete your onboarding">
    Configure your account and get an API key, see [Initial setup](/initial-setup).
  </Step>

  <Step title="Pre-select the payment method">
    When the customer wants to make a new purchase, show them a screen for selecting the cryptocurrency and the network.

    The list of currencies and networks accepted by CryptoProcessing depends on the target currency that you want to receive on your balance. We recommend getting the list of currencies from [/v2/currencies/rates](/api-reference/endpoints/currencies-rates). Specify the target currency in `currency_to`, then iterate through the results with the `"crypto"` type.
  </Step>

  <Step title="Create a payment request">
    Once the customer selected the cryptocurrency, send a request to [/payments/v1/requests](/api-reference/endpoints/payments). Specify the [currency](/api-reference/endpoints/payments#body-currency) and [amount](/api-reference/endpoints/payments#body-amount) you want to receive on your balance, as well as the [payment\_currency](/api-reference/endpoints/payments#body-payment-currency) according to the customer's choice on the previous step.

    Set [rate\_mode](/api-reference/endpoints/payments#body-rate-mode) to `"fixed"` to skip the currency selection step on the CryptoProcessing side.

    Note that the effective [lifespan](/payment-requests#lifespan) in the fixed rate mode will be no longer than 1 hour, as the payment timer will start immediately.

    ```json title="Request example" theme={null}
    {
      "amount": "100",
      "currency": {
        "iso": "EUR"
      },
      "payment_currency": {
        "iso": "USDC",
        "network_name": "ethereum"
      },
      "rate_mode": "fixed",
      "life_time_duration": 3600,
      "end_user_email": "customer@example.com",
      "description": "Order 0511",
      "sender_type": "legal",
      "sender_data": {
        "legal_name": "Example GmbH",
        "country_of_registration": "DEU"
      }
    }
    ```

    ```json title="Response example" theme={null}
    {
      "data": {
        "id": "019d511c-9fd2-7e71-b534-74e8abd855f1",
        "amount": "100",
        "currency": {
          "iso": "EUR"
        },
        "status": "processing",
        "life_time": 1785842432,
        "end_user_email": "customer@example.com",
        "description": "Order 0511",
        "payment_link": "https://payments.cryptoprocessing.com/payment/lLXLZ6Q8lCwFFRbyW0C1ET",
        "payment_currency": {
          "iso": "USDC",
          "network_name": "ethereum"
        },
        "user_fee_percent": 0,
        "rate_mode": "fixed",
        "valid_until": 1785842432,
        "payment_details": {
          "address": {
            "value": "0x9F2E4b7A1C3D5F6E8B0A2C4D6E8F1A3B5C7D9E0F"
          },
          "expected_amount": "115.69",
          "expected_currency": {
            "iso": "USDC",
            "network_name": "ethereum"
          },
          "exchange_rate": {
            "from": {
              "iso": "USDC",
              "network_name": "ethereum"
            },
            "to": {
              "iso": "EUR"
            },
            "rate": "0.86"
          }
        }
      }
    }
    ```
  </Step>

  <Step title="Let the customer navigate to the payment request interface">
    The URL of the interface is provided in the [data.payment\_link](/api-reference/endpoints/payments#response-data-payment-link) field of the API response. Depending on your payment flow, you can:

    * navigate the customer to the payment request link in a new tab,
    * generate a QR code based on the payment request link and display it to your customer,
    * embed the payment link as an iFrame for quick on-page checkout.

    For the customer's convenience, we recommend providing a link to the pending payment request somewhere on your site, too. This way, if the customer accidentally closes the payment request tab before finishing the payment, they will use the link to continue the process.
  </Step>

  <Step title="Process the callback">
    When you get the [payment\_request](/api-reference/callbacks/payment-request-callbacks) callback, update the purchase status on your site.

    Make sure to cover all possible statuses of the callback. For a failed payment request, consider showing a 'Retry' button that initiates a purchase of the same product again.
  </Step>
</Steps>
