Cash Offramp Guide

Coinme Cash Off-Ramp Integration Guide

1. High-Level Flow

  1. Locate a Cash-Pickup VenuePOST /locations/v2/query
  2. Create a Transaction QuotePOST /cryptoquote
  3. Initiate the Sell TransactionPOST /transaction
  4. Receive Coinme Fulfilment Wallet (API request to partner endpoint)
  5. Send Crypto & Return Tx Hash → response from partner endpoint
  6. Receive Webhook Status Updates (COMPLETED)
  7. Fetch Cash-Pickup Code (providerTransactionRef) → GET /transactionhistory or /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 locationReference or coordinates (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.).

POST https://caas-staging.coinme.com/services/transaction

Body must include quoteId from Step 3. The response returns a partnerTransactionId (Coinme's internal reference).

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>"
  }
}
ErrorWhen to use
E01Invalid wallet address
E02Transaction does not exist
E03Blockchain 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 ready
  • FAILEDerrorData.message for 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:

  1. All transactions:
    GET https://caas-staging.coinme.com/services/transactionhistory

  2. Specific transaction:
    GET https://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:

  1. The user's phone number used to sign up
  2. The cash code of the transaction (providerTransactionRef from transaction history endpoints)