Search Overlay

Pay with Crypto

Pay with Crypto allows you to accept cryptocurrency payments at checkout using a secure, fully managed payment flow. The service is powered by MoonPay, which handles customer verification, crypto processing, conversion, and settlement.

Consumers are redirected to a hosted payment page, where they select their preferred cryptocurrency and complete the transaction using their crypto wallet. Once the payment is completed, you receive real-time status updates and immediate notifications of the transaction outcome. 

Pay with Crypto at a glance

Payment type

Crypto payment

Consumer markets North America 
Consumer debit currency Supported cryptocurrencies and stablecoins
Processing currency Supported cryptocurrencies and stablecoins
Transaction types 
  • Payments: YES
  • Refunds: YES via the MoonPay platform. 
  • Partial refunds: NO
Reporting Transactions will be visible in the Paysafe Business Experience and in the MoonPay platform. 
Supported languages EN 

Prerequisites

  • Existing iGaming merchants interested in this product should contact their assigned Account Manager.

  • New merchants must first complete card processing onboarding via the Payments API before they can onboard to Pay with Crypto.

Integration options

We offer the following integration options for Pay with Crypto:

Payments API:  YES

Paysafe Checkout:  YES

Paysafe JS:  NO

Supported use cases

You can perform the following transaction type:

  • Use case 1: Pay with Crypto

Use case 1: Pay with Crypto

This use case enables a consumer to select Pay with Crypto at checkout and complete the payment via a MoonPay-hosted payment experience.

Implementation 

Call the following endpoints in sequence:

  1. /paymenthub/v1/paymenthandles
  2. /paymenthub/v1/payments

STEP 1: Call payment handle

  • Call the endpoint /paymenthub/v1/paymenthandles
    • transactionType: PAYMENT
    • paymentType:  PAY_BY_CRYPTO
    • amount 
    • currencyCode = USD 
    • merchantRefNum 
    • returnLinks (success, failure, cancel URLs) 
  • Paysafe creates a payment handle and returns our standard gateway response, indicating either a positive or negative outcome.
  • The payment handle status depends on the outcome of the request:
    • For positive scenarios, the payment handle is created with status INITIATED.
    • For negative scenarios, the payment handle is created with status FAILED.

STEP 2: Redirect consumer

  • Redirect the consumer to the URL provided in the payment handle response.
    • The payment handle status changes to PROCESSING.
  • The consumer completes the transaction on the MoonPay-hosted URL.
  • On the MoonPay hosted page, the consumer:
    • Selects a supported cryptocurrency. 
    • Connects or uses a supported crypto wallet. 
    • Authorizes and submits the blockchain transaction. 
  • MoonPay performs:
    • Blockchain transaction monitoring
    • Confirmation detection
    • Required KYC/AML screening (where applicable)
    • Crypto-to-fiat or crypto-to-stablecoin conversion (if configured)
    • Settlement directly to the merchant
  • Paysafe returns our standard gateway response, indicating either a positive or negative outcome. Paysafe is not involved in crypto processing, wallet interaction, or settlement.
  • The payment handle status depends on the outcome:
    • For positive scenarios, the status changes to PAYABLE.
    • For negative scenarios, the status changes to FAILED.
  • Once MoonPay determines the transaction outcome, the consumer is redirected to the merchant’s configured return URL.

Response scenarios

Happy Path

Scenario HTTP Status Action Payment Handle Status Next Step

Payment Handle created successfully, consumer completes crypto payment on MoonPay

201

Redirect consumer to payment_redirect

PAYABLE

Use paymentHandleToken to complete payment processing.

Negative Path

Scenario HTTP Status Error Code Action Payment Handle Status Notes

Invalid request (e.g. missing required parameters such as amount, currencyCode, or returnLinks)

400

INVALID_REQUEST

Correct request and retry

FAILED

Merchant notified via webhook

Consumer abandons payment on MoonPay-hosted page

200

N/A

N/A

EXPIRED

Merchant notified via webhook

Payment expired before completion

200

N/A

Payment cannot be completed

FAILED

Merchant notified via webhook

Notes

  • The HTTP 201 response indicates successful creation of the Payment Handle only, not payment completion.
  • Final transaction outcome is determined asynchronously via MoonPay processing and reflected through webhook updates.
  • Merchants should rely on webhook notifications rather than browser redirects to confirm final payment status.

STEP 3: Call payments

  • Call the endpoint /paymenthub/v1/payments using the paymentHandleToken.
  • Paysafe returns our standard gateway response, indicating either a positive or negative outcome:

The payment handle status depends on the outcome of the request:

  • For positive scenarios, the status changes to COMPLETED.
  • For negative scenarios, the status changes to FAILED.
  • For negative scenarios where the token expires after 15 minutes, the status changes to EXPIRED.

Response includes:

  • paymentId (store this on the merchant side for reconciliation and transaction tracking)

The refunds and returns process is handled directly by MoonPay on the MoonPay platform. 

Happy Path

Scenario HTTP Status Error Payment Status Next Step

Payment processed successfully

201

None

COMPLETED

Deliver goods/services once confirmation is received (recommended: via webhook).

Negative Path

Scenario HTTP Status Error Code Action Payment Status Notes

Invalid or expired paymentHandleToken

400 / 422

INVALID_HANDLE

Create a new Payment Handle and retry

FAILED

Merchant notified via webhook

Notes

  • The Payment Handle creation and redirect do not guarantee payment success; final outcome depends on completion of the MoonPay hosted flow.
  • Merchants should rely on webhook notifications for final confirmation before fulfilment.
  • paymentId should be stored for reporting and support queries. 

Webhooks

Payment Handle Payments Description

PROCESSING

 

The consumer has been redirected to the payment link.

PAYABLE

 

The consumer successfully completed the transaction on MoonPay URL.

COMPLETED

COMPLETED

You initiated the payments call and the transaction was successful.

COMPLETED

FAILED

You initiated the payments call and the transaction failed.

NOTE:  Regardless of the payments call response status, the payment handle status always changes to COMPLETED when a payments call is made.

FAILED

 

The payment handle was created, and the consumer was redirected to MoonPay. However, the consumer failed to authorize it.

EXPIRED

 

The payment handle has expired because it was not used in the payments call within 15 minutes (TTL).

Sample API requests and responses

Payment handle request

{ 
"merchantRefNum": "c5c7da73-2b9e-4f39-9288-bc1993c4f7b1",
"paymentType": "PAY_BY_CRYPTO",
"amount": 1,
"currencyCode": "USD",
"merchantAccountCurrency": "USDC",
"merchantAccountId": "698dba8e22300b0148fee1b1",
"merchantAccountScheme": "SOL",
"transactionType": "PAYMENT",
"returnLinks": [
{
"rel": "default",
"href": "https://www.paysafe.com/"
},
{
"rel": "on_failed",
"href": "https://developer.paysafe.com/en/support/"
},
{
"rel": "on_processing",
"href": "http://www.google.com"
}
]
}

Payment handle response

{ 
"id": "eeab04a9-07bd-49e3-b1e5-91ccfad6d52f",
"paymentType": "PAY_BY_CRYPTO",
"paymentHandleToken": "PHkzFThgM6OCiAMm",
"merchantRefNum": "c5c7da73-2b9e-4f39-9288-bc1993c4f7b1",
"currencyCode": "USD",
"txnTime": "2026-02-26T14:07:17Z",
"customerIp": "115.114.129.142",
"status": "INITIATED",
"links": [
{
"rel": "redirect_payment",
"href": "https://api.test.paysafe.com/alternatepayments/v1/redirect?accountId=1003067060&paymentHandleId=eeab04a9-07bd-49e3-b1e5-91ccfad6d52f&token=eyJhbGciOiJIUzI1NiJ9.eyJhY2QiOiIxMDAzMDY3MDYwIiwicHlkIjoiZWVhYjA0YTktMDdiZC00OWUzLWIxZTUtOTFjY2ZhZDZkNTJmIiwiZXhwIjoxNzcyMTE2NjM3fQ.oFwcrxRui-D_dj_dYhByaOmlkKhbYvLqd9L07pi-tBI"
}
],
"liveMode": false,
"usage": "SINGLE_USE",
"action": "REDIRECT",
"executionMode": "SYNCHRONOUS",
"amount": 1,
"timeToLiveSeconds": 899,
"gatewayResponse": {
"id": "f89482b0-f45c-401a-acd5-c59e46aa1457",
"processor": "MOONPAY",
"chargeToken": "f89482b0-f45c-401a-acd5-c59e46aa1457"
},
"returnLinks": [
{
"rel": "on_processing",
"href": "http://www.google.com"
},
{
"rel": "on_failed",
"href": "https://developer.paysafe.com/en/support/"
},
{
"rel": "default",
"href": "https://www.paysafe.com/"
}
],
"transactionType": "PAYMENT",
"gatewayReconciliationId": "6c885a24-4e85-4138-9855-b376ad97f7b4",
"updatedTime": "2026-02-26T14:07:17Z",
"statusTime": "2026-02-26T14:07:17Z",
"merchantAccountCurrency": "USDC",
"merchantAccountId": "698dba8e22300b0148fee1b1",
"merchantAccountScheme": "SOL"
}

Payment request

{ 
"amount": 1,
"merchantRefNum": "c5c7da73-2b9e-4f39-9288-bc1993c4f7b1",
"settleWithAuth": true,
"paymentType": "PAY_BY_CRYPTO",
"currencyCode": "USD",
"paymentHandleToken": "PHkzFThgM6OCiAMm"
}

Payment response

{ 
"id": "4c13e47b-92eb-4eeb-843e-13c5a154827e",
"paymentType": "PAY_BY_CRYPTO",
"paymentHandleToken": "PHkzFThgM6OCiAMm",
"merchantRefNum": "c5c7da73-2b9e-4f39-9288-bc1993c4f7b1",
"currencyCode": "USD",
"settleWithAuth": true,
"dupCheck": true,
"txnTime": "2026-02-26T14:07:17Z",
"customerIp": "115.114.129.142",
"status": "COMPLETED",
"gatewayReconciliationId": "6c885a24-4e85-4138-9855-b376ad97f7b4",
"amount": 1,
"consumerIp": "115.114.129.142",
"liveMode": false,
"updatedTime": "2026-02-26T14:12:18Z",
"statusTime": "2026-02-26T14:12:18Z",
"gatewayResponse": {
"symbol": "USDC",
"id": "f89482b0-f45c-401a-acd5-c59e46aa1457",
"processor": "MOONPAY",
"chargeToken": "f89482b0-f45c-401a-acd5-c59e46aa1457",
"network": "SOL",
"blockchainTransactionId": "4ssHg6mwZrdoefo4eh2ArQ4UH6RZYZ93roridyqi7uesyAnAJ3WsgHesqujow5eyRk2ok3SFQenx48u8grmYnwUY"
},
"availableToSettle": 0,
"settlements": {
"amount": 1,
"txnTime": "2026-02-26T14:07:17.000+00:00",
"availableToRefund": 1,
"merchantRefNum": "c5c7da73-2b9e-4f39-9288-bc1993c4f7b1",
"id": "4c13e47b-92eb-4eeb-843e-13c5a154827e",
"status": "COMPLETED"
}
}