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ç nokta | Amaç |
|---|---|
POST /v1/payment_intents | Ödeme oluştur |
GET /v1/payment_intents/{id} | Ödemeyi getir |
POST /v1/deposit_addresses | Kullanıcının yatırma adresini al |
GET /v1/deposits | Yatırmaları listele |
GET /v1/deposits/{id} | Yatırmayı getir |
GET /v1/chains | Projenin 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 URL | https://api.kokiwa.com, ana ağ ve test ağı için aynıdır. |
| Kimlik doğrulama | Authorization: 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. |
| Tutarlar | Token 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. |
| Zaman | ISO 8601 UTC, örneğin 2026-11-02T08:30:00Z. |
| Adresler | EVM 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. |
| Idempotency | POST 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" }
}
}| HTTP | code | Anlamı |
|---|---|---|
| 400 | invalid_* | Geçersiz parametre; message alanı belirtir. |
| 400 | chain_not_enabled | Projenin bu zincirde etkin alım adresi yok veya tahsilat kapalı. |
| 400 | chain_not_available | Bu zincir şu anda tahsilat almıyor. |
| 400 | chain_not_supported | Bu zincirde yatırma adresi yok. |
| 400 | token_not_enabled | Proje bu tokenı seçmemiş. |
| 400 | currency_not_available | Proje bu para birimini hiçbir zincirde kabul edemiyor. |
| 400 | deposits_disabled | Proje yatırma adreslerini kapatmış. |
| 400 | amount_below_minimum | Asgari tutarın altında; asgari tutar details.min_amount alanındadır. |
| 401 | unauthorized | API anahtarı eksik, geçersiz veya iptal edilmiş. |
| 403 | project_disabled | Proje devre dışı. |
| 404 | not_found | Kaynak yok veya başka bir projeye ait. |
| 409 | request_in_progress | Aynı Idempotency-Key ile bir istek hâlâ işleniyor. Biraz sonra yeniden deneyin. |
| 422 | idempotency_key_reused | Aynı Idempotency-Key farklı bir istekte kullanıldı. |
| 500 | internal_error | Sunucu 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| Parametre | Açıklama |
|---|---|
currency zorunlu | Para birimi, örneğin USDT. Bkz. GET /v1/chains içindeki currencies. |
amount zorunlu | En fazla 6 ondalıklı token tutarı, örneğin "25.00". |
chains | Yalnızca bu zincirlerde kabul et, örneğin ["bsc", "base"]. Varsayılan olarak projenin bu para birimini kabul ettiği tüm zincirler. |
customer | Sisteminizdeki kullanıcı kimliği: 1-128 harf, rakam veya _ - . : @. |
expires_in | Saniye cinsinden geçerlilik, 60 ile 604800 (7 gün) arası. Varsayılan 1800 (30 dakika). |
metadata | Herhangi 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_url | Kullanı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": []
}| Alan | Açıklama |
|---|---|
options | Kullanıcının seçebileceği öğeler: her öğe bir zincirde bir tokendır. |
options[].received | Bu öğe için şimdiye kadar alınan tutar. |
options[].deposit_address | Bu ö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_option | Kullanıcının gerçekten ödediği options[].id. |
deposits | Bu ödemeye yansıyan tüm yatırmalar, en eskiden başlayarak. Bkz. yatırma nesnesi. |
livemode | Ana 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
| status | Açıklama |
|---|---|
pending | Ödeme bekleniyor. |
partially_paid | Özel adrese yapılan transferler eksik: amount − received kaldı. Göndermeyin; kullanıcı kalanı ödeyince paid olur. |
paid | Tamamı ödendi, gönderilebilir. Fazla ödeme de received içinde sayılır ve kokiwa geri göndermez. |
expired | Ödenmeden süresi doldu. |
paid_late | Sü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| Parametre | Açıklama |
|---|---|
customer zorunlu | Sisteminizdeki 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"
}
}| Alan | Açıklama |
|---|---|
method | wallet: cüzdanla ödendi. deposit_address: adrese transfer edildi. |
customer | Gönderdiğiniz kullanıcı kimliği veya null. |
payment_intent | Ait olduğu ödeme; yatırma adreslerinde null. |
amount、fee、net | Kullanıcının ödediği, ücret ve size kalan. held iken fee 0'dır ve toplamada belirlenir. |
usd_value | amount tutarının kokiwa'nın belirlediği token fiyatıyla dolar karşılığı. |
transaction | Kullanı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. |
settlement | Alı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. |
| status | Açıklama |
|---|---|
confirmed | Zincirde onaylandı, alım adresinize toplanmayı bekliyor. Kullanıcıya yansıtabilirsiniz. |
held | Zincirde onaylandı, toplanmak için henüz çok küçük. Kullanıcıya yansıtabilirsiniz. |
settled | Alım adresinize ulaştı. |
Bir yatırımı sorgula
GET/v1/deposits/{id}Yatırımları listele
GET/v1/depositsEn yeniden eskiye.
| Sorgu parametresi | Açıklama |
|---|---|
customer | Yalnızca bu kullanıcı. |
tx_hash | Ödeme veya mutabakat işleminin hash'i ile bulur. |
limit | Sayfa 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.
chain | Blokzincir | Para birimleri | Ödeme yöntemleri |
|---|---|---|---|
bsc | BNB Chain | USDT, USDC | wallet, deposit_address |
ethereum | Ethereum | USDT, USDC | wallet |
arbitrum | Arbitrum | USDT, USDC | wallet |
base | Base | USDT, USDC | wallet |
polygon | Polygon | USDT, USDC | wallet |
optimism | Optimism | USDT, USDC | wallet |
ton | TON | USDT | wallet |
solana | Solana | USDT, USDC | wallet |
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/chainsAnahtarı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 }
]
}
]
}| Alan | Açıklama |
|---|---|
currencies | Şu anda currency olarak gönderebileceğiniz para birimleri. |
data[].chain | chain ve options[].chain için değer: bsc, ethereum, arbitrum, base, polygon, optimism, ton, solana. |
data[].active | Zincir şu anda tahsilat alabilir mi: alım adresi kayıtlı, yöntem açık ve token seçili. |
data[].tokens[].asset | Tokenın para birimi. Aynı asset değerine sahip tokenlar zincirler arasında eşdeğerdir. |
data[].tokens[].accepted | Projenin 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}| Parametre | Açıklama |
|---|---|
tags | En fazla 20 etiket, her biri 1-64 harf, rakam veya _ - . :. |
metadata | Herhangi 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.