Guide

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.

You don’t have to write code for this. The Gifting page in your dashboard does everything below — one recipient at a time, or a few thousand from a CSV — authenticated by your dashboard session, so no API key is ever typed into a browser. Every gift sent that way also appears in its History, alongside the ones you send with the API. Build against the endpoints here when you want it inside your own product.
The journey
Your serverOroPocket
  1. Your server:

    Fund your own wallet

    Every send draws down your gold or silver balance. Top it up by card or bank transfer from the dashboard.

    Sending your own inventory earns no commission — you already own it.

  2. Your server:

    Check the receiver

    Confirm the mobile number resolves to who you expect before you move value. Optional, but cheap.

    GET /partner/receiver/check
  3. Your server:

    Quote the send

    Price the transfer in rupees or grams, for either metal.

    POST /partner/send/quote
  4. Your server:

    Confirm it

    No OTP and no payment to collect — the assets are already yours.

    POST /partner/send/confirm
  5. OroPocket:

    It lands

    The recipient is credited immediately. If they have no OroPocket account, one is created when the reward arrives.

No OTP anywhere in this flow — the assets are already yours, so there is nobody to authorise the spend.

1. Hold the metal first

Every send draws down your own gold or silver — the metal in your account, not an INR balance. Buy it on the Gifting page or under “Your assets” on Money, by card, UPI or bank transfer; the grams land in seconds.

A credit line cannot fund a gift. Your billing account — prepaid float or postpaid credit — is what OroPocket charges when your API buys assets for your users. It is a different pot, and “₹50,000 left to spend” there buys you nothing to send. Sending is limited by the grams you actually hold, on both billing types. See Wallet & ledger for the two pots side by side.
Sending from your own inventory does not earn commission — you already own the assets. Commission is only paid on buys by users attributed to you; see Attribution & commission.

2. Check the receiver

Optional but recommended — confirm the mobile number resolves to the person you expect before you move value.

GET/partner/receiver/checkreceiver
FieldTypeDescription
mobilestringrequired10-digit Indian mobile number, passed as a query parameter.
FieldTypeDescription
mobilestringThe number you asked about, normalised.
existsbooleanWhether an OroPocket account already exists for this mobile.
namestringAccount holder's name when the account exists, otherwise null.
mobile_verifiedbooleanWhether 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.

POST/partner/send/quotesend
FieldTypeDescription
receiver_mobilestringrequiredWho receives the assets (10 digits). Created automatically if they are new to OroPocket.
asset_typestringrequiredEither "gold" or "silver" — those two only. Send does not support btc.
amount_inrnumberoptionalRupee value to send. Provide this OR amount_grams, not both.
amount_gramsnumberoptionalExact grams to send. Provide this OR amount_inr. Note the field is amount_grams, not grams.
price_basisstringoptionalWhich side of the spread prices the send — "sell" (default) or "buy".
price_basisMeaning
sellDefault. The send is priced at the sell rate — the rate the receiver would realise if they cashed out.
buyThe send is priced at the buy rate, matching what the receiver would have paid to acquire the same metal.
FieldTypeDescription
quote_idstringPass this to /partner/send/confirm.
expires_atstringISO timestamp. Quotes live for 10 minutes; after that confirm returns QUOTE_EXPIRED.
receiverobject{ mobile, name, exists, will_be_created } — will_be_created is true when the account does not exist yet.
asset_typestring"gold" or "silver", echoed back.
breakdownobjectFull costing for the send — see the table below.

Inside breakdown:

FieldTypeDescription
rate_per_gramnumberLocked rate used for this quote.
price_basisstringWhich side of the spread was used — "sell" or "buy".
receiver_gets_inrnumberRupee value landing with the receiver.
receiver_gets_gramsnumberGrams credited to the receiver.
partner_pays_gramsnumberGrams debited from your wallet — receiver grams plus the fee.
partner_pays_inr_equivalentnumberRupee equivalent of what you pay, at the locked rate.
fee_gramsnumberPlatform fee expressed in grams.
fee_inrnumberThe same fee in rupees.
fee_percentagenumber0.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.

POST/partner/send/confirmsend
FieldTypeDescription
quote_idstringrequiredThe quote_id returned by /partner/send/quote, confirmed within its 10-minute window.
Idempotency-KeyheaderoptionalStrongly recommended. Any string up to 100 characters — a UUID is ideal. Retrying with the same key replays the original response.
FieldTypeDescription
transaction_idstringIdentifier for this send. Look it up later via /partner/transactions/:id.
statusstringOutcome of the transfer.
asset_typestring"gold" or "silver".
receiverobject{ mobile, name, existed, created } — created is true when we opened a new OroPocket account for them.
receiver_amount_inrnumberRupee value credited to the receiver.
receiver_gramsnumberGrams credited to the receiver.
partner_debit_gramsnumberGrams actually taken out of your wallet, fee included.
fee_inrnumberFee charged, in rupees.
fee_gramsnumberThe same fee in grams.
rate_usednumberRate the send settled at.
new_partner_balance_gramsnumberYour remaining balance for that asset after the debit.
created_atstringISO 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

GET/partner/transactionstransactions
FieldTypeDescription
pagenumberoptionalPage number. Defaults to 1.
limitnumberoptionalRows per page, 1 to 100. Defaults to 20.
asset_typestringoptionalFilter to "gold" or "silver".
GET/partner/transactions/:idtransactions

Fetch a single send by its transaction_id, or subscribe to webhooks to be told when one completes instead of polling.