tgpay cryptoAPI
crypto-payapitransferspayouts

API reference: transfers aur checks

4 minute readUpdated 22 Aug 2026

Payout ke methods. transfer aapke app balance se seedhe kisi Telegram user ke wallet mein funds bhejta hai; check ek aisa link hai jise claim kiya ja sakta hai aur jise aap pehle se fund karte hain. Conventions (auth, envelope, amounts, spend_id) Merchant API reference page par hain.

transfer

POST /pay/api/transfer — scope payouts, limit 30 per minute. Turant aur atomically settle hota hai; koi pending state nahi hoti.

ParameterTypeZarooriMatlab
user_idintegerhaanrecipient ka Telegram user id. Recipient pehle se app ka user hona chahiye — kisi anjaan id par payout funds atkaane ke bajaay error deta hai
assetstringhaanasset code
amountstringhaanpositive decimal string; saath hi platform ke per-transfer minimum aur maximum se bandha (maujooda rates par US-dollar-equivalent estimate)
spend_idstringhaanidempotency key, 1–64 characters, har payout ke liye unique
commentstringnahi1024 characters tak, recipient ko dikhta hai
disable_send_notificationbooleannahitrue = recipient ko Telegram par notify na karein

Result transfer object hota hai: transfer_id, hash, user_id, asset, amount, amount_minor, spend_id, comment, status (hamesha completed), created_at, completed_at.

Errors: 404 user_not_found (recipient ne kabhi app use hi nahi kiya), 409 recipient_blocked, 400 amount_too_small / 400 amount_too_big (per-transfer bounds se bahar), 409 insufficient_funds, 404 unknown_asset, 400 invalid_amount, aur spend_id wali jodi 409 idempotency_conflict / 409 idempotency_in_progress.

transferBatch

POST /pay/api/transferBatch — scope payouts, limit 10 per minute. Mass payouts ke liye ek extension: ek hi call mein 100 transfers tak.

Ek parameter: items — ek array jismein har item poora transfer parameter set hota hai (user_id, asset, amount, spend_id, aur optional comment aur disable_send_notification). Batch ke andar spend_ids unique hone chahiye, warna kuch bhi chalne se pehle poori call 400 duplicate_spend_id ke saath fail ho jaati hai.

Items alag-alag, order mein settle hote hain — ek item fail hone se baaki items roll back nahi hote. Kuch items fail hone par bhi call HTTP 200 aur ok: true deti hai, isliye har item hamesha check karein:

  • success: {"ok": true, "spend_id": "…", "result": <transfer object>}
  • failure: {"ok": false, "spend_id": "…", "error": {"code": …, "name": "…"}} — error names wahi jo ek single transfer mein hote hain.

Batch items single transfers ke saath wahi idempotency namespace share karte hain: poora batch dobara bhejna — ya kisi ek item ko usi spend_id ke saath single transfer ki tarah dobara bhejna — do baar pay karne ke bajaay replay karta hai.

getTransfers

GET /pay/api/getTransfers — scope read. Filters: asset, transfer_ids (comma se alag), spend_id (exact match — apni hi key se koi payout dhoondhein), aur saath mein offset / count. {"items": [transfer, …]} deta hai, sabse naya pehle.

createCheck

POST /pay/api/createCheck — scope checks, limit 60 per minute. Aapke app balance se fund kiya gaya ek single-use check banata hai; jiske paas link ho wo koi bhi — ya sirf pinned user — use apne wallet mein claim kar sakta hai. Check bante hi amount lock ho jaati hai (getBalance mein wo available se onhold mein chala jaata hai).

ParameterTypeZarooriMatlab
assetstringhaanasset code
amountstringhaanpositive decimal string
pin_to_user_idintegernahisirf yahi Telegram user id claim kar sakta hai
pin_to_usernamestringnahisirf yahi @username claim kar sakta hai (@ optional hai; jab pin_to_user_id bhi set ho to ise ignore kiya jaata hai). Username app ke kisi maujooda user ka hona chahiye
spend_idstringnahiidempotency key (extension) — ek use karein

Result check object hota hai: check_id, hash, asset, amount, amount_minor, bot_check_url (t.me claim link), status (active / activated), pin_to_user_id, created_at, activated_at. Claim hone par opt-in check_activated webhook fire hota hai.

Errors: 404 unknown_asset, 400 invalid_amount, 404 user_not_found (pinned username kisi se match nahi karta), 409 insufficient_funds, aur spend_id wali jodi.

deleteCheck

POST /pay/api/deleteCheck — scope checks. Ek parameter: check_id. Jo check claim nahi hua use cancel karta hai aur locked amount aapke app balance mein wapas kar deta hai; true deta hai. Errors: 404 check_not_found, 409 check_not_active (pehle hi claim ya delete ho chuka).

getChecks

GET /pay/api/getChecks — scope read. Filters: asset, check_ids (comma se alag), status (active / activated), aur saath mein offset / count. {"items": [check, …]} deta hai, sabse naya pehle; delete kiye gaye checks kabhi list mein nahi aate.