kokiwa

API referansı

Tüm uç noktaları sunucunuzdan çağırın. İstekler ve yanıtlar JSON'dur. Webhook adresleri ve API anahtarları satıcı panelinde yönetilir.

Hemen kopyalanabilir kod mu arıyorsunuz? Node.js, Python, PHP, Go ve Java entegrasyon örnekleri

Uç noktaAmaç
POST /v1/payment_intentsÖdeme oluştur
GET /v1/payment_intents/{id}Ödemeyi getir
POST /v1/deposit_addressesKullanıcının yatırma adresini al
GET /v1/depositsYatırmaları listele
GET /v1/deposits/{id}Yatırmayı getir
GET /v1/chainsProjenin zincir ve tokenlarını gör
PUT /v1/customers/{external_id}Kullanıcıya etiket ve not ekle (isteğe bağlı)
GET /v1/customers/{external_id}Kullanıcıyı getir (isteğe bağlı)

Temel kurallar

Temel URLhttps://api.kokiwa.com, ana ağ ve test ağı için aynıdır.
Kimlik doğrulamaAuthorization: Bearer sk_… başlığı. sk_live_ ile başlayan anahtarlar ana ağa, sk_test_ ile başlayanlar test ağına erişir; veriler tamamen ayrıdır. Anahtar yalnızca kendi projesine erişir.
TutarlarToken biriminde dizeler, örneğin "25.00". İstekler en fazla 6 ondalık kabul eder; yanıtlar zincir hassasiyetini korur, bu yüzden ondalık sayısı değişebilir. Zincirdeki ham değer yalnızca transaction.raw_amount alanındadır.
ZamanISO 8601 UTC, örneğin 2026-11-02T08:30:00Z.
AdreslerEVM adresleri EIP-55 sağlama biçiminde döner. Olduğu gibi gösterin, karşılaştırırken büyük/küçük harfi yok sayın.
IdempotencyPOST istekleri Idempotency-Key (en fazla 255 karakter) gönderebilir. Aynı anahtarla yeniden deneme ilk sonucu Idempotent-Replayed: true başlığıyla döndürür.

Hatalar

Hatalar 4xx veya 5xx döndürür. Kararı code ile verin; message yalnızca hata ayıklama içindir.

{
  "error": {
    "code": "amount_below_minimum",
    "message": "options[0].amount is below the minimum",
    "details": { "min_amount": "5.00" }
  }
}
HTTPcodeAnlamı
400invalid_*Geçersiz parametre; message alanı belirtir.
400chain_not_enabledProjenin bu zincirde etkin alım adresi yok veya tahsilat kapalı.
400chain_not_availableBu zincir şu anda tahsilat almıyor.
400chain_not_supportedBu zincirde yatırma adresi yok.
400token_not_enabledProje bu tokenı seçmemiş.
400currency_not_availableProje bu para birimini hiçbir zincirde kabul edemiyor.
400deposits_disabledProje yatırma adreslerini kapatmış.
400amount_below_minimumAsgari tutarın altında; asgari tutar details.min_amount alanındadır.
401unauthorizedAPI anahtarı eksik, geçersiz veya iptal edilmiş.
403project_disabledProje devre dışı.
404not_foundKaynak yok veya başka bir projeye ait.
409request_in_progressAynı Idempotency-Key ile bir istek hâlâ işleniyor. Biraz sonra yeniden deneyin.
422idempotency_key_reusedAynı Idempotency-Key farklı bir istekte kullanıldı.
500internal_errorSunucu hatası. Daha sonra aynı Idempotency-Key ile yeniden deneyin.

Ödemeler

Ödeme, kullanıcının ödeyeceği bir siparişi temsil eder. Kullanıcı ödeme sayfasında öder, sonucu webhook ile alırsınız.

Ödeme oluştur

POST/v1/payment_intents
ParametreAçıklama
currency zorunluPara birimi, örneğin USDT. Bkz. GET /v1/chains içindeki currencies.
amount zorunluEn fazla 6 ondalıklı token tutarı, örneğin "25.00".
chainsYalnızca bu zincirlerde kabul et, örneğin ["bsc", "base"]. Varsayılan olarak projenin bu para birimini kabul ettiği tüm zincirler.
customerSisteminizdeki kullanıcı kimliği: 1-128 harf, rakam veya _ - . : @.
expires_inSaniye cinsinden geçerlilik, 60 ile 604800 (7 gün) arası. Varsayılan 1800 (30 dakika).
metadataHerhangi bir JSON nesnesi, en fazla 50 anahtar ve 8KB; API ve webhook'larda aynen döner. Sipariş numarası için uygundur.
success_urlÖdemeden sonra ödeme sayfasının döneceği https adresi.
cancel_urlKullanıcı İptal'e tıkladığında dönülecek https adresi.

Tutarın asgarinin altında kaldığı zincirler çıkarılır; hiç zincir kalmazsa istek başarısız olur. Varsayılan asgari 5 USD'dir; ücretleriniz panelde projenin Komisyonlar bölümündedir.

Zincir başına token ve tutar belirleme

Birden çok para birimi veya zincire göre farklı tutar için currency, amount ve chains yerine options gönderin. En fazla 16 öğe; token sembol veya sözleşme adresidir.

"options": [
  { "chain": "bsc", "token": "USDT", "amount": "25.00" },
  { "chain": "bsc", "token": "USDC", "amount": "25.00" }
]

Yanıt

201 ve ödeme nesnesini döndürür. checkout_url adresini kullanıcıya açın.

{
  "id": "pi_7Gm4Rk2Wp9Ls1Qv8Bd3Zt6",
  "object": "payment_intent",
  "status": "pending",
  "livemode": true,
  "customer": "user_42",
  "checkout_url": "https://pay.kokiwa.com/p/pi_7Gm4Rk2Wp9Ls1Qv8Bd3Zt6",
  "metadata": { "order_id": "10086" },
  "success_url": "https://your-shop.com/orders/10086",
  "cancel_url": null,
  "created_at": "2026-11-02T08:30:00Z",
  "expires_at": "2026-11-02T09:00:00Z",
  "paid_at": null,
  "paid_option": null,
  "options": [
    {
      "id": "pio_5Hq2Tz8rLw0aVb3Kc9XyN1",
      "chain": "bsc",
      "token": { "symbol": "USDT", "address": "0x55d3…7955", "decimals": 18 },
      "amount": "25.00",
      "received": "0.00",
      "deposit_address": "0x8b1F…c04E"
    },
    {
      "id": "pio_2Mn7Xc4bQe6uJs1Ga8RvK3",
      "chain": "base",
      "token": { "symbol": "USDT", "address": "0xfde4…9bb2", "decimals": 6 },
      "amount": "25.00",
      "received": "0.00",
      "deposit_address": null
    }
  ],
  "deposits": []
}
AlanAçıklama
optionsKullanıcının seçebileceği öğeler: her öğe bir zincirde bir tokendır.
options[].receivedBu öğe için şimdiye kadar alınan tutar.
options[].deposit_addressBu ödemeye özel transfer adresi; kendi sayfanızda da gösterebilirsiniz. Bu yöntem yoksa null olur (BNB Chain dışı zincirler veya çok küçük tutar).
paid_optionKullanıcının gerçekten ödediği options[].id.
depositsBu ödemeye yansıyan tüm yatırmalar, en eskiden başlayarak. Bkz. yatırma nesnesi.
livemodeAna ağda true, test ağında false.

Ödemeyi sorgula

GET/v1/payment_intents/{id}

Ödeme nesnesini döndürür. Mutabakat için veya webhook gelmediğinde durumu kontrol etmek için kullanın.

Ödeme durumu

statusAçıklama
pendingÖdeme bekleniyor.
partially_paidÖzel adrese yapılan transferler eksik: amount − received kaldı. Göndermeyin; kullanıcı kalanı ödeyince paid olur.
paidTamamı ödendi, gönderilebilir. Fazla ödeme de received içinde sayılır ve kokiwa geri göndermez.
expiredÖdenmeden süresi doldu.
paid_lateSüre dolduktan sonra özel adrese para geldi. Para sizde; göndermeye veya iade etmeye siz karar verin.

Yatırma adresleri

Müşterinin yatırma adresini al

POST/v1/deposit_addresses
ParametreAçıklama
customer zorunluSisteminizdeki kullanıcı kimliği, kurallar ödemelerdeki gibidir. İlk kullanımda oluşturulur.
chainŞimdilik yalnızca bsc, varsayılan da budur.
{
  "object": "deposit_address",
  "customer": "user_42",
  "chain": "bsc",
  "address": "0x3c9A…71d2",
  "tokens": [
    { "symbol": "USDT", "address": "0x55d3…7955", "decimals": 18, "min_settle_amount": "5.00" }
  ]
}

Aynı kullanıcı her zaman aynı adresi alır, uzun süre gösterebilirsiniz. Yalnızca tokens içindeki tokenlar yansıtılır.

Her transfer deposit.confirmed gönderir. min_settle_amount altındaki transferler de held durumuyla yansıtılır; adreste asgari tutar birikince hepsi birlikte alım adresinize toplanır ve tek sabit ücret alınır.

Yatırmalar

Yatırma (deposit), bir ödemeden veya yatırma adresinden gelen, yansıtılmış bir zincir içi ödemedir. Bir ödemenin birden çok yatırması olabilir.

{
  "id": "dep_9Kx2Pa6Wn3Ty8Lq5Rb1Ms4",
  "object": "deposit",
  "status": "settled",
  "method": "wallet",
  "chain": "bsc",
  "customer": "user_42",
  "payment_intent": "pi_7Gm4Rk2Wp9Ls1Qv8Bd3Zt6",
  "token": { "symbol": "USDT", "address": "0x55d3…7955", "decimals": 18 },
  "amount": "25.00",
  "fee": "0.0875",
  "net": "24.9125",
  "usd_value": "25.00",
  "confirmed_at": "2026-11-02T08:41:07Z",
  "transaction": {
    "hash": "0x4e7a…91c3",
    "log_index": 212,
    "block_number": 44718235,
    "block_time": "2026-11-02T08:40:58Z",
    "from": "0x1f9C…a2B0",
    "to": "0x7d3E…09f1",
    "raw_amount": "25000000000000000000"
  },
  "settlement": {
    "tx_hash": "0x4e7a…91c3",
    "by": "payment",
    "settled_at": "2026-11-02T08:40:58Z"
  }
}
AlanAçıklama
methodwallet: cüzdanla ödendi. deposit_address: adrese transfer edildi.
customerGönderdiğiniz kullanıcı kimliği veya null.
payment_intentAit olduğu ödeme; yatırma adreslerinde null.
amount、fee、netKullanıcının ödediği, ücret ve size kalan. held iken fee 0'dır ve toplamada belirlenir.
usd_valueamount tutarının kokiwa'nın belirlediği token fiyatıyla dolar karşılığı.
transactionKullanıcının zincir içi ödemesi; blok gezgininde doğrulayabilirsiniz. Bir işlemde birden çok transfer varsa hash + log_index birini belirler. from her zaman kullanıcının cüzdanı değildir: borsa çekiminde borsanın adresidir. raw_amount, transferin tokenın en küçük birimindeki ham zincir değeridir ve yalnızca blok gezgininde karşılaştırmak içindir.
settlementAlım adresinize ulaşan işlem; mutabakata kadar null. by değeri payment (ödemenin kendisiyle), kokiwa (kokiwa topladı) veya owner (kendi cüzdanınızla geri aldınız, ücretsiz) olur. Birlikte toplanan yatırmaların tx_hash değeri aynıdır.
statusAçıklama
confirmedZincirde onaylandı, alım adresinize toplanmayı bekliyor. Kullanıcıya yansıtabilirsiniz.
heldZincirde onaylandı, toplanmak için henüz çok küçük. Kullanıcıya yansıtabilirsiniz.
settledAlım adresinize ulaştı.

Bir yatırımı sorgula

GET/v1/deposits/{id}

Yatırımları listele

GET/v1/deposits

En yeniden eskiye.

Sorgu parametresiAçıklama
customerYalnızca bu kullanıcı.
tx_hashÖdeme veya mutabakat işleminin hash'i ile bulur.
limitSayfa boyutu, 1-100. Varsayılan 20.
starting_afterÖnceki sayfanın son öğesinin id değeri.
curl "https://api.kokiwa.com/v1/deposits?tx_hash=0x4e7a…91c3" \
  -H "Authorization: Bearer $KOKIWA_KEY"

{ "object": "list", "data": [ { "id": "dep_9Kx2…", "object": "deposit", ... } ], "has_more": false }

Zincirler ve tokenlar

kokiwa aşağıdaki zincirleri ve para birimlerini destekler. chains ve options[].chain için chain sütununu, currency için para birimi sütununu kullanın.

chainBlokzincirPara birimleriÖdeme yöntemleri
bscBNB ChainUSDT, USDCwallet, deposit_address
ethereumEthereumUSDT, USDCwallet
arbitrumArbitrumUSDT, USDCwallet
baseBaseUSDT, USDCwallet
polygonPolygonUSDT, USDCwallet
optimismOptimismUSDT, USDCwallet
tonTONUSDTwallet
solanaSolanaUSDT, USDCwallet

Testnet yalnızca USDT destekler. Token tUSDT'dir, ancak currency yine USDT olur.

Bu, kullanılabilecek değerlerin tamamıdır; her projenin hepsini kabul edebileceği anlamına gelmez. Yapılandırma işletmeye göre değişir, bu yüzden kullanılabilir olanları aşağıdaki uç noktayla sorgulayın.

Projenin zincir ve token'larını sorgula

GET/v1/chains

Anahtarın projesinin geçerli ağda neleri kabul edebildiğini döndürür.

{
  "object": "list",
  "livemode": true,
  "currencies": ["USDT"],
  "data": [
    {
      "object": "chain", "chain": "bsc", "name": "BNB Smart Chain", "chain_id": 56, "testnet": false, "native": "BNB",
      "payout_registered": true, "active": true,
      "methods": { "wallet": true, "deposit_address": true },
      "tokens": [
        { "symbol": "USDT", "asset": "USDT", "address": "0x55d398326f99059fF775485246999027B3197955", "decimals": 18, "accepted": true },
        { "symbol": "USDC", "asset": "USDC", "address": "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", "decimals": 18, "accepted": false }
      ]
    }
  ]
}
AlanAçıklama
currenciesŞu anda currency olarak gönderebileceğiniz para birimleri.
data[].chainchain ve options[].chain için değer: bsc, ethereum, arbitrum, base, polygon, optimism, ton, solana.
data[].activeZincir şu anda tahsilat alabilir mi: alım adresi kayıtlı, yöntem açık ve token seçili.
data[].tokens[].assetTokenın para birimi. Aynı asset değerine sahip tokenlar zincirler arasında eşdeğerdir.
data[].tokens[].acceptedProjenin bu tokenı seçip seçmediği.

Müşteriler

İsteğe bağlı. Bir customer değeri ilk göründüğünde müşteri oluşturulur; bu uç noktalar yalnızca panelde etikete göre filtrelemek için gerekir.

Etiket ve not ayarla

PUT/v1/customers/{external_id}
ParametreAçıklama
tagsEn fazla 20 etiket, her biri 1-64 harf, rakam veya _ - . :.
metadataHerhangi bir JSON nesnesi, en fazla 50 anahtar ve 8KB.

Müşteriyi sorgula

GET/v1/customers/{external_id}

Etiketleri, notları ve deposit_addresses (zincire göre yatırma adresleri) döndürür.

Connect a wallet with WalletConnect