Skip to main content

Documentation

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.

stablecoin-payment-flow-1.png
  1. The customer selects the crypto option on your payment page.

  2. Your back end requests Rapyd to create a payment specifying the amount, currency, and the payment method type (e.g. at_crypto_ewallet).

  3. Rapyd responds with a unique redirect_url. Your website must direct the customer to this URL to complete the payment.

stablecoin-payment-flow-2.png
  1. 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).

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

  3. The hosted page waits for the transaction to be confirmed on the blockchain.

stablecoin-payment-flow-3.png
  1. Once the transaction is detected, the hosted page (redirect URL) automatically redirects the customer back to the “payment successful” page.

  2. Rapyd confirms the funds have been received and updates the payment status to Closed and sends notification.

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