Buyurtmalar va holatlar
Buyurtma yaratish, hayot sikli, qayta urinishlar va idempotentlik.
Order (buyurtma) bitta qabul qiluvchiga Stars yoki Premium yetkazib berishni bildiradi. Buyurtma uni yaratgan Project'ga tegishli.
Yaratish
Checks the recipient, holds the price on your balance and queues the Order (QUEUED).
Repeating with the same externalId returns the existing Order (with different parameters: 409, code -9207).
Stars: quantity 50 to 1,000,000; Premium: months 3, 6 or 12.
Authorization
apiKey ifk_<clientId>_<secret>, for example ifk_48aa52d67c0fef6decb05b36_lVlZSWKN43sgb2vfEpFbqtzQ0ePNZya6yZr-RmJ4wxo
In: header
Header Parameters
8 to 128 characters [A-Za-z0-9._:-], unique per operation
^[A-Za-z0-9._:-]{8,128}$Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/orders" \ -H "Idempotency-Key: string" \ -H "Content-Type: application/json" \ -d '{ "externalId": "bot-order-1024", "username": "durov", "product": "STARS", "quantity": 100 }'{ "success": true, "data": { "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "externalId": "bot-order-1024", "product": "STARS", "quantity": 100, "months": null, "username": "durov", "recipientName": "Pavel Durov", "status": "QUEUED", "price": "1.65", "currency": "USD", "failure": null, "createdAt": "2026-10-06T09:15:22.443Z", "sentAt": null, "completedAt": null }, "meta": { "requestId": "9f1c2b7e-3a4d-4e5f-8a6b-7c8d9e0f1a2b", "timestamp": "2026-10-06T09:15:22.481Z", "processingTimeMs": 38 }}POST /v1/orders
X-API-Key: ifk_…
Idempotency-Key: 5c0e1d7a-3b1f-4c1e-9d55-0f6b6a1b2c3d
Content-Type: application/json{ "product": "STARS", "quantity": 500, "username": "durov", "externalId": "1042" }| Maydon | Turi | Tavsif |
|---|---|---|
product | STARS | PREMIUM | nima yetkaziladi |
quantity | integer | STARS uchun: 50 dan 1 000 000 gacha |
months | 3 | 6 | 12 | PREMIUM uchun, quantity o'rniga |
username | string | qabul qiluvchi: durov, @durov yoki https://t.me/durov; 4 dan 32 gacha [a-z0-9_] belgi, harf bilan boshlanadi |
externalId | string | sizning tizimingizdagi buyurtma id'si (1 dan 128 gacha belgi), Project ichida takrorlanmaydi |
201 javobida buyurtma obyekti qaytadi:
{
"id": "0199a1b2-6f00-7abc-9def-112233445566",
"externalId": "1042",
"product": "STARS",
"quantity": 500,
"months": null,
"username": "durov",
"recipientName": "Pavel Durov",
"status": "QUEUED",
"price": "8.25",
"currency": "USD",
"failure": null,
"createdAt": "2026-09-26T10:15:30.000Z",
"sentAt": null,
"completedAt": null
}price AQSh dollaridagi satr. failure faqat FAILED holatida to'ldiriladi: { "code": "RECIPIENT_NOT_FOUND", "message": "Telegram user not found" }.
Buyurtma yaratilganda biz:
- qabul qiluvchini (kesh orqali) tekshiramiz: u topilmasa, darhol
422(-9002) qaytaramiz, Premium sovg'a qilib bo'lmasa,422(-9003); bunda pul bloklanmaydi; - narxni narxlar ro'yxatingiz bo'yicha qayd etamiz: u buyurtmada saqlanadi va keyin o'zgarmaydi;
- summani balansda bloklaymiz (
HOLD), mablag' yetmasa,402(-9301) qaytaramiz; - buyurtmani navbatga qo'yamiz va
QUEUEDholati bilan201javob beramiz.
Holatlar
Current state of one order: its status, what was bought and for how much. Poll it after creating an order, or subscribe to the webhook instead of polling.
Authorization
apiKey ifk_<clientId>_<secret>, for example ifk_48aa52d67c0fef6decb05b36_lVlZSWKN43sgb2vfEpFbqtzQ0ePNZya6yZr-RmJ4wxo
In: header
Path Parameters
uuidResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/orders/497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "success": true, "data": { "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "externalId": "bot-order-1024", "product": "STARS", "quantity": 100, "months": null, "username": "durov", "recipientName": "Pavel Durov", "status": "SUCCEEDED", "price": "1.65", "currency": "USD", "failure": null, "createdAt": "2026-10-06T09:15:22.443Z", "sentAt": "2026-10-06T09:15:31.902Z", "completedAt": "2026-10-06T09:15:48.215Z" }, "meta": { "requestId": "9f1c2b7e-3a4d-4e5f-8a6b-7c8d9e0f1a2b", "timestamp": "2026-10-06T09:15:22.481Z", "processingTimeMs": 38 }}Project orders, newest first.
Authorization
apiKey ifk_<clientId>_<secret>, for example ifk_48aa52d67c0fef6decb05b36_lVlZSWKN43sgb2vfEpFbqtzQ0ePNZya6yZr-RmJ4wxo
In: header
Query Parameters
1 <= value11 <= value <= 10020QUEUED waiting, PROCESSING in progress, SENT transfer to the supplier sent and awaiting confirmation,
SUCCEEDED delivered, FAILED not delivered (hold released), NEEDS_REVIEW an operator checks the outcome.
Value in
- "QUEUED"
- "PROCESSING"
- "SENT"
- "SUCCEEDED"
- "FAILED"
- "NEEDS_REVIEW"
1 <= length <= 128Response Body
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/orders"{ "success": true, "data": [ { "id": "2f1a8b3c-5d6e-4f70-8a9b-0c1d2e3f4a5b", "externalId": "bot-order-1025", "product": "PREMIUM", "quantity": null, "months": 6, "username": "durov", "recipientName": "Pavel Durov", "status": "FAILED", "price": "16.99", "currency": "USD", "failure": { "code": "RECIPIENT_NOT_ELIGIBLE", "message": "The recipient cannot receive this gift (Premium may already be active)" }, "createdAt": "2026-10-06T09:16:02.118Z", "sentAt": null, "completedAt": "2026-10-06T09:16:05.774Z" }, { "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "externalId": "bot-order-1024", "product": "STARS", "quantity": 100, "months": null, "username": "durov", "recipientName": "Pavel Durov", "status": "SUCCEEDED", "price": "1.65", "currency": "USD", "failure": null, "createdAt": "2026-10-06T09:15:22.443Z", "sentAt": "2026-10-06T09:15:31.902Z", "completedAt": "2026-10-06T09:15:48.215Z" } ], "meta": { "requestId": "9f1c2b7e-3a4d-4e5f-8a6b-7c8d9e0f1a2b", "timestamp": "2026-10-06T09:20:00.012Z", "processingTimeMs": 21, "pagination": { "page": 1, "limit": 20, "totalItems": 2, "totalPages": 1 } }}QUEUED ──▶ PROCESSING ──▶ SENT ──▶ SUCCEEDED
▲ │ │
└─ takror ───┘ ├──▶ QUEUED (o'tkazma bajarilmagani isbotlangan)
│ └──▶ NEEDS_REVIEW ──▶ SUCCEEDED | FAILED
└──▶ FAILED (yakuniy xato yoki 3 urinish)| Holat | Ma'nosi | Yakuniy |
|---|---|---|
QUEUED | navbatda, bo'sh Supplier Account kutilmoqda | yo'q |
PROCESSING | bajarilmoqda: yetkazib beruvchida bron va to'lov yuborish | yo'q |
SENT | to'lov yetkazib beruvchiga yuborildi, tarmoqda tasdiq kutilmoqda | yo'q |
SUCCEEDED | Stars/Premium yetkazildi, summa yechildi (CAPTURE) | ha |
FAILED | bajarilmadi, blok olib tashlandi (RELEASE), pul yechilmadi | ha |
NEEDS_REVIEW | natija noma'lum, buyurtmani qo'llab-quvvatlash xizmatimiz tekshirmoqda, yakuni vebxuk orqali keladi | yo'q |
Odatda QUEUED dan SUCCEEDED gacha 10 dan 60 soniyagacha vaqt ketadi. Agar barcha akkauntlar band bo'lsa (trottling bo'limiga qarang), buyurtma QUEUED holatida kutadi. Bu odatiy hol.
Qayta urinishlar
Qayta urinishlarni platformaning o'zi bajaradi, buyurtmani qayta yaratishingiz shart emas:
- to'lov yuborilishidan oldin akkauntda muammo bo'lsa (sessiya muddati tugagan, hamyonda mablag' kam): buyurtma
QUEUEDholatiga qaytadi va boshqa akkaunt tomonidan olinadi, urinish hisoblanmaydi; - yuborishdan oldin yetkazib beruvchi yoki tarmoqda vaqtinchalik xato bo'lsa: 30 soniya × urinish raqami o'tgach qayta urinish; jami 3 urinish, shundan so'ng buyurtma
ATTEMPTS_EXHAUSTEDkodi bilanFAILEDbo'ladi; - yakuniy xato bo'lsa (qabul qiluvchi topilmadi, Premium allaqachon faol): darhol
RECIPIENT_NOT_FOUNDyokiRECIPIENT_NOT_ELIGIBLEkodi bilanFAILED; SENTdan keyin buyurtma faqat o'tkazma bajarilmagani isbotlansa takrorlanadi (urinish hisoblanadi). Shu tariqa ikki marta yetkazish va ikki marta to'lash istisno qilinadi; agar natija 10 daqiqa ichida aniq bo'lmasa, buyurtmaNEEDS_REVIEWholatiga o'tadi va qo'lda hal qilinadi (rad etilsa,REJECTED_BY_REVIEWkodi bilanFAILEDbo'ladi).
failure.code | Sababi |
|---|---|
RECIPIENT_NOT_FOUND | yetkazib beruvchida qabul qiluvchi topilmadi |
RECIPIENT_NOT_ELIGIBLE | qabul qiluvchiga sovg'a qilib bo'lmaydi (masalan, Premium allaqachon faol) |
ATTEMPTS_EXHAUSTED | buyurtmani 3 urinishda bajarib bo'lmadi |
REJECTED_BY_REVIEW | buyurtma qo'lda tekshiruvdan keyin bekor qilindi |
Idempotentlik
Idempotentlik bitta so'rovni bir necha marta yuborish natijani o'zgartirmasligini, ya'ni takroriy so'rov ikkinchi buyurtma yaratmasligini bildiradi. Dublikatlardan ikki xil himoya bor, ikkalasidan ham foydalaning:
Idempotency-Keyaniq bir HTTP so'rovni himoya qiladi. Xuddi shu kalit va xuddi shu tana bilan qayta yuborilgan so'rov ikkinchi buyurtma yaratmasdan o'sha javobni qaytaradi (Idempotent-Replayed: truesarlavhasi bilan). Xuddi shu kalit boshqa tana bilan kelsa,422(-11002) qaytadi; agar birinchi so'rov hali bajarilayotgan bo'lsa,409(-11003) qaytadi, birozdan keyin qayta urining. Xato javoblar eslab qolinmaydi: tuzatilgan so'rovni xuddi shu kalit bilan qayta yuborish mumkin. Kalitni har bir amal uchun bir marta yarating (masalan, UUID) va taymautda uni takror ishlating.externalIdsizning tizimingizdagi buyurtmani himoya qiladi. Project ichida bir xilexternalIdbilan ikkinchi buyurtma yangiIdempotency-Keybilan ham yaratilmaydi: xuddi shu parametrlar bilan takroriyPOSTmavjud buyurtmani qaytaradi, boshqa parametrlar bilan (username,product,quantity,months) esa409(-9207) qaytaradi. Buyurtma yaratilganiga ishonchingiz komil bo'lmasa, uni toping:GET /v1/orders?externalId=1042.
Buyurtmalarni olish
GET /v1/orders/{id}: bitta buyurtma; boshqa Project'ning buyurtmasi uchun404(-9201).GET /v1/orders?status=FAILED&externalId=1042&page=1&limit=20: Project buyurtmalari ro'yxati, yangilari birinchi (limit100 gacha); sahifalashmeta.paginationichida.