GMXAZ Bot Public API kolleksiyası
API sorğularını seçin, parametrləri doldurun və cavabı eyni iş sahəsində yoxlayın.
https://gmx.az/api/v1X-API-KEY60 / dəqiqəUSDGiriş
API kataloqa baxış, oyunçu yoxlaması, vauçer və top-up sifarişləri, sifariş izləmə, redeem yoxlamaları və imzalanmış müştəri webhook-larını təmin edir. Provayder məlumatları daxili məlumatdır və müştəriyə təqdim olunan API cavablarına və ya webhook məlumatlarına heç vaxt daxil edilmir.
Autentifikasiya və təhlükəsizlik
Hər qorunan sorğuda şəxsi API açarınızı X-API-KEY başlığında göndərin. Açarı yalnız backend-də saxlayın. Onu brauzer kodunda, Mini App-lərdə, mobil paketlərdə və ya açıq repozitoriyalarda heç vaxt paylaşmayın.
X-API-KEY: YOUR_API_KEY
Accept: application/json
İdempotentlik
Sifariş yaradarkən X-Idempotency-Key başlığında unikal UUID göndərin. Eyni açar və eyni məlumatlarla təkrar sorğu mövcud sifarişi qaytarır. Eyni açarın fərqli məlumatlarla yenidən istifadəsi IDEMPOTENCY_CONFLICT xətası qaytarır. Hazır Postman kolleksiyasında təkrar cəhd zamanı yaradılmış əməliyyat açarını dəyişməyin; yalnız yeni maliyyə əməliyyatına başlayanda onu təmizləyin.
X-Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000
Sifariş axını
- Oyunları, kateqoriyaları və məhsulları yükləyin. Cari qiyməti, stok vəziyyətini, dəstəklənən sahələri və doğrulama tələbini yoxlayın.
- supports_player_validation true olduqda və ya məhsul doğrulama tələb etdikdə oyunçunu yoxlayın.
- UUID idempotentlik açarı ilə sifariş yaradın və tələb olunduqda callback_url ilə callback_mode göndərin.
- Yekun status əldə edilənədək sifarişi GET /order/{id}, GET /orders və ya imzalanmış webhook hadisələri vasitəsilə izləyin.
Webhook-lar
API sifarişində callback_url göstərildikdə platforma həmin ünvana imzalanmış JSON yeniləmələri göndərir. Webhook-larda yalnız sifariş, məhsul, oyunçu, qiymət, status, çatdırılma və müştəri əməliyyatı sahələri olur. Yuxarı səviyyəli provayder adları, URL-lər, sifariş ID-ləri və xam cavablar heç vaxt açıqlanmır.
Callback rejimləri
legacy
Sifariş COMPLETED və ya CANCELED yekun statusuna çatdıqda bir dəfə yekun callback göndərir.
events
PENDING, PROCESSING, COMPLETED və FAILED kimi imzalanmış həyat dövrü dəyişikliklərini göndərir.
Webhook başlıqları
| Başlıq | Açıqlama |
|---|---|
X-EPINBULK-Signature-V2 | Tövsiyə edilən: sha256=HMAC_SHA256(timestamp + "." + event_id + "." + xam_json_gövdesi, webhook_məxfi_açarı). Yuxarıda göstərilən timestamp və event-id başlıqlarından istifadə edin. |
X-EPINBULK-Signature-Version | 2 |
X-EPINBULK-Signature | sha256=HMAC_SHA256(xam_json_gövdesi, webhook_məxfi_açarı) |
X-EPINBULK-Timestamp | ISO-8601 webhook göndərilmə vaxtı. V2 imzanı yoxlayarkən vaxtın təzəliyini də yoxlayın. |
X-EPINBULK-Event-Id | Unikal hadisə UUID-si. |
X-EPINBULK-Event | Actual event name: order.status_changed or qr_login.* |
Callback URL tələbləri
- Yalnız HTTPS URL qəbul edilir.
- Yalnız 443 portu qəbul edilir.
- Şəxsi və yerli ünvanlar bloklanır.
- URL daxilində giriş məlumatı qəbul edilmir.
- Yönləndirmələr izlənmir.
- Server 2xx cavab qaytarmalıdır.
Təkrar cəhd cədvəli
1 → 1 dəqiqə → 2 → 5 dəqiqə → 3 → 15 dəqiqə → 4-6 → 60 dəqiqə → 7-20 → 6 saat · Maksimum 20 göndərmə cəhdi.
Legacy yekun webhook nümunəsi
{
"event_id": "47c8c6ba-16a5-4089-9f62-7ae1e51d4c0f",
"order_id": 8821,
"client_order_id": "order-10001",
"status": "COMPLETED",
"product_name": "Steam Wallet 10 USD",
"qty": 2,
"player_id": null,
"player_name": null,
"server_id": null,
"region": null,
"price": "19.9800",
"currency": "USD",
"delivery": [
"CODE-ONE-XXXX",
"CODE-TWO-XXXX"
],
"manual_action_required": false,
"delivery_message": null,
"timestamp": "2026-07-25T13:31:10+04:00"
}Events webhook nümunəsi
{
"event_id": "47c8c6ba-16a5-4089-9f62-7ae1e51d4c0f",
"event": "order.status_changed",
"callback_mode": "events",
"order_id": 8821,
"client_order_id": "order-10001",
"product_id": 91,
"product_name": "PUBG Mobile 60 UC",
"product_type": "TOPUP",
"game_id": 1,
"game_name": "PUBG Mobile",
"player_id": "51515969536",
"player_name": "PlayerOne",
"server_id": "1234",
"region": "TR",
"qty": 1,
"price": "0.8800",
"currency": "USD",
"delivery": [],
"manual_action_required": false,
"delivery_message": null,
"status": "COMPLETED",
"message": "Sifariş uğurla tamamlandı.",
"timestamp": "2026-07-25T13:30:10+04:00"
}İmzanın yoxlanılması
API girişi ilə birlikdə verilmiş webhook_secret məlumatından istifadə edərək sorğunun dəyişdirilməmiş xam JSON gövdəsi üzərində HMAC SHA-256 hesablayın. Nəticəni bu sənəddə göstərilən imza başlığı ilə zamanlama hücumlarına davamlı üsulla müqayisə edin.
<?php
$secret = 'YOUR_WEBHOOK_SECRET';
$rawBody = file_get_contents('php://input');
$received = $_SERVER['HTTP_X_GAMEX_SIGNATURE'] ?? '';
$computed = 'sha256=' . hash_hmac('sha256', $rawBody, $secret);
if (!hash_equals($computed, $received)) {
http_response_code(401);
exit('Invalid signature');
}
http_response_code(204);
Statusların həyat dövrü
| Status | Terminal | Açıqlama |
|---|---|---|
PENDING |
Xeyr | Sifariş emal gözləyir. |
PROCESSING |
Xeyr | Sifariş emal olunur. |
COMPLETED |
Bəli | Sifariş tamamlanıb. |
FAILED |
Bəli | Sifariş uğursuz olub. |
CANCELED |
Bəli | Sifariş ləğv edilib. |
REFUNDED |
Bəli | Məbləğ geri qaytarılıb. |
Xəta kodları
| Code | HTTP | Açıqlama |
|---|---|---|
API_DISABLED | 503 | Public API admin tərəfindən deaktiv edilib. |
API_KEY_MISSING | 401 | X-API-KEY başlığı göndərilməyib. |
CLIENT_ORDER_ID_CONFLICT | 409 | Eyni client_order_id artıq başqa sifarişə təyin edilib. |
GAME_NOT_FOUND | 404 | Oyun tapılmadı və ya aktiv deyil. |
IDEMPOTENCY_CONFLICT | 409 | Eyni açar fərqli sorğu ilə istifadə edilib. |
IDEMPOTENCY_KEY_INVALID | 422 | Idempotency açarı yanlışdır və ya 128 simvoldan uzundur. |
IDEMPOTENCY_KEY_REQUIRED | 422 | Bu əməliyyat üçün stabil idempotency açarı tələb olunur. |
INSUFFICIENT_FUNDS | 400 | Balans kifayət etmir. |
INVALID_API_KEY | 401 | API açarı yanlışdır, passivdir və ya müştəri passivdir. |
INVALID_QUANTITY | 422 | Say icazə verilən limiti keçir. |
IP_NOT_ALLOWED | 403 | Sorğu edən IP ünvanına icazə verilməyib. |
ORDER_FAILED | 409 | Sifariş emal edilə bilmədi. |
ORDER_NOT_FOUND | 404 | Sifariş tapılmadı və ya bu istifadəçiyə aid deyil. |
OUT_OF_STOCK | 409 | Sifariş emal edilə bilmədi. |
PLAYER_ID_REQUIRED | 422 | player_id sahəsi məcburidir. |
PLAYER_NOT_FOUND | 404 | Oyunçu yoxlanmadı. |
PRODUCT_NOT_FOUND | 404 | Top-up məhsulu tapılmadı. |
RATE_LIMIT_EXCEEDED | 429 | Dəqiqəlik sorğu limiti keçilib. |
REDEEM_CHECK_FAILED | 422 | Kod yoxlaması uğursuz oldu. |
SECURITY_ERROR | 400 | Geri çağırış URL-si təhlükəsizlik qaydalarına uyğun deyil. |
SERVER_ID_REQUIRED | 422 | server_id sahəsi məcburidir. |
VALIDATION_ERROR | 422 | type və ya q parametrinin formatı yanlışdır. |
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "product_id sahəsi məcburidir.",
"details": {
"max": 1
}
}
}
Limitlər və təkrar cəhd qaydaları
Təyin edilmiş dəqiqəlik sorğu limitinə əməl edin. 429 və müvəqqəti 5xx cavablarını eksponensial gecikmə ilə təkrar yoxlayın. Eyni sifariş sorğusunu təkrar göndərərkən yeni idempotentlik açarı yaratmayın.
| Sorğu limiti | 60 / dəqiqə |
|---|---|
| max_per_page | 100 |
| max_voucher_qty | 500 |
| max_topup_qty | 1 |
| default_callback_mode | legacy |
Yükləmələr və Postman faylları
Postman Collection JSON
Bütün endpoint-ləri, parametrləri, sorğu gövdələrini, uğurlu cavabları, xəta nümunələrini, testləri, idempotentlik emalını və webhook qəbuledicisi nümunələrini ehtiva edir.
Postman Environment JSON
Yalnız dəyişənləri ehtiva edir. Kolleksiya ilə birlikdə idxal edin, sonra x_api_key, webhook_secret, callback_url və test identifikatorlarını doldurun.
OpenAPI JSON
Marşrutlar, sxemlər, təhlükəsizlik, xəta cavabları və webhook təriflərini ehtiva edən maşın tərəfindən oxuna bilən OpenAPI 3.1 spesifikasiyası.
Tam API JSON
Endpoint-lər, parametrlər, nümunələr, statuslar, webhook siyasəti, limitlər, xətalar və dəyişiklik tarixçəsi daxil olmaqla sənədləşmə modelinin tam ixracı.
Sorğu
URL yolu və sorğu parametrlərini burada idarə edin.
| Açar | Dəyər | Yer | Açıqlama |
|---|
X-API-KEYSistem başlıqları avtomatik əlavə olunur.
| Başlıq | Dəyər | Açıqlama |
|---|
JSON gövdəsini redaktə edin.
Sorğu göndərildikdən sonra cavab burada görünəcək.