Integration
CoindPay provides a universal payment experience, enabling businesses to accept and complete payments across websites, mobile apps, e-commerce checkouts, SaaS platforms, and digital portals.
Environment
Testnet
App https://test.coindpay.xyz ( Integration & Debugging )
Core steps: register merchants, manage payments, bind settlement wallets, configure webhooks, and integrate the merchant order flow end-to-end > test.coindpay.xyz/account/payouts
Subscription-type Payments Links require contacting our team( @CoindPay or collaboration group )to whitelist static IPs and configure the necessary sandbox permissions.
Other payment types and business scenarios remain publicly available and open by default.
You can check your current IP at https://whatismyipaddress.com VPN may affect your outbound IP.
Prod
App https://coindpay.xyz ( Production Business & KYB Required )
Payments support USDT/USDC on EVM and SVM networks Settlement/Payout Assets Please confirm that your connected wallet matches the correct network in your account settings.
On/Off-ramps support 100+ assets across 30+ networks for large-volume buy and sell crypto transactions. When creating ramp orders, ensure that your selected asset type matches the corresponding wallet address.
Wallet configuration is fully flexible — developers can specify either an EVM or SVM address as the payout primary wallet > coindpay.xyz/account/payouts
1. Create Account
Before using CoindPay, you need to create an account. This account serves as a unified identity for both your developer role and merchant enterprise.
Visit the CoindPay website and choose one of the account creation methods:
Social Account
Supported social login providers (e.g. Google, X, etc.)
Wallet
EVM wallet (Ethereum-compatible chains)
SVM wallet (Solana)
Note: Even if you sign up using a social account, you will still be required to bind a payout wallet to complete and enable payments.

💡 Once your account is created, you will have a unified merchant identity to manage Payments Links, track orders, and manage team members.

2. Create Payments
A Payments Link is a convenient way to collect payments. You can generate a link and share it with customers or embed it into your applications.

Option 1: Few Products(No-code)
If you have a small number of products:
Create a Payments Link and provide the necessary form information at once.
Share the link with your customers or embed it in your website/app.
Designed for no-code integration, for creators or merchants avoiding custom development.
Option 2: Many Products(Dynamic)
If you have many products or need dynamic payment links:
Create a Payments Link
Dynamically append parameters to generate unlimited dynamic Payments Links.
Share or embed these links into your applications or product flows.

3. Multiple integrations
URL Parameters
You can extend the embedded checkout link by appending parameters to the URL. This is especially useful when you want to dynamically pass metadata such as product title, description, price, images or others.
merchant_transaction_id
string*
Required. Unique Id for the order transaction generated by the merchant. Can be generated with randomUUID() to ensure uniqueness. The rampId is returned in webhook order payloads. corresponds to rampId
merchant_transaction_id=550e8400-e29b-41d4-a716-446655440000
currency
string?
Effective only if included in the payment link’s supported currency list; otherwise defaults to the first configured currency.
currency=EUR
price
string?
Payment amount in the supported fiat or crypto currency format. Lmimits #Fiat currencies
price=29.99
signature
string?
HMAC-SHA256 hex signature generated with the merchant secret key; Required if a custom price is provided.
signature=b95df8938****9fgk56
title
string?
The product or payment title displayed on the checkout page.
title=Hello
desc
string?
A short description of the product or service.
desc=Text
images
array?
A list of image objects to display in the checkout interface.
images=[{"url":"https://cdn.example.com/item.jpg"}]
name
string?
Pre-filled consumer name (≤120 characters)
name=Elon Musk
email
string?
Pre-fill the customer's email in the checkout form.
email=user@example.com
payment_method
string?
optional. Fiat payments only. If not specified, all payment methods supported for the selected currency will be returned. If specified, the method will be automatically preselected at checkout.
Supported values include card, google, apple, cashapp, revolut_pay, paypal and others payment methods. Refer to Payment methods for the full and up-to-date list.
payment_method=cashapp
fix_payment_method
boolean?
Locks the selected payment_method and prevents changes during checkout. Recommended for channel-specific flows (e.g. iOS) to optimize conversion and payment success.
fix_payment_method=true
redirect_url
string?
Redirect URL to which the user is redirected after passing the payments or ramps scenes; We recommend using the default checkout exit flow rather than redirecting via redirect_url. redirect urls are subject to risk and compliance monitoring, and high-risk or non-compliant destinations may affect merchant account health.
redirect_url=https://coindpay.xyz/wallet
more
Please contact our Devs team for dynamic updates.
Checkout Tips
? The value is optional, * the value is required.
Non-authentic product or consumer information, such as title, email, and desc, is not required to be provided.
merchant_transaction_id
The
merchant_transaction_idis required.Orders may transition through multiple statuses, but all remain tied to the same
merchant_transaction_idSeparate or recurring orders generate distinct
merchant_transaction_idvalues.Use
randomUUID()or other encrypted Id libraries to generate a unique Id for each transaction to avoid duplicates.merchant_transaction_idserves as an alias forrampId. TherampIdis returned in webhook order payloads.If not provided, it will not cause an error, but you may lose the ability to reliably track the order or query its status via this Id.
email
Ensure the pre-submitted email matches the one used in subsequent order flows.
The email should be a user’s email address obtained in advance.
If the email is in a valid format, it will be automatically pre-filled in the checkout form.
If unsure, request the user to manually enter their email to prevent mismatches.
price
When the
pricerouting parameter is enabled, configure the product’s Amount Type as Fixed Amount.The Random Amount option is intended for tipping or donation scenarios and is not controlled by the
priceparameter.When
priceis not provided, the payment Link will use the amount configured in the merchant dashboard.When
priceis provided in the URL, it is treated as dynamic input and must be protected by a signature.Any modification to the
pricevalue without a valid signature will result in the Payment Link being marked as invalid.
signature
The
signatureparameter is conditionally required.f
priceis present, a validsignaturemust be generated and included.If
priceis absent,signatureis optional.The signature cryptographically binds the request parameters to the merchant and prevents client-side tampering.
currency
The
currencyrouting parameter is optional.Please ensure the provided
currencyis supported in the payment link currency configuration, passing an unconfigured currency will be ignored.
The product link resolves to either the first configured currency or the developer-provided
currencyparameter (must match one of the enabled currencies).Client-side currency switching is disabled; only the resolved currency is used.
The product link resolves to either the first configured currency or the developer-provided
currencyparameter (must exist in the enabled list).End users may freely switch between all enabled currencies.
Amounts remain anchored to USD, with conversions applied automatically using real-time FX rates.
USD-pegged
Default: USD-pegged is disabled. the amount remains uniform and can be controlled via the
priceparameter.When USD-pegged is enabled:
All selected fiat currencies are automatically pegged to USD.
Settlement amounts are calculated in real time based on current FX rates.
Code for Checkout


https://coindpay.xyz/pay/link/vVKAsfomepqD0fstx9bdE?name=Jason&email=consumer@coindpay.xyz
Note: the actual checkout URL must include the merchant_transaction_id parameter.

Example: Quick payment methods limited to iOS channels
https://coindpay.xyz/pay/link/vVKAsfomepqD0fstx9bdE?payment_method=apple&fix_payment_method=true

① Web
1. Embed via iFrame
Native HTML styles can be customized as needed.
You can freely customize the surrounding HTML, container styles, and transitions using TailwindCSS or your preferred styling approach.
2. Redirect to Payment Page
Customize your content area (Button, image, etc.) style, redirect or open new tab.
② Mobile App
WebView Embed
White-label Checkout
Personalized parameters such as payment_method, fixed_payment_method can be used to initialize the frontend checkout experience and directly launch the CoindPay checkout interface, making it well-suited for developer merchants seeking a more native and streamlined checkout experience.
For example, merchants can use these parameters to enable or restrict the checkout experience to specific payment methods, such as Apple Pay or Cash App Pay, based on their integration requirements.


Embedded mode
Whether to enable Embedded mode depends on the merchant developer’s integration approach.
Suitable for iframe embedding(Enabling embedded mode will hide basic payment link details, including merchant and product information, to provide a cleaner and more seamless embedded checkout experience)


Theme & Brand
Customize the checkout theme color, brand logo, and other branding elements.

4. Account & Webhooks
Go to More → Account/Payouts or Integration/Webhooks to view and manage your developer information, webhook endpoints, and related configurations.
Wallet payouts

Webhooks callback
Once your Webhooks are configured under Developer Settings → Webhooks URLs, CoindPay will automatically send webhook notifications to your specified endpoint whenever a payment event occurs (e.g., completed, failed, or pending).
Your server should handle these events, verify the request signature using your API Secret and update your own order database accordingly.

Local Debugging Mode

Below is a webhook API example based on Node (Next.js)
Some code referencesIntegration
Webhooks Data Example(Selected statuses)Full Order Fields
Order status
Payments/On-Ramps Status Reference
Below is a list of possible
rampStatusvalues returnedwhen rampType=
buypaymentMethod=Payment methods
init
The customer has opened the payment window, but has not yet entered the payment flow. The order has not started processing.
new
The order has been created and is ready for payment.
Starting from new, merchants with configured webhooks will receive order status notifications.
pending
The order is waiting for a required customer or payment-provider action, such as 3DS authentication or additional verification.
paid
The payment has been authorized and the funds have been received into the payment processing flow. Final settlement and conversion may still be subject to payment-provider, banking, compliance, and eligibility checks.
confirming
The payment has entered the execution and confirmation stage. The transaction may be undergoing payment confirmation, asset conversion, cross-chain routing, or delivery to the configured settlement destination.
order_scheduled
The order has been accepted and placed into the processing queue. This status indicates that processing has been scheduled; it does not indicate that funds have been reserved or settled.
order_retry
The order was declined or cancelled due to legal, compliance, or banking constraints. The consumer attempts the payment again through an alternative recommended banking provider.
expired
The order was created but the customer did not complete the required payment within the applicable payment window. Expiry times may vary by payment method. An expired order may become active again if a valid payment is subsequently received.
cancelled
The order has been cancelled and will not continue through the normal processing flow. Cancellation may result from customer action, timeout, or an explicit cancellation by CoindPay or an upstream provider.
refunded
The payment has been refunded. The refund was initiated in response to a customer request or as part of the applicable payment or settlement process.
failed
The transaction could not be completed due to a non-recoverable rejection or failure, such as a bank decline, provider rejection, compliance restriction, or other terminal processing error.
settling
The payment has been authorized and the settlement process is in progress. The corresponding payout or on-chain settlement transaction has not yet reached its final state.
settle_failed
Settlement attempt failed due to a transient or recoverable error. The order is eligible for retry(caused by RPC, network, or temporary infrastructure issues, retry may be triggered)
completed
✅ The order has completed successfully and the merchant has received the expected settlement. This is the final successful status and should be treated as the definitive indication that the order has completed.
Status Notes
Merchants can use
completedas the only status that triggers fulfillment of goods or services.A
failedstatus is reversible while the checkout remains open. The customer can enterorder_retryand then start a new payment flow fromnew
Off-Ramp Status Reference
Below is a list of possible
rampStatusvalues returnedwhen rampType=
sellpaymentMethod=card
init
User opened the payment window but hasn’t entered the payment stage and the order has not yet entered the processing flow.
new
A new transaction has been created.
Starting from the new status, merchants with configured webhooks will receive event notifications.
pending
The transaction is in progress; payout processing has started.
failed
The transaction failed; the crypto amount will be returned to the user.
completed
✅ The payout has been successfully transferred to the user’s card.
💡 Tips:
Keeping your secret key safe, don't forget add the
.envfile to.gitignoreThe rampId is required, from your front-end
merchant_transaction_idAn order is successful only when its status is
completed
Testnet config
Testnet Provider A

Select the test card and verify the payment method at the checkout.
Order Fallback Testnet Provider B - card list
Payout Asset:from your payment link configuration.
🆔 KYC Data
A first time customer will be guided through a KYC process during their first order with us. We suggested you input words and names that exist as opposed to random strings, as there are still some basic validations in place.
You may also be asked to upload Id documents. This can be any image with some text, captured using your device. This will not be verified, however will need to be in high resolution.

Card #1
Card Name
Use the name that you provided as part of KYC
Card Number
4111 1111 1111 1111
Expiry
Any expiry date in the future
Security Code
Any
Demo video(Payments)
Last updated
