Stablecoin Payments
Use Rapyd to collect payments using stablecoins. This option allows customers to pay via their crypto wallets while you receive funds in fiat currency into your Rapyd wallet.

The customer selects the crypto option on your payment page.
Your back end requests Rapyd to create a payment specifying the amount, currency, and the payment method type (e.g. at_crypto_ewallet).
Rapyd responds with a unique redirect_url. Your website must direct the customer to this URL to complete the payment.

On the hosted payment page (redirect page), the customer selects their stablecoin (e.g., USDC or USDT) and the preferred network (e.g., Ethereum or Polygon).
The customer is presented with a QR code or a blockchain wallet address. They use their own crypto wallet (like MetaMask or Trust Wallet) to scan the code or copy the address and send the funds.
The hosted page waits for the transaction to be confirmed on the blockchain.

Once the transaction is detected, the hosted page (redirect URL) automatically redirects the customer back to the “payment successful” page.
Rapyd confirms the funds have been received and updates the payment status to Closed and sends notification.
Rapyd sends a webhook to your back end, indicating the payment was completed.
To identify stablecoin PMTs, use List Payment Methods by Country with the following parameters:
Description of Query Parameters
Query Parameter | Description |
|---|---|
country | Enter AT as the country code. |
currency | Enter USD as the currency code. |
List Payment Methods by Country Request
Request
// Request URL: GET https://sandboxapi.rapyd.net/v1/payment_methods/country?currency=USD&country=AT // Message body absent
List Payment Methods by Country Response
List Payment Methods by Country describes the fields in the response.
Response
{ "status": { "error_code": "", "status": "SUCCESS", "message": "", "response_code": "", "operation_id": "f4cf29d5-4715-438f-93a8-64fa302ef3fa" }, "data": [ { "type": "at_crypto_ewallet", "name": "Crypto E-Wallet in Austria", "category": "ewallet", "image": "", "country": "AT", "payment_flow_type": "redirect_url", "currencies": [ "USD" ], "status": 1, "is_cancelable": false, "payment_options": [ { "name": "complete_payment_url", "type": "string", "is_required": true, "instructions": "URL to redirect user to upon successful payment", "is_updatable": false }, { "name": "error_payment_url", "type": "string", "is_required": true, "instructions": "URL to redirect user to upon failed payment", "is_updatable": false }, { "name": "customer", "type": "customer", "regex": "", "description": "Customer details. Requires specific fields within.", "is_required": true, "is_updatable": false, "required_fields": [ { "name": "name", "type": "string", "regex": "^[a-zA-Z ]{1,100}$", "description": "Customers full name", "is_required": true, "is_updatable": false }, { "name": "email", "type": "string", "regex": "^(?=.{1,512}$)[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+[.][a-zA-Z]{2,}$", "description": "Customer’s email", "is_required": true, "is_updatable": false } ] } ], "is_expirable": false, "is_online": true, "is_refundable": false, "minimum_expiration_seconds": 5, "maximum_expiration_seconds": 259200, "virtual_payment_method_type": null, "is_virtual": false, "multiple_overage_allowed": true, "amount_range_per_currency": [ { "currency": "USD", "maximum_amount": null, "minimum_amount": 5 } ], "is_tokenizable": false, "supported_digital_wallet_providers": [], "is_restricted": false, "supports_subscription": false, "supports_aft": false }, { "type": "at_amex_pos", "name": "AustriaAmex POS PMT", "category": "pos", "image": "", "country": "AT", "payment_flow_type": "", "currencies": [ "USD" ], "status": 1, "is_cancelable": true, "payment_options": [ { "name": "capture", "type": "boolean", "regex": "", "description": "Determines when the payment is processed for capture.", "is_required": false, "is_updatable": false }, { "name": "statement_descriptor", "type": "string", "regex": "", "description": "A text description suitable for a customer's payment statement. 5-22 characters.", "is_required": true, "is_updatable": false }, { "name": "ewallet", "type": "string", "regex": "^ewallet_[a-f0-9]{32}$", "description": "ID of the wallet that the money is paid into. String starting with ewallet_.", "is_required": true, "is_updatable": false }, { "name": "initiation_type", "type": "string", "regex": "(card_present|customer_present|installment|moto|recurring|unscheduled)", "description": "How the transaction was initiated.", "is_required": false, "is_updatable": false }, { "name": "device_id", "type": "string", "regex": "", "description": "Unique ID from POS provider.", "is_required": true, "is_updatable": false }, { "name": "payment_advice", "type": "object", "regex": "", "description": "Raw JSON from POS device.", "is_required": true, "is_updatable": false } ], "is_expirable": true, "is_online": false, "is_refundable": true, "minimum_expiration_seconds": 0, "maximum_expiration_seconds": 2592000, "virtual_payment_method_type": null, "is_virtual": false, "multiple_overage_allowed": false, "amount_range_per_currency": [ { "currency": "USD", "maximum_amount": null, "minimum_amount": null } ], "is_tokenizable": false, "supported_digital_wallet_providers": [], "is_restricted": false, "supports_subscription": false, "supports_aft": false }, { "type": "at_mastercard_card", "name": "Mastercard", "category": "card", "image": "https://iconslib.rapyd.net/checkout/at_mastercard_card.png", "country": "AT", "payment_flow_type": "", "currencies": [ "USD" ], "status": 1, "is_cancelable": true, "payment_options": [ { "name": "capture", "type": "boolean", "regex": "", "description": "Determines when the payment is processed for capture.", "is_required": false, "is_updatable": false }, { "name": "complete_payment_url", "type": "string", "regex": "", "description": "the complete_payment_url field must be filled in.", "is_required": true, "is_updatable": false }, { "name": "error_payment_url", "type": "string", "regex": "", "description": "the error_payment_url field must be filled in.", "is_required": true, "is_updatable": false }, { "name": "customer", "type": "string", "regex": "", "description": "ID of a customer object, a string starting with ‘cus_‘. The customer object must contain the fields listed as required, and can contain additional fields listed here.If the customer object does not exist yet, use ‘Create Customer‘", "is_required": true, "is_updatable": false }, { "name": "ewallet", "type": "string", "regex": "^ewallet_[a-f0-9]{32}$", "conditions": [ { "operator": "$eq", "description": "If the value of the field type is true, ewallet is mandatory field", "element_name": "payment.payment_method_options.aft", "threshold_value": "true" } ], "description": "ID of the wallet that the money is paid into. String starting with ewallet_.", "is_required": false, "is_updatable": false }, { "name": "initiation_type", "type": "string", "regex": "(customer_present|installment|moto|recurring|unscheduled)", "description": "This indicates how the transaction was initiated", "is_required": false, "is_updatable": false } ], "is_expirable": true, "is_online": false, "is_refundable": true, "minimum_expiration_seconds": 600, "maximum_expiration_seconds": 604800, "virtual_payment_method_type": null, "is_virtual": false, "multiple_overage_allowed": false, "amount_range_per_currency": [ { "currency": "USD", "maximum_amount": null, "minimum_amount": null } ], "is_tokenizable": false, "supported_digital_wallet_providers": [], "is_restricted": false, "supports_subscription": true, "supports_aft": true }, { "type": "at_visa_card", "name": "Visa", "category": "card", "image": "https://iconslib.rapyd.net/checkout/at_visa_card.png", "country": "AT", "payment_flow_type": "", "currencies": [ "USD" ], "status": 1, "is_cancelable": true, "payment_options": [ { "name": "capture", "type": "boolean", "regex": "", "description": "Determines when the payment is processed for capture.", "is_required": false, "is_updatable": false }, { "name": "complete_payment_url", "type": "string", "regex": "", "description": "the complete_payment_url field must be filled in.", "is_required": true, "is_updatable": false }, { "name": "error_payment_url", "type": "string", "regex": "", "description": "the error_payment_url field must be filled in.", "is_required": true, "is_updatable": false }, { "name": "customer", "type": "string", "regex": "", "description": "ID of a customer object, a string starting with ‘cus_‘. The customer object must contain the fields listed as required, and can contain additional fields listed here.If the customer object does not exist yet, use ‘Create Customer‘", "is_required": true, "is_updatable": false }, { "name": "ewallet", "type": "string", "regex": "^ewallet_[a-f0-9]{32}$", "conditions": [ { "operator": "$eq", "description": "If the value of the field type is true, ewallet is mandatory field", "element_name": "payment.payment_method_options.aft", "threshold_value": "true" } ], "description": "ID of the wallet that the money is paid into. String starting with ewallet_.", "is_required": false, "is_updatable": false }, { "name": "initiation_type", "type": "string", "regex": "(customer_present|installment|moto|recurring|unscheduled)", "description": "This indicates how the transaction was initiated", "is_required": false, "is_updatable": false } ], "is_expirable": true, "is_online": false, "is_refundable": true, "minimum_expiration_seconds": 600, "maximum_expiration_seconds": 604800, "virtual_payment_method_type": null, "is_virtual": false, "multiple_overage_allowed": false, "amount_range_per_currency": [ { "currency": "USD", "maximum_amount": null, "minimum_amount": null } ], "is_tokenizable": false, "supported_digital_wallet_providers": [], "is_restricted": false, "supports_subscription": true, "supports_aft": true } ] }
Identify the fields that your customer needs to complete for the payment method. To do that, use Get Payment Method Required Fields with the following parameter:
Description of Path Parameters
Path Parameter | Description |
|---|---|
type | Enter at_crypto_ewallet as the payment method type. |
Get Payment Method Required Fields Request
Request
// Request URL: GET https://sandboxapi.rapyd.net/v1/payment_methods/required_fields/at_crypto_ewallet // Message body absent
Get Payment Method Required Fields Response
Response
{ "status": { "error_code": "", "status": "SUCCESS", "message": "", "response_code": "", "operation_id": "b65cb7c6-d870-4e57-89ce-d7107d98d4c5" }, "data": { "type": "at_crypto_ewallet", "fields": [], "payment_method_options": [], "payment_options": [ { "name": "complete_payment_url", "type": "string", "is_required": true, "instructions": "URL to redirect user to upon successful payment", "is_updatable": false }, { "name": "error_payment_url", "type": "string", "is_required": true, "instructions": "URL to redirect user to upon failed payment", "is_updatable": false }, { "name": "customer", "type": "customer", "regex": "", "description": "Customer details. Requires specific fields within.", "is_required": true, "is_updatable": false, "required_fields": [ { "name": "name", "type": "string", "regex": "^[a-zA-Z ]{1,100}$", "description": "Customers full name", "is_required": true, "is_updatable": false }, { "name": "email", "type": "string", "regex": "^(?=.{1,512}$)[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+[.][a-zA-Z]{2,}$", "description": "Customer’s email", "is_required": true, "is_updatable": false } ] } ], "minimum_expiration_seconds": 5, "maximum_expiration_seconds": 259200 } }
When your customer checks out on your website, use Create Payment with the following parameters to get Rapyd to process your customer's payment:
Description of Body Parameters
Body Parameter | Description |
|---|---|
amount | Enter 100 as the payment amount. |
currency | Enter USD as the currency code. |
payment_method | Enter at_crypto_ewallet as the value. |
complete_payment_url | Replace the https://success_example.net example with your real website URL where you want to redirect the customer to when the payment succeeds. |
error_payment_url | Replace the https://error_example.net example with your real website URL where you want to redirect the customer to when the payment fails. |
Create Payment Request
Request
/ Request URL: POST https://sandboxapi.rapyd.net/v1/payments // Message body: { "amount": 100, "currency": "USD", "payment_method": "at_crypto_ewallet", "customer": "cus_4e25112ac20e144ad073a614dc46934b", "complete_payment_url": "https://complete.rapyd.net", "error_payment_url": "https://error.rapyd.net" }
Create Payment Response
Response
{ "status": { "error_code": "", "status": "SUCCESS", "message": "", "response_code": "", "operation_id": "4f052852-0950-4fa9-9f49-456f60dc0ab0" }, "data": { "id": "payment_724f85b89536bee8a605369e152cca30", "amount": 0, "original_amount": 100, "is_partial": false, "currency_code": "USD", "country_code": "AT", "status": "ACT", "description": "", "merchant_reference_id": "", "customer_token": "cus_4e25112ac20e144ad073a614dc46934b", "payment_method": "other_9df7ce3e637d161ba3ac5ad9649fe590", "payment_method_data": { "id": "other_9df7ce3e637d161ba3ac5ad9649fe590", "type": "at_crypto_ewallet", "category": "ewallet", "metadata": {}, "image": "", "webhook_url": "", "supporting_documentation": "", "next_action": "not_applicable", "bic_swift": "", "account_last4": "" }, "auth_code": null, "expiration": 1761735777, "captured": true, "refunded": false, "refunded_amount": 0, "receipt_email": "", "redirect_url": "", "complete_payment_url": "https://complete.rapyd.net", "error_payment_url": "https://error.rapyd.net", "receipt_number": "", "flow_type": "", "address": null, "statement_descriptor": "Doc Team", "transaction_id": "", "created_at": 1761476577, "metadata": {}, "failure_code": "", "failure_message": "", "paid": false, "paid_at": 0, "dispute": null, "refunds": null, "order": null, "outcome": null, "visual_codes": {}, "textual_codes": { "code": "paygw_3cd7b4416b8acbb696b3a31155ffa2d9" }, "instructions": [ { "name": "instructions", "steps": [ { "step1": "Redirect to PalWallet payment page.", "step2": "Scan the QR code or pay via your crypto wallet." } ] } ], "ewallet_id": "ewallet_c1943cfeda5f98247ab117e5d2648861", "ewallets": [ { "ewallet_id": "ewallet_c1943cfeda5f98247ab117e5d2648861", "amount": 100, "percent": 100, "refunded_amount": 0 } ], "payment_method_options": {}, "payment_method_type": "at_crypto_ewallet", "payment_method_type_category": "ewallet", "fx_rate": 1, "merchant_requested_currency": null, "merchant_requested_amount": null, "fixed_side": "", "payment_fees": null, "invoice": "", "escrow": null, "group_payment": "", "cancel_reason": null, "initiation_type": "customer_present", "mid": "", "next_action": "pending_confirmation", "error_code": "", "remitter_information": {}, "save_payment_method": false, "merchant_advice_code": null, "merchant_advice_message": null, "transaction_link_id": null } }
Simulating a Stablecoin Payment
The sandbox does not directly simulate the action of the customer completing the transaction with the local eWallet. You can simulate this action with the procedure described in Complete Payment.