İçeriğe atlayın

API

Bu sayfada

Yükler

Sürümlenmiş webhook zarfını ve data içindeki eksiksiz fatura, çekim veya kanal yatırması anlık görüntüsünü okuyun.

Her webhook gövdesi sürümlenmiş bir zarftır. data nesnesi, ilgili durum API'sinin döndürdüğü satıcıya dönük kaynak sözleşmesiyle aynıdır; işleyiciniz kısmi deltaları birleştirmek yerine eksiksiz bir anlık görüntü uygulayabilir. Bu, üç kaynağın hepsi için geçerlidir: faturalar, çekimler ve kanal yatırmaları aynı zarfı ve aynı yük kuralını paylaşır.

Zarf

Alan Tip Sözleşme
event_id string Kararlı önekli kimlik (evt_…); X-Webhook-Id ile aynıdır ve yeniden denemeler ile tekrar gönderimlerde değişmez
event_type string Olay kataloğundaki değerlerden biri
version integer Yük şeması sürümü. Güncel sürüm 1
occurred_at Unix saniye Kaynak geçişinin zamanı; teslimat zaman damgasının aksine yeniden denemede değişmez
data object Bu olay için tam fatura, çekim veya kanal yatırması anlık görüntüsü

event_id bir teslimat kimliğidir: tek bir uç noktanın, tek bir geçişe ait kopyası. Aynı olaya abone iki uç nokta, aynı ödeme için iki farklı evt_ değeri alır. İş kimliği ise data içindeki kaynak kimliğidir — inv_…, wdr_… veya pcd_… — ve uç noktalar, geçişler ve tekrar gönderimler boyunca aynı kalır. Aynı ödemeyi iki kez saymamak için iş kimliğini, aynı teslimatı iki kez işlememek için event_id değerini kullanın.

Pahalı işe başlamadan önce event_id, event_type, version ve ham gövdeyi saklayın. Entegrasyonunuzun desteklemediği bir şema sürümünü, şeklini tahmin etmek yerine reddedin.

Fatura yükü

Örnek: invoice.paid.

{
  "event_id": "evt_J7EEYeL9pZJukfj2c5OQ44",
  "event_type": "invoice.paid",
  "version": 1,
  "occurred_at": 1739281200,
  "data": {
    "invoice_id": "inv_5CcyDYmMUGtzYL10q0Iimr",
    "project_id": "prj_xFukZuAJZR06pLVBh3uwzv",
    "status": "paid",
    "is_final": true,
    "is_test": false,
    "payment_url": "https://checkout.paymos.io/invoice/inv_5CcyDYmMUGtzYL10q0Iimr",
    "order": {
      "external_id": "order-12345",
      "client_id": "customer-67890",
      "amount": "100.00",
      "currency": "USD"
    },
    "payment": {
      "currency": "USDT",
      "network": "TRC20",
      "chain_id": 728126428,
      "contract_address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
      "expected": "50.00",
      "address": "TN3W4H6rK2ce4vX9YnFQHwKENnHjoxb3m9",
      "exchange_rate": "2.00",
      "paid": "50.00",
      "remaining": "0",
      "fee": "0.50",
      "net": "49.50",
      "transfers": [
        {
          "tx_hash": "abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
          "amount": "50.00",
          "status": "confirmed",
          "created_at": 1739281020,
          "confirmed_at": 1739281200,
          "required_confirmations": 19,
          "estimated_confirmation_at": 1739281080,
          "explorer_url": "https://tronscan.org/#/transaction/abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890"
        }
      ]
    },
    "expires_at": 1739284200,
    "completed_at": 1739281200,
    "created_at": 1739277600,
    "updated_at": 1739281200
  }
}

Fatura data alanı Fatura Getir yanıtını izler. Mevcut durum için henüz var olmayan alanlar JSON sözleşmesinde null veya eksiktir; durum otoritesi olarak status ve is_final kullanın.

Çekim yükü

Örnek: withdrawal.completed.

{
  "event_id": "evt_CbYeOgBp9Kt2U3j74fxxLl",
  "event_type": "withdrawal.completed",
  "version": 1,
  "occurred_at": 1739281200,
  "data": {
    "withdrawal_id": "wdr_7K2M9P4Q8R1X5Z3A0bC2dE",
    "external_order_id": "payout-12345",
    "status": "completed",
    "is_final": true,
    "is_test": false,
    "amount": "25.00",
    "fee": "0.50",
    "currency": "USDT",
    "network": "TRC20",
    "destination_address": "TN3W4H6rK2ce4vX9YnFQHwKENnHjoxb3m9",
    "tx_hash": "7f8a9b0c1d2e3f4a5b6c7d8e9f00112233445566778899aabbccddeeff001122",
    "explorer_url": "https://tronscan.org/#/transaction/7f8a9b0c1d2e3f4a5b6c7d8e9f00112233445566778899aabbccddeeff001122",
    "created_at": 1739277600,
    "completed_at": 1739281200
  }
}

Çekim data alanı Çekim Getir yanıtını izler. tx_hash ve explorer_url, izlenen bir zincir üstü işlem mevcut olduğunda doldurulur; status yerine geçmezler.

Kanal yatırması yükü

Örnek: payment_channel.deposit.confirmed.

{
  "event_id": "evt_J7EEYeL9pZJukfj2c5OQ44",
  "event_type": "payment_channel.deposit.confirmed",
  "version": 1,
  "occurred_at": 1767225930,
  "data": {
    "id": "pcd_8ScRvL4jNq2XkB7mTfZdWu",
    "payment_channel_id": "pc_2QhKZv6mRt9WdA3nYpLbXf",
    "project_id": "prj_xFukZuAJZR06pLVBh3uwzv",
    "payment_channel_external_id": "customer-42",
    "status": "confirmed",
    "is_final": true,
    "is_test": false,
    "currency": "USDT",
    "network": "TRC20",
    "chain_id": 728126428,
    "contract_address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
    "gross": "100",
    "fee": "1",
    "net": "99",
    "applied_fee_percent": 1.0,
    "customer_fee_percent": 0,
    "tx_hash": "9f4c1b7e30ad52c8ef6a1d84b0c39f27a5e6d138f4b90c72ae51d63b8407fc25",
    "transfer_id": "9f4c1b7e30ad52c8ef6a1d84b0c39f27a5e6d138f4b90c72ae51d63b8407fc25:41a614f803b6fd780986a42c78ec9c7f77e6ded13c:41c9f6a2b7d0138e54ca3b91f6072ed48a5c1e93b7:0",
    "source_address": "TW9s4RkAqBnLpVdX2ChYzUeGm7QfKt3NbZ",
    "destination_address": "TN3W4H6rK2ce4vX9YnFQHwKENnHjoxb3m9",
    "block_height": 68421905,
    "first_included_block_timestamp": 1767225900,
    "explorer_url": "https://tronscan.org/#/transaction/9f4c1b7e30ad52c8ef6a1d84b0c39f27a5e6d138f4b90c72ae51d63b8407fc25",
    "created_at": 1767225870,
    "updated_at": 1767225930,
    "confirmed_at": 1767225930
  }
}

Yatırma data alanı Kanal Yatırması Getir yanıtını izler. Durum otoritesi status ve is_final'dır; applied_fee_percent ile customer_fee_percent, o yatırma için dondurulmuş oranlardır ve fiyatlandırmanızı değiştirdiğinizde oynamaz.

Üç yatırma olayı da aynı nesneyi taşır; bu yüzden confirming yükü bile kanalı, müşteri kimliğini, tutarı ve zincir üstü kanıtı verir. confirming ve reorged bilgi amaçlıdır ve sırasız gelebilir — hiçbiri, confirmed olduğunu bildiğiniz bir yatırmayı geri almasın.

Uyumluluk

  • Ekleyici alanlar sürüm değişikliği olmadan görünebilir. İşleyicinizin kullanmadığı alanları yok sayın.
  • Mevcut alan anlamları bir yük sürümü içinde değişmez.
  • Kimlikleri ve ondalık tutarları dize olarak işleyin. Önekli kimlikleri UUID olarak veya parayı ikili kayan nokta olarak ayrıştırmayın.
  • JSON'u ayrıştırmadan önce imzayı ham baytlara karşı doğrulayın. Nesneyi yeniden serileştirmek imzalanan girdiyi değiştirir.