How to Integrate the Widget

Coinme Partner Integration Documentation

TL;DR — Partner Integration Flow

  1. Fetch and aggregate configuration details to know supported assets, payment methods, limits, and regions.
  2. Get an informational quote to show users estimated rates/fees before launching the widget.
  3. Create a widget session via API to receive a hosted widgetUrl.
  4. Open the widget (redirect or WebView) and let Coinme collect payment/KYC safely.
  5. Handle webhooks for status updates and fetch transaction details for reconciliation.

0. Step 0 - Generate Bearer Token

Partners need to hit the /services/authorize endpoint to obtain a bearer token for authenticating subsequent API calls.

1. Step 1 — Fetch configuration

Endpoints:

  • GET /services/cryptoChains - Supported crypto assets - Docs
  • GET /services/locationlicensing - Supported jurisdictions - Docs
  • Transaction Limits and Payment Methods - Coinme Cash (Greendot cash-crypto buy) and ReadyCode ATM (Allpoint crypto-cash sells) - Transaction limits found here to be mapped

Purpose

Create a partner mapping across valid fiat currencies, payment methods, assets, transactional limits, and regional restrictions.

Sample JSON using all linked endpoints and docs to create holistic mapping (Partner creates mapping):

{
  "paymentMethods": [
    {
      "id": "CARD",
      "label": "Debit Card",
      "type": "card",
      "availability": ["USD"],
      "supportedCountry": ["US"],
      "onrampAvailable": true,
      "offrampAvailable": false
    },
    {
      "id": "GREENDOT",
      "label": "Greendot Cash Buy",
      "type": "cash",
      "availability": ["USD"],
      "supportedCountry": ["US"],
      "onrampAvailable": true,
      "offrampAvailable": false
    }
  ],
  "assets": [
    {
      "code": "BTC",
      "name": "Bitcoin",
      "decimals": 8,
      "supportedChains": ["BTC"]
    },
    {
      "code": "ETH",
      "name": "Ethereum",
      "decimals": 18,
      "supportedChains": ["ETH"]
    }
  ],
  "transactionalLimits": {
    "byPaymentMethod": [
      {
        "paymentMethodId": "CARD",
        "currency": "USD",
        "min": 5,
        "max": 15000
      },
      {
        "paymentMethodId": "GREENDOT",
        "currency": "USD",
        "min": 20,
        "max": 2000
      }
    ]
  },
  "regions": {
    "supportedCountries": ["US"],
    "stateRestrictions": {
      "US": {
        "blockedStates": []
      }
    }
  }
}

paymentMethod: Array showing all supported payment methods and jurisdictions where the payment method can be used

assets: Array showing all supported cryptocurrencies and their corresponding chains

transactionalLimits: The transaction limits of using a specific payment method

regions: Supported countries/states

2. Step 2 — Show an informational quote

Endpoint: POST /services/cryptoquote/informative

Purpose

Provide a non-binding estimate for a given amount, payment method, and asset. Useful for pre‑widget pricing and transparency.

Request Example:

curl --location 'https://caas-staging.coinme.com/services/cryptoquote/informative' \
  --header 'Authorization: Bearer <YOUR_TOKEN>' \
  --header 'User-Agent: YourAppName/1.0' \
  --header 'Content-Type: application/json' \
  --data '{
    "debitCurrencyCode": "USD",
    "creditCurrencyCode": "BTC",
    "amountValue": 200,
    "amountCurrencyCode": "USD"
  }'

Response:

{
    "data": {
        "creditCurrencyUnitPrice": "0.00000850",
        "creditCurrencyUnitPriceCode": "BTC/USD",
        "debitCurrencyUnitPrice": "117658.01",
        "debitCurrencyUnitPriceCode": "USD/BTC",
        "creditCurrencyAmount": "0.00170000",
        "creditCurrencyCode": "BTC",
        "debitCurrencyAmount": "203.80",
        "debitCurrencyCode": "USD",
        "totalFees": "3.80",
        "feeCurrency": "USD",
        "feesMap": {
            "exchangeFee": "3.80"
        },
        "spread": "2.18",
        "spreadCurrencyCode": "USD",
        "chain": "BTC"
    },
    "errorResponse": null
}

Full docs around Informational Quotes endpoint

3. Step 3 — Create a widget session (generate a hosted URL)

Endpoint: POST /services/widget

Purpose

Creates a widget session and returns a hosted widgetUrl you can open in a browser/WebView.
Widget gets loaded with params set after generating hosted URL. Each URL is valid to be used within 30 minutes

Request:

curl --location 'https://caas-staging.coinme.com/services/widget' \
  --header 'Authorization: Bearer <your_token>' \
  --header 'User-Agent: partnerapi' \
  --header 'Content-Type: application/json'

Response:

{
  "widgetUrl": "https://caas-staging.coinme.com/widget/{rampInstanceToken}",
  "expiresAt": "2025-08-18T16:15:00Z"
}

Body Parameters that the widget supports:

ParameterTypeRequired? (Y/N)Description
sourceAmountNumberNSource amount (fiat for onramps, crypto for offramps)
sourceCurrencyStringNSource currency (fiat for onramps, crypto for offramps)
sourceAmountLockBooleanNAbility to lock source amount in widget
sourceCurrencyLockBooleanNAbility to lock source currency in widget
destinationAmountNumberNDestination amount (crypto for onramps, fiat for offramps)
destinationCurrencyStringYDestination currency (crypto for onramps, fiat for offramps)
destinationAmountLockBooleanNAbility to lock destination amount in widget
destinationCurrencyLockBooleanNAbility to lock destination currency in widget
countryCodeStringNEnd user 2 letter country code (eg. "US")
longStringNLongitude of the user. Used for setting up cash location map in widget
latStringNLatitude of the user. Used for setting up cash location map in widget
cityStringNCity of user
stateStringNState of user
zipCodeStringNZip code of user
streetAddressStringNStreet address of user
paymentMethodStringNDesired Payment method to be used
paymentMethodLockBooleanNLocks payment method set in widget if paymentMethod is provided
walletAddressStringYEnd user wallet address crypto gets sent to
walletMemoStringNWallet memo if required by the chain being transacted on
walletLockBooleanNAbility to lock wallet address + memo(if used) in widget
externalSessionIdStringNPartner-generated ID for a single widget session
redirectUrlStringNPage to redirect user to after transaction has completed (onramp- barcode scanned/fiat given in store and crypto send processing, offramp-cash code generated and presented to user. Coinme appends "transactionId" and "status" as additional query params to the redirectUrl
redirectUrlButtonLabelStringNCustomize button label that triggers redirectUrl on specified pages
languageStringNSpecifies language set in widget for localization purposes
themeStringNDark or light mode.

4. Step 4 — Receive webhooks & fetch transaction details (reconciliation)

Coinme sends webhooks during the transaction lifecycle. Use them to update UI and trigger back‑office flows, then fetch the canonical record using the GET Transaction history for reconciliation.

4.1 Webhooks

For the scope of the widget, Coinme emits the following transactional webhooks:

EventDescription
kyc-prove.onboarding.completedTracks once a user signs up and successfully passes KYC.
kyc-prove.onboarding.failedTracks once a user signs up, but fails KYC.
orchestrator.auth-state.changedTracks when the auth state of a user interacting with orchestrator changes (I.e. When the user logs into the widget)
greendot.location.quote-confirmedTracks when a user clicks "Find A Location" button after configuring their transaction quote and confirms quote
discover.barcode.location-selectedTracks when a user requests barcode generation by clicking the "Generate Barcode" button on a location card
greendot.barcode.generation-succeededTracks successful barcode generation after location selected webhook resolves
Order Template CreatedTracks the creation of the Order Template to be used in the store. Gets triggered in parallel with greendot.barcode.generation-succeeded
greendot.barcode.generation-failedTracks failed barcode generation attempts after location selected webhook resolves
greendot.barcode.displayedWhen the user taps on “tap to display barcode” & shows the barcode
Order Template ExpiredTriggers if the order template expires. Sent after 24H after order template creation if not used.
Order Template ConsumedEvent triggers once the barcode gets scanned and is consumed
Order FulfilledTriggered when payment provider has approved and processed the fiat leg of the transaction.
BLOCKCHAIN_ACCEPTEDTriggered when the transaction is broadcast to the blockchain. The webhook body includes the txHash.
Order CompletedTriggered once order is finalized and completed. Transaction successfully completed and crypto sent to user.
Order FailedTriggered if the transaction is canceled, expired, rejected, or otherwise fails in a terminal state

Webhook Sample Body:

{
  "event": "kyc-prove.onboarding.completed",
  "event_id": "019b37a5-b9c0-751f-9d93-291167d48be4",
  "timestamp": "2025-12-19T17:26:06.943000Z",
  "customer_id": "1319354818066124800",
  "distinct_id": "0199ba6c-f4bc-78fa-8c28-110aaedac08a",
  "customer_email": "[email protected]",
  "externalSessionId": "coinmetest_2025_12_18_091"
}
{
  "event": "kyc-prove.onboarding.failed",
  "event_id": "019b3566-58bf-7ce5-8f11-abdfd0387bf4",
  "timestamp": "2025-12-19T06:57:38.708000Z",
  "error_code": "234-400-103-007",
  "customer_id": "1319195872818892800",
  "distinct_id": "019b0e86-7395-7c17-9ed0-1adafb44ee37",
  "error_message": "It appears that we are unable to verify your information. To continue to use your Coinme account, please contact us [cslink].<br/><br/>We are looking forward to continue to serve you!",
  "business_error": "locked CS investigation",
  "customer_email": "[email protected]",
  "externalSessionId": "2fd7da84-6b89-4344-8a32-0ecd075f2485",
  "technical_message": "{\"errorResponse\":{\"timestamp\":\"2025-12-19T06:57:38.497774725Z\",\"httpStatus\":200,\"errorData\":[{\"errorCode\":\"234-400-103-007\",\"message\":\"We are unable to upgrade your account at this time\"}],\"path\":\"POST /users/verify\"}}"
}
{
  "event": "orchestrator.auth-state.changed",
  "event_id": "019aeb09-6bb3-7758-b5d3-a0f41c7f2084",
  "timestamp": "2025-12-04T20:24:14.875Z",
  "customer_id": "1312867328673189888",
  "distinct_id": "019ae5ab-187f-7e94-a776-11df94edb2f2",
  "customer_email": "[email protected]",
  "externalSessionId": "abc123"
}
{
  "fees": {
    "feeCurrency": "USD",
    "feesMap": {
      "blockchainFee": "0.15",
      "exchangeFee": "0.30"
    },
    "spread": "0.00",
    "spreadCurrencyCode": "USD",
    "totalFees": "0.45"
  },
  "debit": {
    "amount": "20.00",
    "currencyCode": "USD",
    "unitPrice": "1.00",
    "unitPriceCode": "USD/USDC"
  },
  "event": "greendot.location.quote-confirmed",
  "credit": {
    "amount": "19.550000",
    "currencyCode": "USDC",
    "unitPrice": "1.000000",
    "unitPriceCode": "USDC/USD"
  },
  "event_id": "019b4716-d949-7e4f-9dd6-bf306c4a7d82",
  "timestamp": "2025-12-22T17:23:58.592000Z",
  "distinct_id": "0199ba6c-f4bc-78fa-8c28-110aaedac08a",
  "paymentMethod": "cash",
  "externalSessionId": "coinmetest_2025_12_18_098"
}
{
  "event": "discover.barcode.location-selected",
  "geoip": {
    "city": "Frisco",
    "region": "Texas",
    "country": "United States",
    "latitude": 33.1494,
    "timezone": "America/Chicago",
    "continent": "North America",
    "longitude": -96.828,
    "postal_code": "75034",
    "region_code": "TX",
    "country_code": "US",
    "continent_code": "NA"
  },
  "event_id": "019aeb09-8c8b-748a-99fc-da0599e129af",
  "timestamp": "2025-12-04T20:24:23.364Z",
  "distinct_id": "019ae5ab-187f-7e94-a776-11df94edb2f2",
  "externalSessionId": "abc123"
  "userGpsLocation": null,
  "selectedLocation": {
    "address": {
      "city": "Colorado Springs",
      "country": "USA",
      "state": "CO",
      "street": "455 N Circle Dr",
      "zipCode": "80909"
    },
    "coordinates": {
      "latitude": 38.838669,
      "longitude": -104.7756
    },
    "distance": 2.486553070351944,
    "distanceMetric": "mi",
    "googlePlacesLink": null,
    "hours": null,
    "locationId": "CVS11002",
    "locationName": "CVS",
    "notes": null,
    "provider": "GREENDOT"
  }
}
{
  "event": "greendot.barcode.generation-succeeded",
  "fees": {
    "feesMap": {
      "blockchainFee": "0.07"
    },
    "retailerCustomerFee": {
      "amount": "3.95",
      "currency": "USD"
    }
  },
  "debit": {
    "currencyCode": "USD",
    "unitPrice": "146.55"
  },
  "amount": {
    "currencyCode": "USD",
    "value": "300"
  },
  "credit": {
    "amount": "2.047152300",
    "currencyCode": "SOL"
  },
  "event_id": "019aeb0a-212b-7654-9324-94072e8c131a",
  "barcodeId": "1313964142118440960",
  "externalSessionId": "abc123"
  "timestamp": "2025-12-04T20:25:01.337Z",
  "distinct_id": "019ae5ab-187f-7e94-a776-11df94edb2f2",
  "paymentMethod": "cash",
  "expiryTimestamp": "2025-12-11T20:24:24.623Z",
  "providerBarcodeId": "830324007540008113355271474330"
}
{
  "id": "5c03b717-c2a7-4172-9df8-633ebcf6794a",
  "type": "ORDER_TEMPLATE",
  "data": {
    "providerId": "828627387817136135",
    "orderTemplateId": "1319369115555729408",
    "orderTemplateStatus": "CREATED",
    "userInputAmount": {
      "amount": "30",
      "currency": "USD"
    }
  },
  "at": "2025-12-19T18:21:51Z"
}
{
  "event": "greendot.barcode.generation-failed",
  "event_id": "019b3767-95e2-7b64-bbe1-7f1b39eb36e4",
  "errorCode": "182-400-201-801",
  "timestamp": "2025-12-19T16:18:14.367000Z",
  "distinct_id": "0199ba6c-f4bc-78fa-8c28-110aaedac08a",
  "externalSessionId": "coinmetest_2025_12_18_090"
}
{
  "event_id": "019aeb0e-c39d-7f60-803a-66760a80d250",
  "fees": {
    "feesMap": {
      "blockchainFee": "8.42"
    },
    "retailerCustomerFee": {
      "amount": "3.95",
      "currency": "USD"
    }
  },
  "debit": {
    "currencyCode": "USD"
  },
  "event": "greendot.barcode.displayed",
  "geoip": {
    "city": "Frisco",
    "region": "Texas",
    "country": "United States",
    "latitude": 33.1494,
    "timezone": "America/Chicago",
    "continent": "North America",
    "longitude": -96.828,
    "postal_code": "75034",
    "region_code": "TX",
    "country_code": "US",
    "continent_code": "NA"
  },
  "amount": {
    "currencyCode": "USD",
    "value": "100"
  },
  "credit": {
    "amount": "0.00103700",
    "currencyCode": "BTC"
  },
  "barcodeId": "1313954797448204288",
  "orderTemplateId": "1316433953436078080",
  "externalSessionId": "abc123"
  "timestamp": "2025-12-04T20:30:04.801Z",
  "distinct_id": "019ae626-9783-7fa3-9725-d4b812208b68",
  "paymentMethod": "cash",
  "expiryTimestamp": "2025-12-11T19:47:16.753Z",
  "providerBarcodeId": "830324007540008113355271470198"
}
{
  "id": "cca25dda-ab1d-4622-be41-6cf0e31f80f6",
  "type": "ORDER_TEMPLATE",
  "data": {
    "providerId": "828627387817136135",
    "orderTemplateId": "1319373746151231488",
    "providerTransactionRef": "830324007540008113355273129546",
    "orderTemplateStatus": "EXPIRED",
    "userInputAmount": {
      "amount": "30",
      "currency": "USD"
    }
  },
  "at": "2025-12-19T21:40:14Z"
}
{
  "id": "fe72997c-cba1-4666-bda2-ee2996a61bcd",
  "type": "ORDER_TEMPLATE",
  "data": {
    "providerId": "828627387817136135",
    "orderTemplateId": "1316433953436078080",
    "externalSessionId": "abc123"
    "providerTransactionRef": "830324007541181270006355272301",
    "orderTemplateStatus": "CONSUMED",
    "userInputAmount": {
      "amount": "55",
      "currency": "USD"
    },
    "errorData": null
  },
  "at": "2025-12-11T16:03:30Z"
}
{
  "id": "19f905b2-94ee-4130-96c7-67d1b7e4b086",
  "type": "CAAS",
  "data": {
    "type": "BUY",
    "providerId": "828627387817136135",
    "transactionId": "1319403376555986944",
    "externalSessionId": "coinmetest_2025_12_18_093",
    "metadata": {
      "orderStatus": "FULFILLED",
      "orderTemplateId": "1319403187510317056",
      "blockchainData": {
        "targetWalletAddress": "0xF8E70c34D2212e556aA4f25B30Ea6C6D3DA19B2C",
        "currency": "ETH",
        "chain": "ETH"
      }
    }
  },
  "at": "2025-12-19T20:38:07Z"
}
{
  "id": "cc2d6e1b-d5a3-4fc1-8690-ec5149162ec8",
  "type": "CAAS",
  "data": {
    "type": "BUY",
    "providerId": "828627387817136135",
    "transactionId": "1316435202751467520",
    "externalSessionId": "abc123"
    "metadata": {
      "orderStatus": "BLOCKCHAIN_ACCEPTED",
      "blockchainData": {
        "targetWalletAddress": "0xddd5f31ccc5fbefb50760bec51b4da217a31aa6b",
        "blockchainTransactionId": "0x466793e2409f499a0130610e849f5dd2ef25ca424e46573942307a72e7bf6adb",
        "blockchainMemo": null,
        "currency": "ETH",
        "chain": "ETH"
      }
    },
    "errorData": null
  },
  "at": "2025-12-11T16:03:49Z"
}
{
  "id": "0f89283e-dfcc-4adc-a4da-7c232e897882",
  "type": "CAAS",
  "data": {
    "type": "BUY",
    "providerId": "828627387817136135",
    "transactionId": "1316435202751467520",
    "externalSessionId": "abc123"
    "metadata": {
      "orderStatus": "COMPLETED",
      "orderTemplateId": "1316433953436078080",
      "blockchainData": {
        "targetWalletAddress": "0xddd5f31ccc5fbefb50760bec51b4da217a31aa6b",
        "blockchainTransactionId": "0x466793e2409f499a0130610e849f5dd2ef25ca424e46573942307a72e7bf6adb",
        "blockchainMemo": null,
        "currency": "ETH",
        "chain": "ETH"
      }
    },
    "errorData": null
  },
  "at": "2025-12-11T16:04:24Z"
}
{
  "id": "5ffaec5c-2c5b-4f93-a554-d0067595ebad",
  "type": "CAAS",
  "data": {
    "type": "BUY",
    "providerId": "828627387817136135",
    "transactionId": "1316431254602780672",
    "externalSessionId": "abc123",
    "metadata": {
      "orderStatus": "FAILED",
      "orderTemplateId": "1316430777429397504",
      "blockchainData": {
        "targetWalletAddress": "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh",
        "blockchainMemo": null,
        "currency": "BTC",
        "chain": "BTC"
      }
    },
    "errorData": {
      "code": "209-005-E3",
      "message": "External buy rejected by ledger"
    }
  },
  "at": "2025-12-11T15:50:54Z"
}

Webhook Body Dictionary:

{
  "event": "The name of the webhook event that was triggered",
  "event_id": "Unique identifier for this specific event occurrence",
  "timestamp": "The date and time when the event occurred",
  "customer_id": "Unique identifier for the customer in the system",
  "externalSessionId": "Partner generated unique ID for a user widget session"
  "distinct_id": "Analytics/tracking identifier for the user",
  "customer_email": "The email address of the customer who completed onboarding"
}
{
  "event": "The name of the webhook event that was triggered",
  "event_id": "Unique identifier for this specific event occurrence",
  "timestamp": "The date and time when the event occurred",
  "error_code": "Code identifying the specific type of error that occurred",
  "customer_id": "Unique identifier for the customer in the system",
  "externalSessionId": "Partner generated unique ID for a user widget session"
  "distinct_id": "Analytics/tracking identifier for the user",
  "error_message": "Error message describing why KYC failed",
  "business_error": "Business-level error description",
  "customer_email": "The email address of the customer who failed onboarding",
  "technical_message": "Technical details about the error"
}
{
  "event": "The name of the webhook event that was triggered",
  "event_id": "Unique identifier for this specific event occurrence",
  "timestamp": "The date and time when the auth state changed",
  "externalSessionId": "Partner generated unique ID for a user widget session"
  "customer_id": "Unique identifier for the customer in the system",
  "distinct_id": "Analytics/tracking identifier for the user",
  "customer_email": "The email address of the customer "
}
{
  event: 'The name of the webhook event that was triggered',
 "event_id": "Unique identifier for this specific event occurrence",
  paymentMethod: 'The payment method selected by the user',
  "externalSessionId": "Partner generated unique ID for a user widget session",
  debit: { //Details about the amount being debited from the customer
    amount: 'The amount being debited',
    currencyCode: 'Currency code for the debit amount',
    unitPrice: 'Unit price/exchange rate for the debit currency',
    unitPriceCode: 'Currency code for the unit price'
  },
  credit: { //Details about the amount being credited to the recipient
    amount: 'The amount being credited',
    currencyCode: 'Currency code for the credit amount',
    unitPrice: 'Unit price/exchange rate for the credit currency',
    unitPriceCode: 'Currency code for the unit price'
  },
  fees: { //Breakdown of all fees associated with the transaction
    feeCurrency: 'Currency in which fees are denominated',
    totalFees: 'Total amount of all fees combined',
    feesMap: 'Key-value pairs mapping fee types to their amounts',
    spread: 'The spread/markup applied to the exchange rate',
    spreadCurrencyCode: 'Currency code for the spread'
  },
  "timestamp": "The date and time when the quote was confirmed",
  "distinct_id": "Analytics/tracking identifier for the user",
}
{
  "event": "The name of the webhook event that was triggered",
  "geoip": { //Geolocation data based on IP address. Note: This object is optional and depends on whether the user accepts or denies location access via Location Services
    "city": "City derived from IP geolocation",
    "region": "State/region derived from IP geolocation",
    "country": "Country derived from IP geolocation",
    "latitude": 'Latitude coordinate from IP geolocation',
    "timezone": "Timezone of the IP location",
    "continent": "Continent derived from IP geolocation",
    "longitude": 'Longitude coordinate from IP geolocation',
    "postal_code": "Postal code derived from IP geolocation",
    "region_code": "Two-letter state/region code",
    "country_code": "Two-letter country code",
    "continent_code": "Two-letter continent code"
  },
  "event_id": "Unique identifier for this specific event occurrence",
  "timestamp": "The date and time when the location was selected",
  "externalSessionId": "Partner generated unique ID for a user widget session"
  "distinct_id": "Analytics/tracking identifier for the user",
  "userGpsLocation": 'User GPS coordinates',
  "selectedLocation": { //Details about the retail location selected by the user
    "address": { //Physical address of the selected location
      "city": "Colorado Springs",
      "country": "USA",
      "state": "CO",
      "street": "455 N Circle Dr",
      "zipCode": "80909"
    },
    "coordinates": { //Geographic coordinates of the location
      "latitude": 38.838669,
      "longitude": -104.7756
    },
    "distance": 'Distance from user's location to selected location',
    "distanceMetric": "Unit of measurement for distance",
    "googlePlacesLink": 'Link to Google Places for this location',
    "hours": 'Operating hours of the location',
    "locationId": "Unique identifier for the retail location",
    "locationName": "Name/brand of the retail location",
    "notes": 'Additional notes or information about the location',
    "provider": "The cash network provider for this location"
  }
}
{
  "event": "The name of the webhook event that was triggered",
  "fees": { //Breakdown of all fees associated with the transaction
    "feesMap": { //Key-value pairs mapping fee types to their amounts
      "blockchainFee": "0.07"
    },
    "retailerCustomerFee": {
      "amount": "3.95",
      "currency": "USD"
    }
  },
  "debit": { //Details about the amount being debited from the customer
    "currencyCode": "USD",
    "unitPrice": "146.55"
  },
  "amount": {
    "currencyCode": "USD", //Currency code for the transaction amount
    "value": "300" //The transaction amount value
  },
  "credit": { //Details about the cryptocurrency being credited
    "amount": "2.047152300",
    "currencyCode": "SOL"
  },
  "event_id": "Unique identifier for this specific event occurrence",
  "barcodeId": "Identifier for the barcode associated with this transaction",
  "externalSessionId": "Partner generated unique ID for a user widget session"
  "timestamp": "The date and time when the barcode was generated",
  "distinct_id": "Analytics/tracking identifier for the user",
  "paymentMethod": "The payment method for the transaction",
  "expiryTimestamp": "The date and time when the barcode expires",
  "providerBarcodeId": "Barcode identifier from the provider"
}
{
  "id": "Unique identifier for this specific event occurrence",
  "type": "ORDER_TEMPLATE", //The type of event that was triggered
  "data": {
    "providerId": "Identifier for the provider processing the transaction",
    "orderTemplateId": "Identifier for the order template associated with this transaction",
    "orderTemplateStatus": "CREATED", //Current status of the order template
    "userInputAmount": { //The amount configured for the transaction
      "amount": "30",
      "currency": "USD"
    }
  },
  "at": "The date and time when the order template was created"
}
{
  "event": "The name of the webhook event that was triggered",
  "event_id": "Unique identifier for this specific event occurrence}",
  "errorCode": "Code identifying the specific type of error that occurred during generation",
  "timestamp": "The date and time when the barcode generation failed",
  "externalSessionId": "Partner generated unique ID for a user widget session"
  "distinct_id": "Analytics/tracking identifier for the user"
}
{
  "event_id": "Unique identifier for this specific event occurrence",
  "fees": { //Breakdown of all fees associated with the transaction
    "feesMap": {
      "blockchainFee": "8.42"
    },
    "retailerCustomerFee": { //Fee charged by the retail location to the customer
      "amount": "3.95",
      "currency": "USD"
    }
  },
  "debit": { //Details about the amount being debited from the customer
    "currencyCode": "USD"
  },
  "event": "The name of the webhook event that was triggered",
  "geoip": { //Geolocation data based on IP address. Note: This object is optional and depends on whether the user accepts or denies location access via Location Services
    "city": "City derived from IP geolocation",
    "region": "State/region derived from IP geolocation",
    "country": "Country derived from IP geolocation",
    "latitude": 'Latitude coordinate from IP geolocation',
    "timezone": "Timezone of the IP location",
    "continent": "Continent derived from IP geolocation",
    "longitude": 'Longitude coordinate from IP geolocation',
    "postal_code": "Postal code derived from IP geolocation",
    "region_code": "Two-letter state/region code",
    "country_code": "Two-letter country code",
    "continent_code": "Two-letter continent code"
  },
  "amount": {//The principal transaction amount 
    "currencyCode": "USD",
    "value": "100"
  },
  "credit": { //Details about the cryptocurrency being credited
    "amount": "0.00103700",
    "currencyCode": "BTC"
  },
  "barcodeId": "Identifier for the barcode associated with this transaction",
  "orderTemplateId": "Identifier for the order template associated with this transaction",
  "timestamp": "The date and time when the barcode was displayed",
  "externalSessionId": "Partner generated unique ID for a user widget session"
  "distinct_id": "Analytics/tracking identifier for the user",
  "paymentMethod": "The payment method for the transaction",
  "expiryTimestamp": "The date and time when the barcode expires",
  "providerBarcodeId": "Barcode identifier from the provider"
}
{
  "id": "Unique identifier for this specific event occurrence",
  "type": "ORDER_TEMPLATE", //The type of event that was triggered
  "data": {
    "providerId": "Identifier for the provider processing the transaction",
    "orderTemplateId": "Identifier for the order template associated with this transaction",
    "providerTransactionRef": "Transaction reference ID from the provider",
    "orderTemplateStatus": "EXPIRED", //Current status of the order template
    "userInputAmount": { //The amount configured for the transaction
      "amount": "30",
      "currency": "USD"
    }
  },
  "at": "The date and time when the order template expired" 
}
{
  "id": "Unique identifier for this specific event occurrence",
  "type": "The type of event that was triggered",
  "data": {
    "providerId": "Identifier for the provider processing the transaction",
    "orderTemplateId": "Identifier for the order template associated with this transaction",
    "externalSessionId": "Partner generated unique ID for a user widget session"
    "providerTransactionRef": "Transaction reference ID from the provider",
    "orderTemplateStatus": "Status of the order template",
    "userInputAmount": { //The amount entered/scanned at the retail location
      "amount": "55",
      "currency": "USD"
    },
    "errorData": null //Error information if the consumption failed, null if successful
  },
  "at": "The date and time when the barcode was scanned and consumed"
}
{
  "id": "Unique identifier for this specific event occurrence",
  "type": "CAAS", //The type of event that was triggered
  "data": {
    "type": "BUY", //The transaction type
    "providerId": "Identifier for the provider processing the transaction",
    "transactionId": "Unique identifier for the transaction",
    "externalSessionId": "Partner generated unique ID for a user widget session",
    "metadata": {
      "orderStatus": "FULFILLED", //Current status of the order
      "orderTemplateId": "Identifier for the order template associated with this transaction",
      "blockchainData": { //Blockchain-specific transaction information
        "targetWalletAddress": "The destination wallet address receiving the cryptocurrency",
        "currency": "Cryptocurrency being transacted",
        "chain": "Blockchain network used for the transaction"
      }
    }
  },
  "at": "The date and time when the order was fulfilled"
}
{
  "id": "Unique identifier for this specific event occurrence",
  "type": "The type of event that was triggered",
  "data": {
    "type": "BUY", //The transaction type
    "providerId": "Identifier for the provider processing the transaction",
    "transactionId": "Unique identifier for the transaction",
    "externalSessionId": "Partner generated unique ID for a user widget session"
    "metadata": {
      "orderStatus": "Current status of the order",
      "blockchainData": { //Blockchain-specific transaction information
        "targetWalletAddress": "The destination wallet address receiving the cryptocurrency",
        "blockchainTransactionId": "The transaction hash (txHash) on the blockchain",
        "blockchainMemo": 'Memo or tag for the blockchain transaction, if required',
        "currency": "Cryptocurrency being transacted",
        "chain": "Blockchain network used for the transaction"
      }
    },
    "errorData": null //Error information if the transaction failed, null if successful
  },
  "at": "The date and time when the transaction was broadcast to the blockchain"
}
{
  "id": "Unique identifier for this specific event occurrence",
  "type": "The type of event that was triggered",
  "data": {
    "type": "BUY", //The transaction type
    "providerId": "Identifier for the provider processing the transaction",
    "transactionId": "Unique identifier for the transaction",
    "externalSessionId": "Partner generated unique ID for a user widget session"
    "metadata": {
      "orderStatus": "Current status of the order",
      "orderTemplateId": 'Identifier for the order template',
      "blockchainData": { //Blockchain-specific transaction information
        "targetWalletAddress": "The destination wallet address receiving the cryptocurrency",
        "blockchainTransactionId": "The transaction hash (txHash) on the blockchain",
        "blockchainMemo": 'Memo or tag for the blockchain transaction, if required',
        "currency": "Cryptocurrency being transacted",
        "chain": "Blockchain network used for the transaction"
      }
    },
    "errorData": null //Error information if the transaction failed, null if successful
  },
  "at": "The date and time when the transaction was completed"
}
{
  "id": "Unique identifier for this specific event occurrence",
  "type": "The type of event that was triggered",
  "data": {
    "type": "BUY", //The transaction type
    "providerId": "Identifier for the provider processing the transaction",
    "transactionId": "Unique identifier for the transaction",
    "externalSessionId": "Partner generated unique ID for a user widget session"
    "metadata": {
      "orderStatus": "Current status of the order",
      "orderTemplateId": 'Identifier for the order template',
      "blockchainData": { //Blockchain-specific transaction information
        "targetWalletAddress": "The destination wallet address receiving the cryptocurrency",
        "blockchainMemo": 'Memo or tag for the blockchain transaction, if required',
        "currency": "Cryptocurrency being transacted",
        "chain": "Blockchain network used for the transaction",
      }
    },
    "errorData": {
      "code": "Error code for failure",
      "message": "Human readable error message related to transaction failure"
    }
  },
  "at": "The date and time when the transaction was failed"
}

4.2 Fetch transaction details

After receiving webhooks, fetch the full transaction history for your ledger and receipts.

Reference Docs: Get Transaction History

Endpoint:

GET /services/widget/transactionhistory