Sending assets
Send gold or silver out of your own wallet to any user by mobile number. Ideal for rewards, cashback and payouts.
Send is a partner → user transfer. The assets leave your balance, so there is no payment to collect and no OTP to chase. If instead you want one of your users to gift another user, see user-to-user gifting.
1. Fund your wallet
Every send draws down your own gold or silver balance, so top it up first from the Wallet page — buy via Cashfree or bank transfer and the balance updates in seconds. See Wallet & ledger for the balance and ledger endpoints.
2. Check the receiver
Optional but recommended — confirm the mobile number resolves to the person you expect before you move value.
/partner/receiver/checkreceiver| Field | Type | Description | |
|---|---|---|---|
| mobile | string | required | 10-digit Indian mobile number, passed as a query parameter. |
| Field | Type | Description |
|---|---|---|
| mobile | string | The number you asked about, normalised. |
| exists | boolean | Whether an OroPocket account already exists for this mobile. |
| name | string | Account holder's name when the account exists, otherwise null. |
| mobile_verified | boolean | Whether that account has a verified mobile number. |
curl "https://api.oropocket.com/partner/receiver/check?mobile=9876543210" \
-H "Authorization: Bearer oro_live_xxx"A receiver who has never used OroPocket is created automatically at confirm time — you never have to register them first.
3. Quote the send
Quoting locks a rate and shows exactly what leaves your balance versus what lands in theirs. Nothing moves until you confirm.
/partner/send/quotesend| Field | Type | Description | |
|---|---|---|---|
| receiver_mobile | string | required | Who receives the assets (10 digits). Created automatically if they are new to OroPocket. |
| asset_type | string | required | Either "gold" or "silver" — those two only. Send does not support btc. |
| amount_inr | number | optional | Rupee value to send. Provide this OR amount_grams, not both. |
| amount_grams | number | optional | Exact grams to send. Provide this OR amount_inr. Note the field is amount_grams, not grams. |
| price_basis | string | optional | Which side of the spread prices the send — "sell" (default) or "buy". |
| price_basis | Meaning |
|---|---|
| sell | Default. The send is priced at the sell rate — the rate the receiver would realise if they cashed out. |
| buy | The send is priced at the buy rate, matching what the receiver would have paid to acquire the same metal. |
| Field | Type | Description |
|---|---|---|
| quote_id | string | Pass this to /partner/send/confirm. |
| expires_at | string | ISO timestamp. Quotes live for 10 minutes; after that confirm returns QUOTE_EXPIRED. |
| receiver | object | { mobile, name, exists, will_be_created } — will_be_created is true when the account does not exist yet. |
| asset_type | string | "gold" or "silver", echoed back. |
| breakdown | object | Full costing for the send — see the table below. |
Inside breakdown:
| Field | Type | Description |
|---|---|---|
| rate_per_gram | number | Locked rate used for this quote. |
| price_basis | string | Which side of the spread was used — "sell" or "buy". |
| receiver_gets_inr | number | Rupee value landing with the receiver. |
| receiver_gets_grams | number | Grams credited to the receiver. |
| partner_pays_grams | number | Grams debited from your wallet — receiver grams plus the fee. |
| partner_pays_inr_equivalent | number | Rupee equivalent of what you pay, at the locked rate. |
| fee_grams | number | Platform fee expressed in grams. |
| fee_inr | number | The same fee in rupees. |
| fee_percentage | number | 0.25 — the fee is 0.25% of the send. |
curl -X POST https://api.oropocket.com/partner/send/quote \
-H "Authorization: Bearer oro_live_xxx" \
-H "Content-Type: application/json" \
-d '{"receiver_mobile":"9876543210","asset_type":"gold","amount_inr":250}'4. Confirm the send
Confirm moves the assets. Send an Idempotency-Key header so a network timeout can be retried without a double send.
/partner/send/confirmsend| Field | Type | Description | |
|---|---|---|---|
| quote_id | string | required | The quote_id returned by /partner/send/quote, confirmed within its 10-minute window. |
| Idempotency-Key | header | optional | Strongly recommended. Any string up to 100 characters — a UUID is ideal. Retrying with the same key replays the original response. |
| Field | Type | Description |
|---|---|---|
| transaction_id | string | Identifier for this send. Look it up later via /partner/transactions/:id. |
| status | string | Outcome of the transfer. |
| asset_type | string | "gold" or "silver". |
| receiver | object | { mobile, name, existed, created } — created is true when we opened a new OroPocket account for them. |
| receiver_amount_inr | number | Rupee value credited to the receiver. |
| receiver_grams | number | Grams credited to the receiver. |
| partner_debit_grams | number | Grams actually taken out of your wallet, fee included. |
| fee_inr | number | Fee charged, in rupees. |
| fee_grams | number | The same fee in grams. |
| rate_used | number | Rate the send settled at. |
| new_partner_balance_grams | number | Your remaining balance for that asset after the debit. |
| created_at | string | ISO timestamp of the transfer. |
curl -X POST https://api.oropocket.com/partner/send/confirm \
-H "Authorization: Bearer oro_live_xxx" \
-H "Idempotency-Key: 8f14e45f-cea1-4b2c-9d3a-1f2e3d4c5b6a" \
-H "Content-Type: application/json" \
-d '{"quote_id":"sqt_xxx"}'5. Track your sends
/partner/transactionstransactions| Field | Type | Description | |
|---|---|---|---|
| page | number | optional | Page number. Defaults to 1. |
| limit | number | optional | Rows per page, 1 to 100. Defaults to 20. |
| asset_type | string | optional | Filter to "gold" or "silver". |
/partner/transactions/:idtransactionsFetch a single send by its transaction_id, or subscribe to webhooks to be told when one completes instead of polling.