Skip to main content
This is a low-level API for advanced integrations. For most use cases, the standard checkout flow handles everything automatically.

Create payment intent

Create a new onchain payment intent to receive crypto from a customer.
POST https://api.pandabase.io/v2/{storeId}/onramp/payment-intents

Request body

FieldTypeRequiredDescription
amountstringYesAmount in the token’s smallest unit (e.g. "1000000" for 1 USDC)
originAssetstringYesChain and token identifier (e.g. SOL_USDC, ETH_USDT, BTC_BTC)
customerRefundAddressstringYesCustomer’s wallet address for refunds
refundTypestringYesRefund destination — ORIGIN_CHAIN returns funds on the same chain
slippageToleranceintegerNoSlippage tolerance in basis points (e.g. 100 = 1%)
metadataobjectNoArbitrary key-value pairs for your internal tracking (max 20 keys)

Example request

curl -X POST https://api.pandabase.io/v2/{storeId}/onramp/payment-intents \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": "1000000",
    "originAsset": "SOL_USDC",
    "customerRefundAddress": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
    "refundType": "ORIGIN_CHAIN",
    "slippageTolerance": 100,
    "metadata": { "orderId": "order_123" }
  }'

Example response

{
  "paymentId": "onpi_abc123",
  "depositAddress": "3Kz9bK...deposit",
  "outputAmount": "999000",
  "expiresAt": "2026-04-08T16:30:00.000Z",
  "status": "AWAITING_DEPOSIT"
}
FieldTypeDescription
paymentIdstringUnique payment intent ID (onpi_ prefix)
depositAddressstringAddress the customer should send tokens to
outputAmountstringExpected output amount after fees and slippage
expiresAtstringISO 8601 timestamp — payment must arrive before this time
statusstringInitial status of the payment intent

Get payment status

Retrieve the current status of a payment intent.
GET https://api.pandabase.io/v2/{storeId}/onramp/payment-intents/{paymentId}

Example request

curl https://api.pandabase.io/v2/{storeId}/onramp/payment-intents/onpi_abc123 \
  -H "Authorization: Bearer sk_live_xxx"

Example response

{
  "id": "onpi_abc123",
  "amount": "1000000",
  "originAsset": "SOL_USDC",
  "recipientAddress": "So11...",
  "status": "COMPLETED",
  "liveStatus": "SUCCESS",
  "txHash": "0xabc...",
  "metadata": { "orderId": "order_123" },
  "expiresAt": "2026-04-08T16:30:00.000Z",
  "completedAt": "2026-04-08T16:20:00.000Z",
  "createdAt": "2026-04-08T16:15:00.000Z"
}
FieldTypeDescription
idstringPayment intent ID
amountstringOriginal amount requested
originAssetstringChain and token identifier
recipientAddressstringMerchant’s receiving address
statusstringCurrent payment status (see below)
liveStatusstringUnderlying chain transaction status
txHashstringOn-chain transaction hash (available after deposit)
metadataobjectYour metadata from the creation request
expiresAtstringExpiration timestamp
completedAtstringCompletion timestamp (null if not yet completed)
createdAtstringCreation timestamp

Payment statuses

StatusDescription
PENDINGPayment created, no quote yet
AWAITING_DEPOSITQuote received, waiting for customer to send tokens
PROCESSINGDeposit detected, in progress
COMPLETEDFunds delivered to merchant’s address
FAILEDPayment failed
REFUNDEDPayment failed, funds returned to customer

Asset identifiers

The originAsset field uses the format {CHAIN}_{TOKEN}. Examples:
AssetChainToken
BTC_BTCBitcoinBTC
ETH_USDCEthereumUSDC
ETH_ETHEthereumETH
SOL_USDCSolanaUSDC
SOL_SOLSolanaSOL
BASE_USDCBaseUSDC
ARB_USDCArbitrumUSDC
AVAX_USDCAvalancheUSDC
TON_TONTONTON
TRX_USDTTronUSDT
POL_USDCPolygonUSDC
See Supported Chains for the full list.