Cash Offramp Guide
Coinme Cash Off-Ramp Integration Guide
1. High-Level Flow
- Locate a Cash-Pickup Venue →
POST /locations/v2/query - Create a Transaction Quote →
POST /cryptoquote - Initiate the Sell Transaction →
POST /transaction - Receive Coinme Fulfilment Wallet (API request to partner endpoint)
- Send Crypto & Return Tx Hash → response from partner endpoint
- Receive Webhook Status Updates (COMPLETED)
- Fetch Cash-Pickup Code (
providerTransactionRef) →GET /transactionhistoryor/transactions/{partnerTransactionId}
POST https://caas-staging.coinme.com/services/locations/v2/query
Use this endpoint to find valid locations within a range of coordinates given
- Required output: either
locationReferenceorcoordinates(lat/long) for use in the next step. - Sample response fragment:
{
"id": "CVS9823",
"locationReference": "R1J...",
"coordinates": {
"latitude": 38.495133,
"longitude": -121.505336
}
}POST https://caas-staging.coinme.com/services/cryptoquote
Important: For ATM providers, cash sells can only be quoted in $20 USD increments. Since ATMs only dispense $20 bills, partners must ensure all quote amounts are multiples of $20 (e.g., $20, $40, $60, $80, $100, etc.).
- Pass
providerId(e.g., ALLPOINT for cash sells - optional if only cash sells enabled for partner) and exactly one of:locationReference(string) orgpsCoordinates(object with latitude, longitude).
- Full walkthrough: https://docs.coinme.com/v1.2/docs/getting-a-transaction-quote
POST https://caas-staging.coinme.com/services/transaction
Body must include quoteId from Step 3. The response returns a partnerTransactionId (Coinme's internal reference).
- Full walkthrough: https://docs.coinme.com/v1.2/docs/creating-a-sell-order
5. Fulfilment Wallet Callback (Partner Endpoint)
Immediately after Step 4, Coinme POSTs to the partner-hosted endpoint you registered in advance. Please reach out to the Coinme team to provide this.
Request
{
"partnerTransactionId": "xxx",
"targetWalletAddress": "34ohqFagYAdWKARd5m26R1ML6WZMbDniYh"
}Your Response
{
"data": {
"blockchainTransactionId": "<tx-hash>",
"refundWalletAddress": "<0xsd3l>"
}
}| Error | When to use |
|---|---|
| E01 | Invalid wallet address |
| E02 | Transaction does not exist |
| E03 | Blockchain transaction failed |
Why we need the hash: Coinme verifies on-chain that funds arrived before releasing the cash code.
Full guide → https://docs.coinme.com/v1.2/docs/creating-a-sell-order
Coinme pushes real-time status changes to the webhook URL you configured. Listen for:
COMPLETED– cash code is readyFAILED–errorData.messagefor details.
7. Retrieve the Cash-Pickup Code
providerTransactionRef in the transaction record is the cash code the customer uses in-store. Only fetch providerTransactionRef after receiving a COMPLETED webhook.
Choose either:
-
All transactions:
GEThttps://caas-staging.coinme.com/services/transactionhistory -
Specific transaction:
GEThttps://docs.coinme.com/v1.2/reference/get-specific-transaction
Parse the response:
{
"providerTransactionRef": "7891234560" // cash code
}To pickup cash, users will need to present at the ATM:
- The user's phone number used to sign up
- The cash code of the transaction (
providerTransactionReffrom transaction history endpoints)
Updated 10 days ago