What Are Payins and Why They Matter
Payins enable your application to seamlessly accept fiat payments from your customers’ bank accounts, which will be converted to cryptocurrency. Whether you’re a developer or a business owner, this guide will help you integrate DollarPe’s Payin system.Prerequisites:
- Ensure you have completed the authentication setup
- Configure your webhook endpoint for real-time updates
- Review the following guides to ensure compatibility:
- supported geographies
- supported stablecoins and blockchains
- supported fiat methods
- Verify your users have completed KYC and have at least one verified bank account
Integration at a Glance
The Payin integration flow for centralized exchanges involves the following key steps:- Fetch Configurations - Retrieve the basic configuration to understand supported assets, networks, and limits.
- Validate user requirements – Ensure the customer has completed KYC verification and has at least one verified bank account added
- Fetch payin limits – Retrieve payin limits to check daily limits, available limits, and whether Enhanced Due Diligence (EDD) is required.
- Fetch exchange rates – Retrieve the latest cryptocurrency exchange rates
- Create a quotation – Generate a quote for the desired payin amount
- Send fiat payment – Transfer the fiat amount to the provided bank details
- Initiate the payin – Start the payin using the UTR from the fiat payment
- Link exchange transfer ID – Link the exchange transfer ID with the payin.
- Monitor transaction status – Track the progress of the transaction
- Handle completion – Finalize the payin once the transaction is confirmed
Visual Integration Flow
Process Flow Diagram
Sequence Diagram: Detailed Process Flow
Step-by-Step Integration Guide
Step 1: Fetch Configurations
Before starting the integration, fetch the basic configuration to understand supported assets, networks, and limits:- API Request
- Response
supported_fiats: List of supported fiat currenciessupported_assets: List of supported cryptocurrenciessupported_networks: List of supported blockchain networkscoin_limits: Minimum and maximum limits for each supported cryptocurrency
Step 2: Check Customer KYC and Bank Account status
Before initiating any payin, ensure the customer is KYC-verified and has a verified bank account.- Fetch Customer Info
- Fetch Bank Account Info
Step 3: Check Payin Limit
Before creating a quotation, check the customer’s available payin limit to ensure they are eligible to create a new order.- API Request
- Response
daily_limit: Maximum daily payin limit for the assetavailable_limit: Remaining available payin limit for the current daylimit_reset_timestamp: Unix timestamp when the daily limit will resetis_edd_required: Whether Enhanced Due Diligence (EDD) is required (true or false)is_limit_increase_available: Whether the customer can apply for a higher daily limit
- If
is_limit_increase_availableis sufficient for the intended transaction andis_edd_requiredis false, proceed to the next step. - If
is_edd_requiredis true and the limit is not available, direct the user to complete EDD as part of the KYC process before proceeding. After EDD, recheck the limit. - If
is_edd_requiredis false and the limit is not available (i.e., user has already completed EDD and limit is still exhausted), do not allow the user to create a new payin order and show an appropriate error message. No further action is possible until the limit resets.
Step 4: Fetch Exchange Rate
Get the real-time exchange rate for a given crypto asset.- API Request
- Response
asset: Cryptocurrency to be received (e.g., “USDT”, “USDC”)fiat: Fiat currency to send (e.g., “INR” for Indian Rupee)rate: Current exchange rate (amount of fiat per 1 unit of crypto)
Step 5: Create a Quotation
After getting the current rate, create a quotation to lock in the rate.- API Request
- Response
asset: Cryptocurrency to be receivedfiat: Fiat currency to send (e.g., “INR” for Indian Rupee)receiving_amount: Amount in cryptocurrency to receivecustomer_id: ID of the KYC-verified customerbank_id: ID of the verified bank accountbank_details: Bank account details for sending the fiat paymentexpiry_time: Time until the quotation expires
You must complete your transaction before this time expires.
Step 6: Send Fiat Payment
Once you have the quotation and bank details, instruct the customer to send the fiat payment:- Use the provided bank account details to make the payment
- Ensure the exact amount is sent as specified in the quotation
- Keep the UTR (Unique Transaction Reference) from the bank
- Complete the payment before the quotation expires
Step 7: Initiate the Payin
After the fiat payment is completed, create a payin request with the UTR:- API Request
- Response
quotation_id: ID received from Step 3customer_id: ID of the KYC-verified customerclient_reference_id: Your internal reference ID for tracking (optional)bank_id: ID of the verified bank accountutr: Unique Transaction Reference from the bank paymentstatus: Current status of the payin
Step 8: Monitor Transaction Status
After initiating the payin, you need to track the payin status. There are two ways to monitor this status:Option A: Webhook Integration (Recommended)
Webhooks provide real-time updates about payin status changes. Configure your webhook endpoint to receive these notifications:Option B: Status Polling
If webhooks aren’t feasible, you can periodically check the status using the payin endpoint:- API Request
- Response
PROCESSING: Initial state, waiting for payment verificationSUCCESS: Payin has been successfully completedFAILED: Payin has failed and failure_reason is updated
Step 9: Handle Transaction Completion
Successful Transactions
When a payin is completed successfully:- Update your internal records with the transaction details
- Credit the cryptocurrency to your user’s account
- Notify your user that the funds have been received
- Store the transaction details for future reference and customer support
Step 10: Link Exchange Order ID with Exchange Transfer ID
Upon successful payin, ensure the exchange transfer ID (associated with the sent cryptocurrency) is linked to the corresponding exchange order ID.- API Request
- Response
Testing Your Integration
Sandbox Environment
Before going live, test your integration thoroughly in our sandbox environment:- Use the base URL:
https://sandbox-api.dollarpe.xyz - Follow the same steps as production
- Test both successful and failed transaction scenarios
Getting Help
If you encounter any issues with your payin integration:- Check our API documentation for detailed endpoint information
- Visit the Troubleshooting Guide for common solutions
- Contact our support team with your customer_id and transaction logs
Our support team is available 24/7 to help with integration issues. For urgent
matters, use the in-app chat or call our technical support hotline.

