India API Reference (Merchant Server)
All endpoints use HMAC authentication on https://api.transacty.ai and require the
payin:create scope.
UPI H2H endpoints
| Method | Path | Scope | Purpose |
|---|---|---|---|
POST | /v1/h2h/payin-instances | payin:create | Create a UPI pay-in (Idempotency-Key required) |
GET | /v1/h2h/payin-instances/:transactionId | payin:create | Get pay-in status |
POST | /v1/h2h/buyer-confirms-payment | payin:create | Submit the bank UTR |
GET | /v1/h2h/conversion-rates | payin:create | Optional quote helper — current INR conversion rates |
Shared read endpoints
| Method | Path | Notes |
|---|---|---|
GET | /v1/transactions | Filter type=payin only; rail / status are not query params — filter in your app |
GET | /v1/transactions/:transactionId | Status poll; same rail fields |
GET | /v1/balance | Read items[] for every pocket |
PATCH | /v1/me/webhook | Register 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).
currencySymboldefines whetheramountis quoted in INR or USDT (see Create Pay-in).- USDT is a separate wallet pocket from BDT and USDC. On
GET /v1/balance,availableBalanceis spendable andpendingBalanceis in-flight pay-ins for that currency. - The India market must be enabled (KYB approved) or
/v1/h2h/*returns403(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 — useGET /v1/balance.
Last updated on