> ## 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.

# Payment requests

export const Expired = () => <Badge stroke shape="rounded" color="gray">Expired</Badge>;

With payment requests, you can let your customers make one-time payments in the cryptocurrency of their choice.

* **Your customer** sees a convenient webpage that guides them through the payment process.
* **You** receive funds in the currency you requested, regardless of the customer's payment currency.
* **CryptoProcessing** takes care of conversion and issues automatic refunds for underpayments and overpayments.

<Frame>
  <img src="https://mintcdn.com/cryptoprocessing/8M1S0YTgf5ZVwFma/images/payment-requests/payment-request-1.png?fit=max&auto=format&n=8M1S0YTgf5ZVwFma&q=85&s=671492a3a9ada37a595a754cfcf30657" alt="Payment request step 1" style={{ width:"33%" }} className="block dark:hidden" width="1080" height="1600" data-path="images/payment-requests/payment-request-1.png" />

  <img src="https://mintcdn.com/cryptoprocessing/8M1S0YTgf5ZVwFma/images/payment-requests/payment-request-1.dark.png?fit=max&auto=format&n=8M1S0YTgf5ZVwFma&q=85&s=9bc298017d094883c408e7d7ad2ffd06" alt="Payment request step 1" style={{ width:"33%" }} className="hidden dark:block" width="1080" height="1600" data-path="images/payment-requests/payment-request-1.dark.png" />

  <img src="https://mintcdn.com/cryptoprocessing/8M1S0YTgf5ZVwFma/images/payment-requests/payment-request-2.png?fit=max&auto=format&n=8M1S0YTgf5ZVwFma&q=85&s=c696d8e88eaff82eae55df463455fa10" alt="Payment request step 2" style={{ width:"33%" }} className="block dark:hidden" width="1080" height="1600" data-path="images/payment-requests/payment-request-2.png" />

  <img src="https://mintcdn.com/cryptoprocessing/8M1S0YTgf5ZVwFma/images/payment-requests/payment-request-2.dark.png?fit=max&auto=format&n=8M1S0YTgf5ZVwFma&q=85&s=8ccc7dfc4bdfa878a3f5884b68d03dc6" alt="Payment request step 2" style={{ width:"33%" }} className="hidden dark:block" width="1080" height="1600" data-path="images/payment-requests/payment-request-2.dark.png" />

  <img src="https://mintcdn.com/cryptoprocessing/8M1S0YTgf5ZVwFma/images/payment-requests/payment-request-3.png?fit=max&auto=format&n=8M1S0YTgf5ZVwFma&q=85&s=ab85369c41d9af428cb992759a983816" alt="Payment request step 3" style={{ width:"33%" }} className="block dark:hidden" width="1080" height="1600" data-path="images/payment-requests/payment-request-3.png" />

  <img src="https://mintcdn.com/cryptoprocessing/8M1S0YTgf5ZVwFma/images/payment-requests/payment-request-3.dark.png?fit=max&auto=format&n=8M1S0YTgf5ZVwFma&q=85&s=8f165960d3db5163d8a5200b9587d2b5" alt="Payment request step 3" style={{ width:"33%" }} className="hidden dark:block" width="1080" height="1600" data-path="images/payment-requests/payment-request-3.dark.png" />
</Frame>

When creating a payment request, you control its behavior by choosing the [currency](#currency-selection) and the [lifespan](#lifespan-and-rate-lock).

The funds received via a payment request may be sent back via a [refund](/payment-requests/refunds), initiated either automatically or manually by you.

## Currency selection

When creating a payment request, you specify the **expected currency** — the fiat or cryptocurrency you want to receive. The **payment currency** is chosen at checkout by your customer from the allowed currencies (you can [customize the selection](/payment-requests/currencies)), or it can be set explicitly via the `payment_currency` parameter in the [API request](/api-reference/endpoints/payments).

If the customer pays in a currency that's different from the expected currency, CryptoProcessing converts the funds automatically, so you still receive the exact amount and currency you requested. The [conversion rate is locked](#lifespan-and-rate-lock) for up to 1 hour while awaiting a transaction for the customer.

The total amount to pay never changes after the rate lock. It may include the processing fee for the selected currency if you [pass the processing fee to the customer](/payment-requests/fees#passing-the-processing-fee-to-your-customer).

[Refunds](/payment-requests/refunds) are issued in the same currency the customer used to pay the request.

<Frame>
  <img src="https://mintcdn.com/cryptoprocessing/8M1S0YTgf5ZVwFma/images/payment-requests/payment-request-currency.png?fit=max&auto=format&n=8M1S0YTgf5ZVwFma&q=85&s=8a0bf0d666ec301490c1a960680d55f4" alt="Currency selection" style={{ width:"50%" }} className="block dark:hidden" width="1080" height="932" data-path="images/payment-requests/payment-request-currency.png" />

  <img src="https://mintcdn.com/cryptoprocessing/8M1S0YTgf5ZVwFma/images/payment-requests/payment-request-currency.dark.png?fit=max&auto=format&n=8M1S0YTgf5ZVwFma&q=85&s=4bf40bde6c88c3a172953de3eb9ce9fb" alt="Currency selection" style={{ width:"50%" }} className="hidden dark:block" width="1080" height="932" data-path="images/payment-requests/payment-request-currency.dark.png" />
</Frame>

## Lifespan and rate lock

There are two time constraints applicable to a payment request.

* The **lifespan** is set by you when you create a payment request. The customer's transaction must be both created and confirmed within this lifespan, or the payment request expires.

* The **rate lock** is applied if the customer chooses a payment currency that differs from the expected currency. CryptoProcessing locks the conversion rate for up to **1 hour** (or less, if the lifespan ends sooner). The customer's transaction must be both created and confirmed within the rate lock period, or the payment request expires.

When the payment request has less than 1 hour left before expiration, the customer sees a countdown timer on the webpage.

<Frame>
  <img src="https://mintcdn.com/cryptoprocessing/8M1S0YTgf5ZVwFma/images/payment-requests/payment-request-timer.png?fit=max&auto=format&n=8M1S0YTgf5ZVwFma&q=85&s=af6faf6fc855b4c0ea6e081c88b00ee1" alt="Countdown timer" style={{ width:"50%" }} className="block dark:hidden" width="1080" height="932" data-path="images/payment-requests/payment-request-timer.png" />

  <img src="https://mintcdn.com/cryptoprocessing/8M1S0YTgf5ZVwFma/images/payment-requests/payment-request-timer.dark.png?fit=max&auto=format&n=8M1S0YTgf5ZVwFma&q=85&s=3ac908bcfade226dc233dc57c1982d54" alt="Countdown timer" style={{ width:"50%" }} className="hidden dark:block" width="1080" height="932" data-path="images/payment-requests/payment-request-timer.dark.png" />
</Frame>

## Further reading

<Card horizontal icon="hammer" title="Integration guide for payment requests" href="/payment-requests/integration-guide">
  Learn how to integrate the payment requests flow into your site
</Card>

<Card horizontal icon="list-check" title="Test cases for payment requests" href="/payment-requests/test-cases">
  Walk through all scenarios to make sure your integration works correctly
</Card>

<Card horizontal icon="code" title="/payments/v1/requests" href="/api-reference/endpoints/payments">
  API endpoint
</Card>

<Card horizontal icon="tower-broadcast" title="payment_request" href="/api-reference/callbacks/payment-request-callbacks">
  API callback
</Card>


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