Sign in
Ödemeler ve çekimler/Payout API

Çekim API'si

Merchant bakiyenizden herhangi bir blockchain adresine çekim gönderin.

Çekim API'si, merchant bakiyenizden herhangi bir blockchain adresine programatik olarak para çekmenize olanak tanır.

Tüm Çekim endpoint'leri için sign imzasını üretmek üzere ayrı bir Payout API key kullanmalısınız. Bu anahtar normal API key'inizden farklıdır ve proje ayarlarınızda oluşturulmalıdır.

Çekim oluştur

Merchant bakiyenizden bir çekim isteği oluşturur.

POST/v1/payout

İstek parametreleri

AlanTipGerekliAçıklama
currencystringevetÇekim para birimi (bkz. References)
networkstringevetAğ kodu (bkz. References)
amountstringevetÇekim tutarı
to_addressstringevetAlıcı blockchain adresi
order_idstringhayırIdempotency anahtarı — proje içinde benzersiz. Aynı order_id ile yapılan tekrar POST yeni bir çekim oluşturmaz — onun yerine mevcut olan döner
url_callbackstringhayırÇekim webhook'ları için URL. Bu çekim için webhook'ları devre dışı bırakmak için boş bırakın
memostring | nullhayırHedef etiketi / memo. Şu anda yalnızca TON ve SOL ağları tarafından kullanılır; en fazla 255 karakter
from_currencystringhayırÇekim anında düşülerek otomatik olarak currency'ye dönüştürülen kaynak bakiye. Bakiyenizi USDT gibi bir stabilcoinde tutarken volatil varlıklarla (BTC, ETH, …) çekim yapmanıza olanak tanır — volatil kriptoyu kendiniz tutmak zorunda kalmazsınız. USDT bakiyesinden düşmek için "USDT" geçirin
fee_optionstringhayırÜcretlerin nasıl tahsil edileceği. deduct (varsayılan) — ağ + platform ücretleri amount'tan düşülür, alıcı amount - fees alır. add — ücretler üste eklenir, merchant'tan amount + fees düşülür, alıcı tam olarak amount alır

Idempotency. Bir proje içinde, çekim order_id ile benzersizdir. Aynı order_id ile aynı POST isteğini yeniden göndermek güvenlidir — API, bir kopya oluşturmak yerine mevcut çekimi döner. Production çekimleri için her zaman bir order_id geçirin.

İstek örnekleri

Shell
curl -X POST https://api.2328.io/api/v1/payout \
  -H "Content-Type: application/json" \
  -H "User-Agent: MyShop/1.0 (+https://myshop.example)" \
  -H "project: YOUR_PROJECT_UUID" \
  -H "sign: YOUR_HMAC_SIGNATURE" \
  -d '{"currency":"TRX","network":"TRX-TRC20","amount":"1.00","to_address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t","order_id":"9ed25264-8be4-439f-acf5-2a8732538d27","url_callback":"https://your-site.com/webhook/payout","memo":null,"fee_option":"deduct"}'

Yanıt örneği

JSON
{
  "state": 0,
  "result": {
    "uuid": "019dea62-1727-72aa-ac2c-eaf2ade193ef",
    "order_id": "9ed25264-8be4-439f-acf5-2a8732538d27",
    "status": "pending",
    "currency": "TRX",
    "network": "TRX-TRC20",
    "amount": "1.00",
    "merchant_amount": "1",
    "network_amount": "0.89",
    "amount_usd": "0.33",
    "to_address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
    "memo": null,
    "txid": null,
    "block_number": null,
    "error_type": null,
    "created_at": "2026-05-02T23:29:50+03:00",
    "updated_at": "2026-05-02T23:29:50+03:00"
  }
}

Ücretler. Varsayılan fee_option: deduct — ağ + platform ücretleri amount'tan düşülür (alıcı amount - fees alır). Ücretleri üste eklemek için fee_option: add geçirin — alıcı tam olarak amount alır ve merchant'tan amount + fees düşülür.

Çekim hesaplama

Çekim tutarlarını ve ücretlerini çekim oluşturmadan ve bakiyenizden düşmeden tahmin eder. Kullanıcıya onaydan önce alacağı (veya ödeyeceği) tutarı tam olarak göstermek için kullanın.

POST/v1/payout/calc

İstek parametreleri

Çekim oluştur ile aynıdır — aynı alanlar, aynı imza. order_id, url_callback, to_address ve memo alanları kabul edilir ancak yok sayılır: hiçbir çekim kaydı oluşmaz ve callback gönderilmez.

İstek örneği

Shell
curl -X POST https://api.2328.io/api/v1/payout/calc \
  -H "Content-Type: application/json" \
  -H "User-Agent: MyShop/1.0 (+https://myshop.example)" \
  -H "project: YOUR_PROJECT_UUID" \
  -H "sign: YOUR_HMAC_SIGNATURE" \
  -d '{"currency":"USDT","network":"TRX-TRC20","amount":"100","fee_option":"add"}'

Yanıt örneği

JSON
{
  "state": 0,
  "result": {
    "currency": "USDT",
    "network": "TRX-TRC20",
    "amount": "100",
    "fee_option": "add",
    "merchant_amount": "103.00000000",
    "network_amount": "100",
    "total_fee": "3.00000000",
    "total_fee_usd": "3.00000000"
  }
}

Yalnızca önizleme. Bu endpoint salt okunurdur — hiçbir bakiye düşülmez ve çekim kaydı oluşturulmaz. Arayüzünüzde ücret dökümünü göstermek için ihtiyaç duydukça çağırabilirsiniz.

Çekim durumu

Bir çekim isteğinin durumunu alın.

GET/v1/payout/status/{uuid}

Path parametreleri

AlanTipGerekliAçıklama
uuidstringevetÇekim UUID (oluşturmadaki result.uuid'den)

Yanıt örneği

JSON
{
  "state": 0,
  "result": {
    "uuid": "019dff1f-0dbd-7277-8d45-271e7775388f",
    "order_id": "4dfdcc84402b1185b71cbe399321533e",
    "status": "completed",
    "currency": "TRX",
    "network": "TRX-TRC20",
    "amount": "3.00",
    "merchant_amount": "3.00",
    "network_amount": "3.00",
    "amount_usd": "1.04",
    "to_address": "THauRv5tcucQRohXg8NiyGTk16DX1XQG5x",
    "memo": null,
    "txid": "9242e533703704ef3eaba840f70b4a26333e72c943377ee375fea17badb53def",
    "block_number": null,
    "error_type": null,
    "created_at": "2026-05-07T00:08:38+03:00",
    "updated_at": "2026-05-07T00:08:54+03:00",
    "from_currency": "USDT",
    "debited_amount": "1.050735",
    "debited_currency": "USDT"
  }
}

Bu GET isteği için imza boş bir gövdeden hesaplanır: hash_hmac('sha256', base64_encode(''), $apiKey)

Yanıt alanları

POST /v1/payout ve GET /v1/payout/status/{uuid} çağrılarının result alanında dönen alanlar:

AlanTipAçıklama
uuidstringSistem tarafından atanan çekim UUID'si
order_idstringDahili çekim tanımlayıcınız (proje içinde benzersiz)
statusstringMevcut çekim durumu (aşağıya bakın)
currencystringÇekim para birimi
networkstringAğ kodu
amountstringTalep edildiği şekliyle çekim tutarı
merchant_amountstringMerchant bakiyesinden düşülen tutar
network_amountstringZincir üzerinde gerçekten gönderilen tutar (ağ + platform ücretlerinden sonra)
amount_usdstringÇekim tutarının USD karşılığı
to_addressstringAlıcı blockchain adresi
memostring | nullHedef etiketi / memo (TON, SOL). Aksi halde null
txidstring | nullBlockchain işlem hash'i. İşlem gönderilene kadar null
block_numberint | nullİşlemin dahil edildiği blok numarası. Dahil edilene kadar null
error_typestring | nullstatus = failed olduğunda hata nedeni (aşağıdaki Hata türlerine bakın). Aksi halde null
created_atstring (ISO 8601)Çekim oluşturma zamanı
updated_atstring (ISO 8601)Son durum değişikliği zamanı
from_currencystring | nullOtomatik dönüştürme kullanıldığında çekimin düşüldüğü kaynak bakiye (örn. BTC çekimi için USDT). Dönüştürme yapılmadıysa null
debited_amountstring | nullDönüştürmeden sonra kaynak bakiyeden gerçekten düşülen tutar. Yalnızca otomatik dönüştürme kullanıldığında mevcuttur
debited_currencystring | nulldebited_amount'un para birimi — fonların düşüldüğü bakiye

Çekim durumları

status alanı aşağıdaki değerleri alabilir:

DurumAçıklama
pendingOluşturuldu, işlenmeyi bekliyor
completedBaşarıyla tamamlandı — txid ayarlandı
failedGönderim hatası — bkz. error_type
cancelledİptal edildi

Hata türleri

status = failed olduğunda error_type alanı nedeni açıklar:

KodAçıklama
aml_riskÇekim AML risk kontrolleri tarafından engellendi (alıcı adres yüksek riskli olarak işaretlendi)

Webhook bildirimleri

Bir çekimin durumu değiştiğinde, sistem çekim oluşturulurken geçirilen url_callback URL'ine bir POST webhook gönderir. url_callback sağlanmadıysa, o çekim için webhook gönderilmez.

  • Method: POST
  • Content-Type: application/json
  • İmza: istek gövdesindeki sign alanı, Payout API key ile hesaplanır (çekim isteklerini imzalamak için kullanılan aynı anahtar).

Payload, GET /v1/payout/status/{uuid} çağrısının result nesnesini ve doğrulama için bir sign alanını yansıtır.

Payload

JSON
{
  "uuid": "019dff1f-0dbd-7277-8d45-271e7775388f",
  "order_id": "4dfdcc84402b1185b71cbe399321533e",
  "status": "completed",
  "currency": "TRX",
  "network": "TRX-TRC20",
  "amount": "3.00",
  "merchant_amount": "3.00",
  "network_amount": "3.00",
  "amount_usd": "1.04",
  "to_address": "THauRv5tcucQRohXg8NiyGTk16DX1XQG5x",
  "memo": null,
  "txid": "9242e533703704ef3eaba840f70b4a26333e72c943377ee375fea17badb53def",
  "block_number": null,
  "error_type": null,
  "created_at": "2026-05-07T00:08:38+03:00",
  "updated_at": "2026-05-07T00:08:54+03:00",
  "from_currency": "USDT",
  "debited_amount": "1.050735",
  "debited_currency": "USDT",
  "sign": "925ad7bf3d6841864101f7cc2c7e30652e70a06cdb04dbe07a0129480000ce4a"
}

İmzayı doğrulama. Ödeme webhook'larıyla aynı algoritmayı kullanın, ancak normal API key yerine Payout API key ile imzalayın. sign alanını çıkarın, kalan payload'u JSON'a encode edin, Base64 ile encode edin, ardından hash_hmac('sha256', $base64, $payoutApiKey) hesaplayın ve alınan sign ile karşılaştırın.