Skip to Content
IndiaPayinIndia API Reference (Merchant Server)

India API Reference (Merchant Server)

All endpoints use HMAC authentication on https://api.transacty.ai and require the payin:create scope.

UPI H2H endpoints

MethodPathScopePurpose
POST/v1/h2h/payin-instancespayin:createCreate a UPI pay-in (Idempotency-Key required)
GET/v1/h2h/payin-instances/:transactionIdpayin:createGet pay-in status
POST/v1/h2h/buyer-confirms-paymentpayin:createSubmit the bank UTR
GET/v1/h2h/conversion-ratespayin:createOptional quote helper — current INR conversion rates

Shared read endpoints

MethodPathNotes
GET/v1/transactionsFilter type=payin only; rail / status are not query params — filter in your app
GET/v1/transactions/:transactionIdStatus poll; same rail fields
GET/v1/balanceRead items[] for every pocket
PATCH/v1/me/webhookRegister the URL for Transacty → merchant events

Optional products

Crypto pay-in / payout (/v1/cpg/*) exists on the same API key but is not the H2H happy path. Do not mix it into the UPI integration above.

Webhook events

When configured, Transacty sends payin.completed and payin.failed. The same webhook URL serves all rails. See Webhooks.

Settlement

  • Customer always pays INR via UPI; merchant is always credited USDT on success (trade event 4 or 6).
  • currencySymbol defines whether amount is quoted in INR or USDT (see Create Pay-in).
  • USDT is a separate wallet pocket from BDT and USDC. On GET /v1/balance, availableBalance is spendable and pendingBalance is in-flight pay-ins for that currency.
  • The India market must be enabled (KYB approved) or /v1/h2h/* returns 403 (market_not_enabled); the USDT pocket is provisioned on approval.
  • Do not present GET /v1/account-balance (upstream operator crypto) as the merchant’s balance — use GET /v1/balance.
Last updated on