GELİŞTİRİCİ BELGELERİ
API belgeleri
Faturaları, ödeme sayfasını ve ödeme bildirimlerini entegre et.
Arama sonuçları
Sonuç yok. Uç nokta, alan veya rehber adı dene.
Hızlı başlangıç
İlk faturanı oluştur.
- Mağaza hazırla
Ödeme yöntemlerini etkinleştir, sağlayıcıları yapılandır ve proje cüzdanlarını yedekle.
- API kimlik bilgisi oluştur
Konsolunda Ayarlar → API erişimi bölümünde okuma/yazma seç ve projeyi ata.
- İsteği gönder
API sunucunu kullan ve proje ve mağaza kimliklerini kopyala. Ondalık tutarları dize olarak gönder.
- Ödeme sayfasını aç
Şuraya yönlendir:
links.checkoutyanıttaki değerle. Siparişi yerine getirmeden önce ödemenin tamamlandığını doğrula.
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new invoice.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/invoices" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: order-1042-attempt-1' \
--header 'Content-Type: application/json' \
--data-raw '{
"amount": "49.90",
"currency": "USD",
"order_id": "order-1042",
"exchange_rate_spread_percent": "0.5"
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new invoice.
const body = `{
"amount": "49.90",
"currency": "USD",
"order_id": "order-1042",
"exchange_rate_spread_percent": "0.5"
}`;
const response = await fetch("https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/invoices", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "order-1042-attempt-1",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new invoice.
$body = <<<'JSON'
{
"amount": "49.90",
"currency": "USD",
"order_id": "order-1042",
"exchange_rate_spread_percent": "0.5"
}
JSON;
$ch = curl_init("https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/invoices");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: order-1042-attempt-1", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new invoice.
headers = {
"Idempotency-Key": "order-1042-attempt-1",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"amount": "49.90",
"currency": "USD",
"order_id": "order-1042",
"exchange_rate_spread_percent": "0.5"
}""".encode("utf-8")
request = Request("https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/invoices",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Örnekler yer tutucu kullanır ve bu sayfadan istek göndermez. Tüm fatura alanlarını ve yanıt biçimini gör →
Proje ve mağaza kimlikleri
YOUR_PROJECT_ID ve YOUR_STORE_ID nerede bulunur.
Proje veya mağaza adlarını ya da okunabilir tanımlayıcılarını değil, konsolundaki UUID'leri kullan.
| Yer tutucu | Nerede bulunur | Kullanım amacı |
|---|---|---|
| YOUR_PROJECT_ID | Proje → Ayarlar → API kimlikleri → Proje API kimliği → Kopyala. Mağazanın Temel sekmesinde de gösterilir. | Proje ve mağaza düzeyindeki istekler. |
| YOUR_STORE_ID | Proje → Mağazalar → bir mağaza seç → Temel → API kimlikleri → Mağaza API kimliği → Kopyala. | Fatura oluşturma ve mağaza ödeme yöntemi istekleri. |
- Varsayılan mağaza için bile fatura oluşturmak her iki kimliği gerektirir. Mağaza o projeye ait olmalı ve API kimlik bilgisinin projeye erişimi bulunmalıdır.
- Fatura oluşturma, listeleme, ayrıntı ve ödeme sayfası invoice_id döndürür: IPN/webhook'larda gönderilen aynı UUID. Fatura yollarında dahili id veya order_id yerine bunu kullan. Merchant 4.0.0'dan itibaren eski public_id yanıt alanı kaldırılmıştır; yükseltmeden önce entegrasyonlarını güncelle.
- REST API proje/mağaza listeleme rotaları sağlamaz. Kimlikleri konsoldan kopyala veya merchant 5.0.0+'da kapsamı sınırlandırılmış list_projects ve list_stores MCP araçlarını kullan.
- Mağaza → Temel → Mağaza alan adları etkin satıcı, ödeme ve API ana makine adlarını seçer. Döndürülen ödeme bağlantıları ve yeni geri çağrı bağlantıları önce o mağazayı, sonra varsayılan mağazayı, ardından sistem varsayılanlarını tercih eder. Kullanımdan kaldırılmış veya etkinleştirilmemiş adlar asla seçilmez. SDK'nı tercih edilen API ana makine adıyla yapılandır; tercihi değiştirmek diğer etkin takma adları yönlendirmez.
Kimlik doğrulama ve kapsam
Kimlik bilgilerini sunucunda tut ve yalnızca gereken erişimi ver.
| Varsayılan ana makine | Amaç |
|---|---|
| merchant.example.com | Satıcı konsolu ve Ayarlar |
| pay.example.com | Müşteri ödeme sayfası |
| api.example.com | Satıcı API istekleri |
Değiştir: example.com kendi alan adınla. Mevcut kurulumlar yapılandırılmış adlarını korur; takma adları Ayarlar → Sistem bölümünde yönet.
Authorization: Bearer YOUR_MERCHANT_API_TOKEN| Ayar | Nasıl çalışır |
|---|---|
| Erişim düzeyi | Salt okunur kimlik bilgileri listeleyebilir ve getirebilir. Okuma/yazma kimlik bilgileri ayrıca fatura oluşturabilir ve belgelenmiş varlık politikalarını güncelleyebilir. |
| Projeler | Kimlik bilgisinin erişebileceği projeleri ata. Mağaza ve fatura kimlikleri atanmış bir projeye ait olmalıdır. |
| IP kısıtlamaları | İstersen Ayarlar → API erişimi bölümünde belirli herkese açık IPv4 veya IPv6 çıkış adreslerine izin ver. |
| Kimlik bilgilerini saklama | Token'ları arka uç yapılandırmanda tut. Bearer kimlik bilgisini asla tarayıcıya veya ödeme bağlantısına ekleme. |
Herkese açık ödeme sayfası rotaları faturanın herkese açık kimliğini kullanır ve yalnızca ödeme sayfasında güvenle gösterilebilen verileri sunar. Konsol oturumları ve yönetim kontrolleri satıcı API kimlik bilgilerinden ayrıdır.
Varlıklar ve cüzdanlar
Ödeme yöntemlerini her mağaza için bağımsız seç.
- Oku: proje ödeme varlıkları ve kullanıma hazır olup olmadıkları.
- Yerel zinciri etkinleştir, cüzdanını ve sağlayıcılarını yapılandır.
- Göz at: token adayları ve sözleşmeyi veya mint'i doğrula token'ı etkinleştirmeden önce.
- Mağazanın sıralı ödeme yöntemlerini seç. Yeni faturalar kullanıma hazır seçimlerini kullanır.
Token'lar yerel zincirlerinin cüzdanını paylaşır. Cüzdan bakiyeleri tam atomik tutarları ve bilgi amaçlı itibari para değerlerini döndürür. Hangi yöntemlerin ödeme alabileceğini belirlemek için döndürülen hazırlık alanlarını kullan.
Doğrulanmış ERC-20 token'ları desteklenen EVM ağlarını; doğrulanmış SPL token'ları Solana'yı kullanır. Yerel ödeme yöntemleri entegre 30 ağda kullanılabilir. Monero, projeye bağlı harici ve yalnızca görüntüleme yetkili cüzdan bağlantısı kullanır.
Ödeme alma API'leri ve yerel coin/token kapsamı
| Ödeme altyapısı | Destek | Kanıt | Gereksinimler |
|---|---|---|---|
| Yerel ödeme altyapıları | destekleniyor | İşlem taramalı | BTC, SOL, ETH (Ethereum/Base/Arbitrum/OP), BNB, HYPE, AVAX ve POL; Bitcoin çıktıları, kanonik EVM işlemleri/makbuzları ve ayrıştırılmış Solana transferleri fatura kanıtı sağlar. |
| ERC-20 token ödeme altyapıları | destekleniyor | İşlem taramalı | Ethereum, Base, BNB Chain, HyperEVM, Avalanche, Polygon, Arbitrum ve Optimism zincir üstü doğrulama gerektirir; indekslenmiş Transfer günlükleri ödemeyi faturaya bağlar. |
| SPL token ödeme altyapıları | destekleniyor | İşlem taramalı | Solana adayları mainnet ve mint doğrulaması gerektirir; ayrıştırılmış işlemlerdeki tam token bakiyesi farkları ödemeyi faturaya bağlar. |
| Ek UTXO yerel ödeme altyapıları | destekleniyor | İşlem taramalı | BCH/LTC/DOGE Esplora kullanır; BCH/DOGE ayrıca Bitcore, LTC/DOGE/DASH BlockCypher, Dash Insight ve şeffaf ZEC zcash-explorer kabul eder. Hepsi eksiksiz saklanan Core uyumlu node-rpc bloklarını da kabul eder. Ham mod mempool tespiti değil, 1–48 onay gerektirir. Korumalı Zcash desteklenmez. |
| İndekslenmiş hesap tabanlı yerel ödeme altyapıları | destekleniyor | İşlem taramalı | TRON tron-indexer veya solidified node-rpc; XRP xrpl-jsonrpc; Stellar stellar-horizon veya saklanmış Stellar node-rpc defterleri; Cosmos Hub cometbft-jsonrpc; Algorand algorand-indexer veya algod node-rpc kullanır; Hedera EVM rölesi değil, hedera-mirror gerektirir. |
| Yerel defter ödeme altyapıları | destekleniyor | İşlem taramalı | Aptos aptos-rest; Sui sui-graphql; NEAR near-jsonrpc; Kaspa kaspa-rest kullanır. Polkadot Asset Hub substrate-rest veya meta verileri anlayan kesinleşmiş node-rpc kabul eder; Tezos tezos-tzkt veya tam Octez node-rpc işlemlerini kabul eder. Yalnızca yerel tahsilatlar; eski faturalar için arşiv saklama gerekir. |
| Cardano ve TON yerel ödeme altyapıları | destekleniyor | İşlem taramalı | Cardano cardano-koios, TON toncenter-v3 gerektirir. XRP tag'leri, Stellar memo kimlikleri ve TON fatura açıklamaları destination_tag olarak döndürülür ve aynen gönderilmelidir. |
| Ödeme tamamlanma bütünlüğü | destekleniyor | Bağımsız doğrulama | Varsayılan olarak nihai tamamlanma, iki bağımsız sağlayıcının tam işlem/olay, tutar, kanonik blok veya slot ve kesinlik üzerinde anlaşmasını gerektirir. Ham ve paylaşılan EVM aralıkları tam kapsamı da doğrular. Yönetici bir zincir için açıkça tek güvenilir sağlayıcı seçebilir; bu, kimlik, eksiksizlik veya kesinlik kontrollerini değil, bağımsız çapraz kontrolü kaldırır. |
| Monero yerel ödeme altyapısı | destekleniyor | Projeye bağlı, yalnızca görüntüleme yetkili cüzdan RPC'si | HTTPS yöntem izin listeli geçit arkasında, yalnızca bu işe ayrılmış harici bir salt izleme cüzdan-RPC'si account-0 alt adresleri oluşturur. Yapılandırılmış mainnet daemon eşiği (varsayılan 2 bağımsız kaynak, isteğe bağlı 1) ödeme tamamlanma kanıtı sağlar. Yerel --restricted-rpc, create_address ile uyumsuzdur; cüzdan yedeği ve harcama anahtarı bulunmadığı operatör tarafından açıkça beyan edilir; Wholly Crypto'ya hiçbir anahtar verisi gönderilmez. |
Borsa bakiyeleri ve varlık başına cüzdan veya borsa aktarım seçenekleri herkese açık v1 API'de değil, konsolda bulunur. Borsa kurulumuna bak.
Fatura yaşam döngüsü
Ödeme kanıtı, tamamlanma ve siparişin yerine getirilmesi.
| Durum | Anlamı |
|---|---|
| new | Ödeme bekleniyor |
| processing | Ödeme görüldü; kabul edilen tutar veya kesinleşme bekleniyor |
| settled | Faturanın ödeme tamamlama politikasına göre veya elle kabul edildi |
| expired | Son tarih geçti; geç ödeme izlemesi devam edebilir |
| invalid | Ödeme otomatik kabul edilemiyor |
| cancelled | İptal edildi; yalnızca açık mutabakat işlemi yeniden açabilir |
amount_status kayıtları none, partial, paid veya overpaid. timing_status zamanında ve geç ödemeleri ayırt eder. Mağaza kuralları gereken onayları ve kabul edilen eksik ödeme toleransını belirler.
Faturanın şu alanını kullan: invoice_id şununla birlikte: fatura ayrıntısı rotası. Ödeme sayfası yönlendirmesi tek başına ödemenin tamamlandığının kanıtı değildir. İstisnaları şu yoldan incele: mutabakat.
Güvenli yeniden denemeler
Fatura oluşturmak şunu gerektirir: Idempotency-Key. Zaman aşımından sonra aynı kimlik bilgisi, anahtar ve birebir aynı istek gövdesiyle yeniden dene. Yeni anahtarı yalnızca yeni fatura için kullan.
EVM ödeme taraması
Paylaşılan yerel blok ve ERC-20 keşfi, yeni faturaları eski geçmişi yakalama işlerinden ayrı gruplar. Her fatura kalıcı geçmiş imlecini korur. Token sorguları istek başına en fazla 100 blok kullanır ve daha sıkı sağlayıcı sınırlarına göre küçülür. Varsayılan olarak her aralığı iki bağımsız sağlayıcı doğrular. Ayarlar → Zincir bağlantıları → Ayrıntılar bölümünde bir zincir, bağımsız çapraz kontrol olmadan tek güvenilir kaynağa geçirilebilir; kanonik işlem, tutar ve onay kontrolleri korunur. Bağlantı ayrıntıları tarayıcı gecikmelerini, geçmiş kısıtlamalarını ve kota bekleme sürelerini temel düğüm sağlığından ayırır. Herkese açık RPC kapasitesi garanti edilmez.
IPN ve webhook'lar
Ödeme olaylarını al ve doğrula.
IPN, üretilen her fatura olayını faturanın geçerli ipn_url adresinde alır. Webhook'lar yalnızca her etkin mağaza uç noktası için seçilen olayları alır. İkisi de aynı JSON anlık görüntüsünü POST ile gönderir; bağımsız oldukları için ikisini de etkinleştirmek uygulamana iki kez bildirim gönderebilir.
Ayarlama: ipn_url fatura oluştururken veya mağaza varsayılanını devral. IPN şu sırrı kullanır: Mağaza → IPN sırrı; her Mağaza → Webhook'lar uç noktasının kendi sırrı vardır. Hiçbiri API anahtarın değildir.
Siparişi ne zaman yerine getirmeliyim?
Olay tabanlı işleme için sipariş kontrolünü event_type = invoice.settled ile status = settled birlikte tetiklesin. Güncel faturayı doğrula ve her siparişi yalnızca bir kez yerine getir.
status, olayın oluşturulduğu andaki fatura durumudur. event_type ne olduğunu bildirir. payment.received, processing veya settled taşıyabilir; ikinci bir ödeme anlamına gelmez ve bağımsız sipariş yerine getirme sinyali değildir.
Hangi olaylar ve durumlar gönderilir?
| Ayarlar/geçmişteki olay | Gövde durumu | Anlamı |
|---|---|---|
| invoice.created | new | Fatura oluşturuldu ve ödeme bekliyor. Kontrollü yeniden açma faturayı new durumuna döndürdüğünde de kullanılır. |
| payment.received | Resulting invoice status | Ödeme kaydedildi veya alınan tutar arttı. Genellikle processing veya settled; bu olay tek başına ödeme tamamlanma kanıtı değildir. |
| invoice.processing | processing | Ödeme tespit edildi, ancak kabul edilen tutar veya gereken kesinlik henüz sağlanmadı. Kısmi ödemeler dahildir. |
| invoice.settled | settled | Ödeme tamamlama politikası karşılandı veya elle kabul edildi. Siparişi yerine getirmeden önce resolution alanını ve siparişini kontrol et. |
| invoice.expired | expired | Ödeme son tarihi geçti. İzleme sürerken geç ödeme durumu yine değiştirebilir. |
| invoice.invalid | invalid | Otomatik kabul edilemiyor, ödeme kanıtı kayboldu veya satıcı reddetti. Faturayı incele. |
| invoice.cancelled | cancelled | Fatura iptal edildi. Siparişi yerine getirme; iptal, zincir üstü ödemeyi iade etmez. |
Ethereum ve Solana neden farklı olay akışları gönderebilir
Onaylar daha sonra gelir (Ethereum örneği)
| Sıra | event_type | status |
|---|---|---|
| 1 | invoice.created | new |
| 2 | payment.received | processing |
| 2 | invoice.processing | processing |
| 3 | invoice.settled | settled |
Tespit edildiğinde zaten kesinleşmiştir (Solana örneği)
| Sıra | event_type | status |
|---|---|---|
| 1 | invoice.created | new |
| 2 | payment.received | settled |
| 2 | invoice.settled | settled |
Bunlar olay oluşumunu gösterir; teslim sırası garanti edilmez. Tespit zamanlamasına ve ödeme tamamlama politikasına bağlı olarak iki akış da başka zincirlerde görülebilir. settled öncesinde processing olayı şartı koyma.
Bir kez yerine getir: alıcı örneği ve yinelenme koruması
| Yaklaşım | Nasıl ele alınır |
|---|---|
| Olay tabanlı alıcı | Ayrı olayları imzalı event_id ile sakla, ardından status = settled olan invoice.settled olayını seç. Aynı sequence değerindeki payment.received önce geldi diye bu olayı atma. |
| SDK sipariş durumu gelen kutusu | Sunulan PHP, Python ve Node alıcı örnekleri proje + invoice_id + sequence değerlerine göre birleştirir. Kaydedilen durumu event_type değerinden bağımsız işle, güncel faturayı getir ve settled ise bir kez yerine getir. Bu birleştirmeden sonra yalnızca invoice.settled filtresi ekleme. |
Yeniden deneme event_id ve ilk gövdeyi korur. Farklı olaylar aynı sequence değerini paylaşabilir, ancak event_id değerleri farklıdır. Olay tabanlı işlemede teslimleri imzalı event_id ile tekilleştir; siparişin yerine getirilmesini ayrıca yapılandırılmış kurulum/proje + invoice_id ve siparişine göre koru. Sonradan yeniden tamamlanma siparişe ikinci kez alacak kaydetmemelidir.
HTTP receiver:
Verify raw-body signature, timestamp and configured project/store scope.
Save to a durable inbox; deduplicate the signed event_id.
Return HTTP 2xx only after persistence succeeds.
Event-based background worker:
Other events go to status/reconciliation handling, not fulfilment.
Continue here only for event_type = invoice.settled and status = settled.
Fetch the current invoice from your configured API origin.
Check settled status, project/store, order, amount, currency and review policy.
In one database transaction:
Lock the order and check the scoped invoice has not been fulfilled.
Credit/complete once and save the fulfilment record.
Queue any external fulfilment with the same business idempotency key.
SDK order-state worker:
Use the same current-invoice checks and fulfil-once transaction.
Do not filter event_type after collapsing events by invoice revision.Sözde koddur; doğrudan kullanılabilir alıcı değildir.
Tüm fatura durumları ve ödeme istisnaları
| Alan | Değerler | Anlamı |
|---|---|---|
| status | new, processing, settled, expired, invalid, cancelled | Olay oluşturulduğundaki fatura durumu; teslim anındaki güncel durumu olmak zorunda değildir. |
| amount_status | none, partial, paid, overpaid | Kabul edilen tolerans dahil alınan tutar. paid, onay kesinliği anlamına gelmez. |
| timing_status | on_time, late | Ödemenin fatura son tarihine yetişip yetişmediği. |
| resolution | automatic, manually_settled, manually_invalidated | Sonucu normal kuralların mı yoksa elle kabul/ret işleminin mi belirlediği. |
| requires_review | false, true | İstisna ipucu; başka bir fatura durumu veya otomatik sipariş yerine getirme/iade izni değildir. |
| Durum | İşleme |
|---|---|
| Eksik ödeme / tolerans | Otomatik kurallarda partial ödemeyi tamamlamaz. paid kabul edilen eksik tutarı içerebilir, ancak kesinlik yine gereklidir. Yalnızca tutar karşılaştırmasını değil, fatura durumunu kullan. |
| Fazla ödeme | overpaid, settled ve requires_review = true ile birlikte bulunabilir. Fazla ödeme politikanı uygula; siparişe asla iki kez alacak kaydetme veya doğrulanmamış adrese otomatik iade yapma. |
| Geç ödeme | İzleme sürerken expired daha sonra değişebilir. timing_status = late inceleme gerektiğini belirtir; iptal edilmiş siparişi otomatik yeniden açma veya gönderme. |
| Elle kabul | invoice.settled, uygun zincir üstü fon olmadan resolution = manually_settled taşıyabilir. Entegrasyonunun bu istisnai kabulü tanıyıp tanımayacağına karar ver; ödeme özeti alanları null olabilir. |
| Zincir yeniden yapılanması / geçersiz kılma | Yeni revizyon önceki ödeme kanıtını geçersiz kılabilir. Güncel durumu yeniden getir ve geri alma işlemini mutabakatla ele al. Sipariş bir kez tamamlanmıştı diye bunu yok sayma. |
| Sıfır onay / sıfır tutar | Sıfır onaylı tamamlanma tespit anında gerçekleşebilir ve zincir yeniden yapılanması riski taşır. Açıkça izin verilen sıfır tutarlı fatura ödeme olmadan tamamlanır. İkisi de öncesinde payment.received olayı gerektirmez. |
Siparişi yerine getirmek için amount_status = paid veya ödeme sayfası yönlendirmesi değil, status = settled kullan. Gereken onay sayısı sıfırsa tamamlanma tespit anında olabilir; bu, zincir yeniden yapılanması riski taşır.
Eksik ödeme amount_status = partial, fazla ödeme overpaid değeridir. paid, faturanın eksik ödeme toleransı dahil kabul edilen asgari tutarın geldiği anlamına gelir. Bunlar tutar durumlarıdır, fatura durumları değildir. late ayrı bir olay değil, timing_status değeridir.
Tipik akış new → processing → settled şeklindedir, ancak ara durumlar atlanabilir. Açıkça izin verilen sıfır tutarlı fatura ödeme olmadan tamamlanır ve amount_status = none olarak kalır. Elle kabul manually_settled olarak işaretlenir.
Geri çağrılar canlı durum yanıtları değil, değiştirilemez anlık görüntülerdir. Geç, sırasız veya birden fazla kez gelebilirler. Ödeme ve durum olayları aynı fatura sıra numarasını ve fatura durumu alanlarını paylaşabilir; ancak imzalı event_id ve event_type değerleri farklıdır. Onay sayıları her blok için garantili geri çağrı üretmez.
Aldığın bilgiler
{
"invoice_id": "11111111-2222-4333-8444-555555555555",
"status": "settled",
"amount_status": "paid",
"timing_status": "on_time",
"resolution": "automatic",
"sequence": 3,
"amount": "49.9",
"currency": "EUR",
"order_id": "order-1042",
"payload_version": 2,
"event_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"event_type": "invoice.settled",
"occurred_at": "2026-09-14T12:05:00Z",
"project_id": "11111111-1111-4111-8111-111111111111",
"store_id": "22222222-2222-4222-8222-222222222222",
"description": "Annual plan",
"email": "ada@example.test",
"customer": {
"firstname": "Ada",
"lastname": "Lovelace",
"countryiso2": "GB"
},
"metadata": {
"firstname": "Ada",
"lastname": "Lovelace",
"countryiso2": "GB",
"cart_id": "cart-681"
},
"created_at": "2026-09-14T12:00:00Z",
"updated_at": "2026-09-14T12:05:00Z",
"expires_at": "2026-09-14T12:15:00Z",
"monitoring_expires_at": "2026-09-21T12:15:00Z",
"settled_at": "2026-09-14T12:05:00Z",
"paid_chain": "ethereum",
"paid_asset": "USDC",
"paid_asset_amount": "58.17342",
"paid_asset_amount_received": "58.17342",
"paid_payment_method_id": "33333333-3333-4333-8333-333333333333",
"settlement_exchange_rate": {
"rate": "1.17",
"units": "asset_per_invoice_currency",
"currency": "EUR",
"symbol": "USDC",
"observed_at": "2026-09-14T12:05:00Z",
"as_of": "2026-09-14T12:04:30Z",
"pricing_provider": "kraken",
"asset_provider": "kraken",
"pricing_fetched_at": "2026-09-14T12:04:30Z",
"asset_fetched_at": "2026-09-14T12:04:30Z",
"stale": false,
"is_fixed": false,
"reference_currency": "USD",
"uses_reference_proxy": false
},
"cancelled_at": null,
"exchange_rate_spread_percent": "0.5",
"underpayment_tolerance_percent": "1",
"reason_code": "payment_confirmed",
"requires_review": false,
"links": {
"checkout": "https://pay.example.com/invoice/11111111-2222-4333-8444-555555555555",
"invoice": "https://api.example.com/v1/projects/11111111-1111-4111-8111-111111111111/invoices/11111111-2222-4333-8444-555555555555",
"payments": "https://api.example.com/v1/projects/11111111-1111-4111-8111-111111111111/invoices/11111111-2222-4333-8444-555555555555/payments"
},
"payment_info": {
"active_payment_method_id": "33333333-3333-4333-8333-333333333333",
"method_count": 1,
"methods_truncated": false,
"methods": [
{
"payment_method_id": "33333333-3333-4333-8333-333333333333",
"payment_rail": "onchain",
"chain_slug": "ethereum",
"network": "mainnet",
"caip_network_id": "eip155:1",
"asset_id": "44444444-4444-4444-8444-444444444444",
"asset_key": "eip155:1/erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"caip_asset_id": "eip155:1/erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"asset_name": "USD Coin",
"symbol": "USDC",
"asset_kind": "token",
"asset_decimals": 6,
"contract_address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"token_standard": "erc20",
"destination_address": "0x1111111111111111111111111111111111111111",
"destination_tag": null,
"status": "paid",
"amounts": {
"expected_amount": "58.17342",
"expected_amount_atomic": "58173420",
"received_amount": "58.17342",
"received_amount_atomic": "58173420",
"confirmed_amount": "58.17342",
"confirmed_amount_atomic": "58173420",
"unconfirmed_amount": "0",
"unconfirmed_amount_atomic": "0",
"minimum_payment_amount": "57.591686",
"minimum_payment_amount_atomic": "57591686",
"remaining_amount": "0",
"remaining_amount_atomic": "0",
"remaining_to_full_amount": "0",
"remaining_to_full_amount_atomic": "0",
"overpaid_amount": "0",
"overpaid_amount_atomic": "0"
},
"acceptance": {
"finality_mode": "confirmations",
"required_confirmations": 2,
"observed_confirmations": 2,
"underpayment_tolerance_percent": "1"
},
"quote": {
"effective_rate": "1.1658",
"reference_rate": "1.16",
"units": "asset_per_invoice_currency",
"currency": "EUR",
"symbol": "USDC",
"exchange_rate_spread_percent": "0.5",
"quote_expires_at": "2026-09-14T12:15:00Z",
"provenance_available": true,
"rounding": "up",
"unrounded_payment_amount": "58.17342",
"rounding_adjustment": "0",
"pricing_provider": "kraken",
"asset_provider": "kraken",
"pricing_fetched_at": "2026-09-14T11:59:30Z",
"asset_fetched_at": "2026-09-14T11:59:30Z"
},
"market_rate_at_event": {
"rate": "1.17",
"units": "asset_per_invoice_currency",
"currency": "EUR",
"symbol": "USDC",
"observed_at": "2026-09-14T12:05:00Z",
"pricing_provider": "kraken",
"asset_provider": "kraken",
"pricing_fetched_at": "2026-09-14T12:04:30Z",
"asset_fetched_at": "2026-09-14T12:04:30Z",
"as_of": "2026-09-14T12:04:30Z",
"stale": false,
"is_fixed": false,
"reference_currency": "USD",
"uses_reference_proxy": false
},
"payment_count": 1,
"payments_truncated": false,
"payments": [
{
"payment_id": "55555555-5555-4555-8555-555555555555",
"payment_method_id": "33333333-3333-4333-8333-333333333333",
"transaction_id": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"payment_hash": null,
"event_index": 0,
"payment_rail": "onchain",
"chain_slug": "ethereum",
"network": "mainnet",
"asset_id": "44444444-4444-4444-8444-444444444444",
"asset_key": "eip155:1/erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"caip_asset_id": "eip155:1/erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"symbol": "USDC",
"asset_decimals": 6,
"amount": "58.17342",
"amount_atomic": "58173420",
"status": "final",
"counts_towards_received": true,
"confirmations": 2,
"block_height": 26000000,
"observed_at": "2026-09-14T12:04:30Z",
"chain_time": "2026-09-14T12:04:20Z",
"finalized_at": "2026-09-14T12:05:00Z",
"explorer_name": "Etherscan",
"explorer_url": "https://etherscan.io/tx/0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
],
"links": {
"payments": "https://api.example.com/v1/projects/11111111-1111-4111-8111-111111111111/invoices/11111111-2222-4333-8444-555555555555/payments?payment_method_id=33333333-3333-4333-8333-333333333333"
}
}
]
}
}amount faturanın ilk toplamıdır. payment_info gözlenen kripto transferlerini, hâlâ eksik tutarları ve kilitli kurları açıklar. Sürüm 2 ayrıca olay adını, olay kimliğini ve proje/mağaza kapsamını imzalar.
Tüm geri çağrı alanları ve ek fatura verileri
| Alan | Tür | Anlamı |
|---|---|---|
| invoice_id | UUID | Kimlik doğrulamalı fatura ayrıntısı rotasında kullanılan herkese açık fatura UUID'si |
| status | string | Anlık görüntüdeki fatura durumu: new, processing, settled, expired, invalid, cancelled |
| amount_status | string | none, partial, paid veya overpaid; paid kabul edilen eksik ödeme toleransını içerir, onay kesinliğini içermez |
| timing_status | string | on_time veya late |
| resolution | string | automatic, manually_settled veya manually_invalidated |
| sequence | integer | Artan fatura revizyonu; farklı olaylar aynı revizyonu paylaşabilir. Tamsayı hassasiyetini kaybetmeden karşılaştır |
| amount | decimal string | Alınan kripto tutarı değil, faturanın ilk toplamı; ondalık hassasiyeti koru |
| currency | string | amount alanının para birimi; ör. USDC ile ödenen EUR fatura için EUR |
| order_id | string | null | Satıcı sipariş referansı |
| payload_version | integer | Yeni üretilen 4.1.0+ olaylar için 2; saklanan eski olaylarda bulunmaz |
| event_id | UUID | Yeniden denemelerde ve elle tekrar teslimde değişmeyen imzalı olay kimliği |
| event_type | string | Yedi abonelik olayından biri |
| occurred_at | timestamp | Teslim zamanı değil, bu değiştirilemez olayın oluşturulma zamanı |
| project_id | UUID | Satıcı proje kapsamı; yapılandırılmış alıcıyla eşleştir |
| store_id | UUID | Satıcı mağaza kapsamı; yapılandırılmış alıcıyla eşleştir |
| description | string | null | İlk fatura açıklaması |
| string | null | Olay oluşumunda isteğe bağlı müşteri e-postası | |
| customer | object | Tanınan isteğe bağlı müşteri meta veri alanları; tahmin edilmiş veya zenginleştirilmiş kişisel veri yok |
| metadata | object | Olay oluşturulduğu andaki özgün satıcı meta verileri |
| created_at | timestamp | Fatura oluşturulma zamanı |
| updated_at | timestamp | Fatura durumu güncellenme zamanı |
| expires_at | timestamp | Fatura ödeme son tarihi |
| monitoring_expires_at | timestamp | Geç ödeme izlemesinin son tarihi |
| settled_at | timestamp | null | Ödemenin tamamlanma zamanı |
| paid_chain | string | null | 4.1.2+: ödemeyi tamamladığı kanıtlanan yöntemin zincir kısa adı; ör. ethereum; kaydedilmiş uygun tamamlanma yoksa null |
| paid_asset | string | null | 4.1.2+: yerel coin veya token sembolü; ör. BTC, ETH veya USDC; benzersiz varlık kimliği değil, görüntüleme etiketi |
| paid_asset_amount | decimal string | null | 5.0.1+: tolerans düşülmeden önce paid_asset biriminde istenen kilitli tam tutar; ödeme tamamlanırken kaydedilir |
| paid_asset_amount_received | decimal string | null | 5.0.1+: kabul edilen eksik/fazla tutarlar dahil, ödeme tamamlanırken sonuç veren yöntemle alınan geçerli toplam; sabittir, canlı bakiye değildir |
| paid_payment_method_id | UUID | null | 4.1.2+: ödemeyi tamamlayan isteğin kimliği; payment_info.methods[].payment_method_id ve onun tam ağ/sözleşmesiyle eşleşir |
| settlement_exchange_rate | object | null | 4.1.2+: açık birimler, para birimi, kaynak zaman damgaları ve kalite işaretleriyle tamamlanma anında kaydedilmiş, fiyat marjı öncesi piyasa görüntüsü; teslimde yeniden fiyatlandırılmaz |
| cancelled_at | timestamp | null | İptal zamanı |
| exchange_rate_spread_percent | decimal string | Güncel mağaza varsayılanı değil, kilitlenmiş fiyat marjı |
| underpayment_tolerance_percent | decimal string | Kilitlenmiş fatura toleransı; her yöntem ayrıca geçerli toleransını bildirir |
| reason_code | string | null | Makine tarafından okunabilir durum geçişi nedeni |
| requires_review | boolean | Ödeme istisnası ipucu; otomatik sipariş yerine getirme veya iade izni değildir |
| links | object | Olay oluşumundaki ödeme sayfası, kimlik doğrulamalı fatura ve ödemeler URL'leri. Önce Mağaza → Temel alan adı tercihleri, ardından varsayılan mağaza, sonra genel birincil adres uygulanır; yalnızca rolle eşleşen etkin alan adları kullanılır. Yeniden denemeler ilk imzalı bağlantıları korur; etkin ana makine kaydı yoksa null olur. |
| payment_info | object | Gerçekte gözlenen yöntemler, tam tutarlar, kilitli teklif, bilgi amaçlı piyasa görüntüsü ve sınırlandırılmış ödeme gözlemleri; aşağıdaki alan gruplarına bak |
Ödeme tamamlanma özeti: settlement_exchange_rate
| Alan | Tür | Anlamı |
|---|---|---|
| rate / units / currency / symbol | strings | Fiyat marjı öncesinde, bir fatura para birimi başına varlık birimi. Ondalık sayı dizesidir; ödeme tutarı veya gerçekleşmiş alım satım değildir. |
| observed_at / as_of | timestamps | Tamamlanma görüntüsünün alınma zamanı / daha eski kaynak zaman damgası. Önbellek verilerini canlı fiyat hareketi olarak değerlendirme. |
| pricing_provider / asset_provider / pricing_fetched_at / asset_fetched_at | strings / timestamps | Ödeme tamamlanırken kaydedilen itibari para ve varlık fiyat kaynakları ile alınma zamanları. |
| stale / is_fixed / uses_reference_proxy / reference_currency | booleans / string | market_rate_at_event ile aynı kalite işaretleri. Sabit proje fiyatları etiketlenir; referans para birimi USD'dir. |
| Missing snapshot or price | null | Tahmini geçmiş kur yoktur. Tamamlanmadan önce tüm özet alanları null'dur; yalnızca fiyatların eksik olması, kanıtlanmış paid_* tanımlayıcılarının kullanılabilirliğini etkilemez. |
Ödeme yöntemleri: payment_info
| Alan | Tür | Anlamı |
|---|---|---|
| active_payment_method_id | UUID | null | Sonuç veren veya seçili gözlenen yöntem. Tespitten önce veya geçersiz kılındıktan sonra null; varsayılan yöntem tahmin edilmez. |
| method_count / methods_truncated | integer / boolean | Gözlenen toplam yöntem sayısı ve gömülü yöntem listesinin eksik olup olmadığı. |
| methods[] | object[] | En fazla sekiz gözlenen yöntem; etkin yöntem önce gelir. Farklı varlıklar birlikte toplanmaz. |
| payment_method_id / payment_rail | UUID / string | Fatura ödeme isteği kimliği ve onchain veya lightning aktarım türü. |
| chain_slug / network / caip_network_id | string | Ağ kimliği. Token kimliğini her zaman ağıyla eşleştir. |
| asset_id / asset_key / caip_asset_id | UUID / string / nullable string | Doğrulanmış kayıt kimliği; semboller tek başına benzersiz değildir. |
| asset_name / symbol / asset_kind | string | Varlığın görünen adı, sembolü ve yerel coin veya token türü. |
| contract_address / token_standard | string | null | Token sözleşmesi veya mint'i ve standardı; yerel varlıklarda null. |
| asset_decimals | integer | Atomik hassasiyet; Lightning BTC için 11 kullanılır. |
| destination_address / destination_tag | string | null | Herkese açık ödeme alma adresi ve gereken memo/tag. Lightning için adres null'dur; asla özel anahtar değildir. |
| status | string | Yöntem durumu: pending, partial, paid, overpaid, expired veya invalid. paid tek başına faturanın ödemesinin tamamlandığı anlamına gelmez. |
| payment_count / payments_truncated / payments[] | integer / boolean / object[] | Toplam gözlem sayısı ve en son beş veya daha az gözlem. Her gözlem aşağıda açıklanır. |
| links.payments | HTTPS URL | null | Yapılandırılmış API köken adresinde bu yöntem için kimlik doğrulamalı, sayfalanmış geçmiş. |
Tam tutarlar: methods[].amounts
| Alan | Tür | Anlamı |
|---|---|---|
| expected_amount | decimal string | Fiyat marjı ve yukarı yuvarlama sonrasındaki kilitli tam teklif. |
| received_amount / confirmed_amount | decimal strings | Tespit edilen geçerli fonlar / bu yöntemin onay veya kesinlik politikasını karşılayan fonlar. |
| unconfirmed_amount | decimal string | max(received - confirmed, 0). Gönderilmesi gereken ek tutar değildir. |
| minimum_payment_amount | decimal string | Tolerans sonrası kabul eşiği. Tam teklifin altında olabilir. |
| remaining_amount | decimal string | max(minimum accepted - received, 0). Onay ilerlemesi değil, kabul eşiğine ulaşmak için gereken ek fon. |
| remaining_to_full_amount | decimal string | max(full quote - received, 0); tolerans dikkate alınmaz. |
| overpaid_amount | decimal string | max(received - full quote, 0). Otomatik iade yetkisi vermez. |
| Every amount's *_atomic companion | integer string | En küçük birimde tam gösterim. Ondalık veya tamsayı kütüphaneleri kullan; para için asla kayan nokta veya JavaScript Number kullanma. |
Onay politikası: methods[].acceptance
| Alan | Tür | Anlamı |
|---|---|---|
| finality_mode / required_confirmations | string / integer | Kilitlenmiş onay sayısı veya finalized politikası. Sıfır onaya satıcı politikası açıkça izin verir; ağ genelinde kesinlik anlamına gelmez. |
| observed_confirmations | integer | null | Yalnızca en yeni transferin değil, geçerli gözlemler arasındaki asgari değer. Lightning için veya geçerli gözlem yoksa null. |
| underpayment_tolerance_percent | decimal string | Geçerli yöntem toleransı. Faturanın zincir üstü toleransı sıfırdan farklı olsa bile Lightning sıfır kullanır. |
Kurlar: methods[].quote ve market_rate_at_event
| Alan | Tür | Anlamı |
|---|---|---|
| quote.effective_rate / units / currency / symbol | strings | Fiyat marjı dahil kilitlenmiş asset_per_invoice_currency kuru; para birimi ve sembol yönü açıkça belirtir. |
| quote.exchange_rate_spread_percent / quote_expires_at | decimal string / timestamp | Kilitlenmiş fiyat marjı ve teklif son tarihi. Güncel mağaza ayarlarıyla asla değiştirilmez. |
| quote.reference_rate / unrounded_payment_amount / rounding_adjustment | decimal string | null | Fiyat marjı öncesi referans, yuvarlama öncesi ödeme tutarı ve varlık birimindeki yukarı düzeltme. |
| quote.pricing_provider / asset_provider / pricing_fetched_at / asset_fetched_at | string or timestamp | null | İlk para birimi ve varlık fiyat kaynakları/zamanları. API anahtarı veya sağlayıcı kimlik bilgisi içermez. |
| quote.provenance_available / rounding | boolean / string | Kayıtlı kaynak görüntüsü olmayan eski faturalarda false; yuvarlama yukarı yönlüdür. |
| market_rate_at_event | object | null | Bu olay oluşturulduğunda önbellekte bulunan bilgi amaçlı piyasa görüntüsü. Eksik veriler null kalır; fatura tutarlarını asla değiştirmez veya ağdan veri almak için beklemez. |
| market_rate_at_event.rate / units / currency / symbol | strings | quote ile aynı açık yönde, fiyat marjı öncesi piyasa kuru. |
| market_rate_at_event.observed_at / as_of / pricing_fetched_at / asset_fetched_at | timestamps | Olay görüntüsü zamanı / iki kaynaktan eski olanın zamanı / her kaynağın zamanı. |
| market_rate_at_event.pricing_provider / asset_provider | strings | Yapılandırılmış özel token fiyatları dahil, önbellekteki para birimi ve varlık kaynakları. |
| market_rate_at_event.stale / is_fixed / uses_reference_proxy / reference_currency | booleans / string | Önbelleğin eski, token fiyatının sabit olup olmadığı veya USD referansının stablecoin vekili kullanıp kullanmadığı. Referans para birimi USD'dir. Eski veri bilgi amaçlıdır; asla güncel teklif değildir. |
Transfer kayıtları: methods[].payments[] ve GET …/payments
| Alan | Tür | Anlamı |
|---|---|---|
| payment_id / payment_method_id | UUID | Gözlem kimliği / üst ödeme isteği kimliği. Geçmişi tekilleştirmek için payment_id kullan. |
| transaction_id / payment_hash / event_index | string | null / integer | Zincir üstü hash ve transfer/günlük/çıktı indeksi ya da Lightning hash'i. Lightning'de işlem veya gezgin bağlantısı yoktur. |
| payment_rail / chain_slug / network / asset_id / asset_key / caip_asset_id / symbol / asset_decimals | strings / UUID / integer | İçeren yöntemle aynı varlık ve ağ tanımlayıcıları. |
| amount / amount_atomic | decimal / integer strings | Bu transferin tam değeri; asla itibari para dönüşümü değildir. |
| status / counts_towards_received | string / boolean | detected, confirming ve final sayılır; reorged, replaced ve invalid sayılmaz. Mutabakat için geçersiz kılınmış geçmişi koru. |
| confirmations / block_height | integer | null | Gözlemin blok verileri; Lightning için onaylar null. |
| observed_at / chain_time / finalized_at | timestamp | null | Yerelde ilk görülme zamanı, varsa güvenilir zincir zamanı ve ulaşılmışsa politikaya göre kesinleşme zamanı. |
| explorer_name / explorer_url | string | null | Desteklenen yerlerde doğrulanmış herkese açık blok gezgini referansı. |
Merchant 5.13.3, doğrulanmış dahili gas fonlama transferlerini müşteri ödeme toplamlarından, payment_info alanından, fatura ödemeleri API'sinden, iade sınırlarından ve payment.received olaylarından hariç tutar. Bunların zincir/hazine kayıtları cüzdan muhasebesi için kullanılabilir kalır. Normal transferler ve gerçek fazla ödemeler sayılmaya devam eder. Mevcut imzalı geri çağrı gövdeleri asla yeniden yazılmaz. Geçmiş bir tamamlanma müşteri fonları yerine dahili fonlamaya dayanmışsa mutabakat, reason_code internal_gas_funding_excluded ile invoice.invalid üretir; siparişi yeniden yerine getirmek yerine bunu incele.
Merchant 4.1.0, ilk dokuz alanı taşımadan veya değiştirmeden payload_version 2 ekler. Önceden kuyruğa alınmış olaylar ilk gövdelerini korur ve payload_version içermeyebilir. event_id, event_type ve proje/mağaza kimlikleri artık imzalı gövdededir; aktarım olay/teslim üst bilgileri imzasız kalır.
payment_info, sunulan tüm ödeme seçeneklerini değil, gözlenen ödemeleri açıklar. Tespitten önce active_payment_method_id null ve methods boştur. Zincir yeniden yapılanmasından etkilenen/geçersiz gözlemler, etkin yöntem null olduktan sonra da methods içinde kalabilir. Farklı varlık veya ağların tutarlarını asla bir araya toplama.
Tüm tutarlar, atomik tamsayılar, kurlar ve yüzdeler dizedir. received_amount onay bekleyen geçerli fonları içerir; confirmed_amount o yöntemin kesinlik politikasını karşılar. remaining_amount, max(minimum_payment_amount minus received_amount, 0); remaining_to_full_amount, max(expected_amount minus received_amount, 0) değeridir. Örnek: 100 USDC bekleniyor, 99 alındı ve tolerans %1 ise remaining_amount 0, remaining_to_full_amount 1 olur. Kesinlik yine gereklidir.
quote kilitlenmiş fatura hesabıdır: bir fatura para birimi başına varlık birimi. Fiyat marjı yukarı yuvarlamadan önce uygulanır. Tam ödeme karşılaştırması için expected_amount_atomic kullan; yalnızca gösterilen kur yukarı yuvarlamayı yeniden üretmeyebilir. Kayıtlı kaynak kökeni olmayan eski faturalar null kaynak/referans/yuvarlama alanları ve provenance_available false döndürür; bugünün verileri asla geçmiş teklif gibi sunulmaz.
market_rate_at_event, fiyat marjı öncesi bilgi amaçlı önbellek verisidir ve olay oluşumunda sabitlenir. Kaynak zamanlarını, eski veri ve referans vekili işaretlerini içerir; kullanılabilir önbellek çifti yoksa null olur. Hiçbir canlı kur isteği bildirimi engellemez ve bu piyasa gözlemi borçlu olunan tutarı asla değiştirmez. Sabit özel token'lar is_fixed olarak etiketlenir; DEX token'ları aynı sembollü başka token yerine projelerine özel kaynağı kullanır.
Üst düzey paid_chain, paid_asset, paid_payment_method_id ve settlement_exchange_rate (4.1.2+) alanları, ödeme tamamlandıktan sonra kanıtlanmış sonuç veren yöntemi tanımlar; seçilmiş ödeme seçeneğini veya farklı yöntemlerin toplamını değil. Tamamlanmadan önce, geçersiz kılındıktan sonra, görüntüsü alınmamış eski tamamlanmalarda veya politikaya göre kesinleşmiş uygun fon olmadan elle kabulde özet alanları null olur. Semboller görüntüleme etiketleridir: tam ağ/varlık/sözleşme kimliği için yöntem kimliğini takip et.
Merchant 5.0.1, paid_asset biriminde tam ondalık sayı dizeleri olarak paid_asset_amount ve paid_asset_amount_received ekler; payload_version 2 olarak kalır. paid_asset_amount, fiyat marjı ve yukarı yuvarlama dahil kilitli tam tekliftir; tolerans eşiği veya kalan bakiye değildir. paid_asset_amount_received, onay bekleyen fonlar ve kabul edilen eksik/fazla tutarlar dahil, sonuç veren yöntemin tamamlanma anındaki geçerli toplam tahsilatıdır. Örnek: 100 USDC teklif edildi, 99 alındı ve toleransla kabul edildi ise değerler 99 ve 99 değil, 100 ve 99 olur. İkisi de tamamlanma görüntüsüyle sabitlenir; her olay anındaki tahsilatlar için payment_info.methods[].amounts, güncel kayıtlar için ödemeler API'sini kullan. Uygun görüntü yoksa ve 5.0.1 öncesi görüntülerde null olurlar; eski kuyruk olaylarının gövdeleri değişmez. Muhasebe için tam ondalık sayı dizelerini asla kayan noktaya dönüştürme.
settlement_exchange_rate, ödeme tamamlanırken kaydedilen fiyat marjı öncesi önbellek piyasa gözlemidir; kilitlenmiş fatura teklifi veya gerçekleşmiş borsa işlemi değildir. Yapısı market_rate_at_event ile eşleşir; EUR/USDC ile 1.17 asset_per_invoice_currency, 1 EUR = 1.17 USDC demektir. Kaynak zaman damgaları ve eski/sabit/vekil işaretleri kalitesini açıklar. Eksik çift kuru null bırakır, ancak kanıtlanmış yöntemde paid_* alanları yine bulunur. Borçlu olunan tutarı asla değiştirmez veya canlı sağlayıcı çağrısı beklemez. Aynı yöntemle sonraki ödemeler, yeniden denemeler ve tekrar teslim, kaydedilmiş null kur dahil saklanan görüntünün yerini alamaz. Gerçek yeniden tamamlanma veya tamamlayan yöntemin değişmesi yeni görüntü alır; observed_at bu alımı belirtirken settled_at ilk tamamlanma zamanını koruyabilir. Eski olay gövdeleri değişmez.
Sayılar ve kısaltma işaretleriyle en fazla sekiz gözlenen yöntem ve yöntem başına son beş ödeme gözlemi dahil edilir. Yük boyutu sınırı bu dizileri daha da küçültebilir. Ödeme gözlemi tek bir transfer/günlük/UTXO çıktısıdır; mutlaka benzersiz işlem hash'i değildir. Güncel geçmişin tamamı için payment_method_id, limit ve offset ile GET /v1/projects/YOUR_PROJECT_ID/invoices/{invoice_id}/payments kullan. Fatura ayrıntısı teklif verilen her yöntemi ve quote_details alanını korur. API bağlantıları yapılandırılmış sunucunu ve kimlik bilgilerini gerektirir; bearer token'ını asla geri çağrının sağladığı rastgele URL'ye iletme.
Lightning, transaction_id yerine payment_hash kullanır; ödeme alma adresi, gezgin ve gözlenen onaylar null olur. Tam BTC tutarı 11 ondalık basamak (millisatoshi) kullanır ve geçerli toleransı sıfırdır. BOLT11 ödeme preimage'ı, cüzdan anahtarı, imzalama sırrı veya sağlayıcı kimlik bilgisi dahil edilmez. Müşteri/meta veri alanları yalnızca satıcı yanıtlarına ve imzalı geri çağrılara aittir; herkese açık ödeme sayfasına asla konmaz. Meta verilere kimlik bilgisi yazma.
Güvenle al
- Ayrıştırmadan önce birebir ham gövdeyi eşleşen sırla doğrula. Mağaza → IPN, özel ipn_url teslimleri dahil IPN sırrını sağlar. Her Mağaza → Webhook'lar uç noktasının kendi sırrı vardır. Hiçbiri API token'ın değildir; birini yenilemek diğerlerini yenilemez.
- İmzalı zaman damgasını kontrol et (SDK varsayılanı: her iki yönde beş dakika) ve varsa imzalı proje/mağaza kimliklerini alıcı yapılandırmanla eşleştir. HTTP 2xx döndürmeden önce kalıcı kuyruğa kaydet. Olay başına işlemede v2 event_id imzalıdır; üst bilgi kimlikleri tek başına tekrar oynatma koruması değildir, çünkü bu üst bilgiler imzalanmaz. Sipariş durumu gelen kutularında invoice_id ve sequence ile tekilleştir ve tüm v2 gövdesini değil, özgün fatura durumu alanlarını karşılaştır: farklı olay türleri/kimlikleri aynı revizyonu paylaşabilir.
- Bir çalışanda güncel faturayı rastgele geri çağrı bağlantısından değil, yapılandırılmış API kökeninden getir. Kayıtlı siparişi, proje/mağazayı, tutarı ve para birimini eşleştir; güncel settled durumu şartını koy ve elle kabul ile istisna politikanı uygula. Olay tekilleştirmesinden bağımsız olarak siparişi kilitle ve veritabanı işlemi içinde bir kez yerine getir.
- Eski sequence değerini asla yenisinin üzerine uygulama. Farklı olaylar revizyon paylaşabilir; revizyon düzeyinde tekilleştirmeyi yalnızca invoice.settled filtresiyle birleştirme. Yeniden açma/mutabakat durumu değiştirebilir; güncellemeleri sabit durum sıralaması değil, sequence sıralar. Siparişi yeniden yerine getirmek yerine geri almaları inceleme için kaydet.
Alıcı örnekleri: PHP · Python · Node.js / TypeScript.
İmza doğrulaması ve teslim kuralları
import { createHmac, timingSafeEqual } from "node:crypto";
export function verifyWhollySignature(rawBody, header, signingSecret, toleranceSeconds = 300) {
const match = /^t=(\d+),v1=([0-9a-f]{64})$/.exec(header || "");
if (!match) return false;
const timestamp = Number(match[1]);
if (!Number.isSafeInteger(timestamp)) return false;
const now = Math.floor(Date.now() / 1000);
if (Math.abs(now - timestamp) > toleranceSeconds) return false;
// rawBody must be the exact request Buffer, before JSON parsing.
const expected = createHmac("sha256", signingSecret)
.update(String(timestamp))
.update(".")
.update(rawBody)
.digest();
const presented = Buffer.from(match[2], "hex");
return timingSafeEqual(expected, presented);
}| Teslim kuralı | Ayrıntılar |
|---|---|
| Üst bilgiler | Wholly-Signature, Wholly-Event-Id ve Wholly-Delivery-Id; Content-Type application/json'dır. |
| İmza | <unix timestamp>.<exact raw body> üzerinde HMAC-SHA256; üst bilgi biçimi t=<timestamp>,v1=<64 lowercase hex>. |
| Başarı | Herhangi bir HTTP 2xx yanıtı. Yönlendirmeler izlenmez; 2xx dışındaki yanıtlar başarısızdır. |
| Zaman aşımları | 5 saniye bağlantı zaman aşımı ve 10 saniye toplam istek zaman aşımı. |
| Yeniden deneme takvimi | Yeniden denenebilir hatalarda en fazla 8 deneme: hemen, ardından önceki deneme bittikten sonra 10 saniye, 1 dakika, 5 dakika, 15 dakika, 1 saat, 6 saat ve 24 saat gecikmeyle. IPN otomatik yeniden dener; webhook otomatik yeniden denemesi uç nokta başına kapatılabilir. |
| Hedef güvenliği | Yalnızca herkese açık HTTPS. Teslim için DNS yeniden doğrulanır ve sabitlenir; yerel/özel/ayrılmış hedefler reddedilir. |
| Olay saklama süresi | Bildirim olay yükleri ve teslim kayıtları 90 gün tutulacak şekilde planlanır; saklanan ayrıntılar sınırlı gruplar halinde temizlenir. |
| Tekilleştirme | İmzalı invoice_id ve sequence değerlerini yapılandırılmış proje kapsamıyla kalıcı sakla. Wholly-Event-Id olayı; Wholly-Delivery-Id teslim kaydını tanımlar (yeniden denemeler aynısını kullanır; elle tekrar teslim yenisini oluşturur). İki kimlik üst bilgisi de imzalı değildir. |
| Olay adlandırması | Sürüm 2 gövdedeki event_id ve event_type alanlarını imzalar. Kuyruktaki eski olaylarda ikisi de yoktur. Farklı olay türleri aynı fatura sıra numarasını paylaşabilir; fatura durumunun mutabakatını revizyona göre yap veya ayrı olayları imzalı event_id ile tekilleştir. |
| Sırrı yenileme | Yenilemede örtüşme dönemi veya sürüm üst bilgisi yoktur; kuyruktaki, yeniden denenen ve elle yapılan teslimlerin imzaları hemen değişir. |
| Duraklatılmış teslimler | Yetersiz işlem kredisi, yeniden denemeler dahil IPN/webhook'ları duraklatır. Gelen ödemeler devam eder; kuyruğa alınmış bildirimler, yük saklama süresi içinde bakiye yüklendikten sonra devam eder. |
Yapay zekâ asistanları · MCP
Satıcı kurulumuna asistan bağla.
Merchant 5.0.0, yapılandırılmış API alan adında isteğe bağlı MCP sunucusu içerir. Paylaşılan Wholly Crypto rölesi üzerinden değil, kendi kurulumunun içinde çalışır.
- Ayarlar → API erişimi bölümünü aç. Bu işe özel kimlik bilgisi oluştur, yalnızca asistanın ihtiyaç duyduğu projeleri ata ve salt okunur erişimle başla. Operatörün barındırdığı hesapta önce operatör kurulumun MCP hizmetini açar; sen yalnızca kendi kimlik bilgilerini ve izinlerini yönetirsin.
- Yapay zekâ bağlantıları · MCP bölümünde MCP'yi etkinleştir, kimlik bilgisini seç ve MCP erişimini kaydet. Mevcut kimlik bilgileri açıkça etkinleştirilene kadar MCP erişimi kazanmaz.
- MCP sunucu URL'sini istemcinin uzak HTTP sunucusu ayarlarına kopyala. OAuth ile satıcı konsoluna giriş yap, istemci adını ve dönüş adresini incele, kimlik bilgisi seç ve onayla. Mevcut Basic Auth ve TOTP korumaların geçerliliğini korur.
- Fatura oluşturmak ayrıca okuma/yazma kimlik bilgisi, MCP politikasında Oku ve fatura oluştur seçimi, mcp:invoice:create OAuth kapsamı ve açık onay gerektirir. OAuth bağlantısı, onaydan sonra kimlik bilgisine eklenen projelere asla otomatik erişim kazanmaz.
{
"mcpServers": {
"whollycrypto": {
"url": "https://api.example.com/mcp"
}
}
}| Araç | Erişim | Amaç |
|---|---|---|
| list_projects | Oku: | Bağlantıya atanmış etkin projeler; limit/offset sayfalaması. |
| list_stores | Oku: | project_id içindeki mağazalar, kimlikler ve etkinlik durumu; limit/offset sayfalaması. |
| list_payment_methods | Oku: | project_id + store_id için yapılandırılmış zincir, token ve Lightning yöntemleri. |
| get_wallet_balances | Oku: | Güncellik/kullanılabilirlik alanlarıyla ödeme alma adresleri ve önbellekteki bakiyeler; asla cüzdan sırları değil. |
| list_invoices | Oku: | Mağaza, durum veya aramaya göre filtrelenen proje faturaları; limit/offset sayfalaması. |
| get_invoice | Oku: | project_id + invoice_id ile tam fatura ayrıntıları ve ödeme sayfası bağlantısı. |
| get_delivery_history | Oku: | Mağaza IPN/webhook durumları, denemeleri ve HTTP sonuçları. İsteğe bağlı invoice_id/kind filtreleri; sır veya geri çağrı gövdesi yok. |
| convert_amount | Oku: | from, to ve ondalık sayı dizesi amount ile önbellekteki referans dönüşümü; fatura teklifi değildir. |
| create_invoice | Açık yazma yetkisi | project_id, store_id, idempotency_key ve invoice (mevcut fatura oluşturma gövdesi). invoice.payment_methods etkin mağaza yöntemlerini filtreler; 5.4.0+ etkin olmayan/kabul edilmeyen seçimleri yok sayar ve eşleşme yoksa mağaza varsayılanlarına döner. Yalnızca zincir seçimi tüm etkin kabul edilen varlıkları seçer. Zincir kapsamlı asset_tickers, 5.3.0'dan itibaren desteklenir. Normal fatura yanıtını döndürür. |
Protokol, OAuth ve güvenlik
HTTPS üzerinden Streamable HTTP kullan. Duyurulan protokol sürümlerinden biri üzerinde anlaş ve sonraki POST isteklerine MCP-Protocol-Version ekle. Content-Type: application/json ve Accept: application/json, text/event-stream gönder. Yanıtlar sonlu JSON'dur; yeniden bağlantıda MCP oturum kimliği gerekmez.
OAuth kısa ömürlü erişim token'ları (15 dakika), tek kullanımlık S256 PKCE kodları (5 dakika) ve yenilenen refresh token'ları (bağlantı ömrü 30 gün) kullanır. Kullanılmış yenileme token'ını tekrar kullanmak bağlantıyı iptal eder. Süre dolduğunda, kimlik bilgisi yenilendiğinde, politika veya kanonik API alan adı değiştiğinde yeniden bağlan.
OAuth keşfi yalnızca MCP etkin olduğunda herkese açıktır. resource parametresi, /mcp dahil keşfin döndürdüğü kanonik URL'yle aynı olmalıdır. Dinamik kayıt desteklenir; uzak istemci kimliği meta veri belgeleri ve istemci sırları desteklenmez.
Özel Authorization üst bilgilerini destekleyen istemciler alternatif olarak MCP etkin satıcı API token'ını Bearer olarak kullanabilir. Ayrı REST izinlerini korur; MCP ile sınırlı bağlantı için OAuth'u tercih et. Kimlik bilgilerini asla sohbete, URL'lere, araç argümanlarına veya sürüm kontrolüne yapıştırma.
MCP kimlik bilgisinin dakikalık REST kotasını, tam kaynak IP kısıtlamalarını ve API sunucusu IP kısıtlamalarını paylaşır. OAuth izin listesini aşmaz. Uzak yapay zekâ istemcileri için belgelenmiş çıkış IP'lerine izin ver veya bu kısıtlamayı bilinçli olarak kapalı bırak. MCP/OAuth rotalarına web güvenlik doğrulaması veya önbellekleme uygulanmamalıdır.
HTTP hataları: 401 kimlik doğrulaması ister, 403 köken/IP/izni reddeder, 404 MCP kapalı veya sunucu yanlış demektir, 405 POST kullanmayı belirtir, 413 32 KiB gövde sınırıdır, 429 Retry-After içerir. JSON-RPC hataları error.code kullanır; araç düzeyindeki hatalar HTTP 200 olsa bile result.isError=true kullanır. Başarılı sonuçlar content ve structuredContent içerir.
Listeler varsayılan 25, en fazla 100 satırdır; offset en fazla 1000000 olabilir. Araç yanıtları 2 MiB ile sınırlıdır. Süresi dolan izinler, yetkilendirme istekleri ve istek kotası grupları otomatik temizlenir; ayarlarda en fazla 100 etkin OAuth bağlantısı gösterilir.
Devre dışı proje/mağazalar MCP üzerinden kullanılamaz. Bağlantı mağazanın etkinlik durumunu listeleyebilir; ancak ödeme yöntemlerini veya teslim geçmişini okumak ya da fatura oluşturmak etkin mağaza gerektirir. Normal konsol proje kullanıcıları MCP'yi yönetemez.
Yeni fatura için yeni idempotency_key kullan; zaman aşımından sonra aynı kimlik bilgisi, anahtar ve birebir aynı invoice nesnesiyle yeniden dene. Ondalık tutarlar, fiyat marjı, tolerans, onaylar ve ödeme sayfası görünümü REST fatura sözleşmesine uyar. MCP satıcı ödeme veya kredi politikasını asla atlamaz.
İlk araçlar özel anahtarları/kurtarma ifadelerini gösteremez, fon gönderemez veya aktaramaz, iade yapamaz, geri çağrıları yeniden gönderemez, ödeme yöntemlerini değiştiremez, hesapları/alan adlarını düzenleyemez veya faturalandırmayı yönetemez. Fatura açıklamalarını, müşteri alanlarını ve meta verileri aracı talimatları değil, güvenilmeyen veriler olarak ele al. Bağlı yapay zekâ sağlayıcıları okumalarına izin verdiğin verileri alır.
| Yöntem | Yol | Sözleşme |
|---|---|---|
| POST | /mcp | Kimlik doğrulamalı JSON-RPC: initialize, ping, tools/list, tools/call. Bildirim istekleri 202 döndürür; toplu istekler reddedilir. |
| GET / DELETE | /mcp | Kimlik doğrulamalı 405: sonlu JSON yanıtları; bağımsız SSE akışı ve sunucu tarafı MCP oturumu yok. |
| GET | /.well-known/oauth-protected-resource/mcp | Kanonik kaynak URL'si ve yetkilendirme sunucusu keşfi; /.well-known/oauth-protected-resource adresinde de bulunur. |
| GET | /.well-known/oauth-authorization-server | OAuth uç noktaları, authorization_code/refresh_token, S256 PKCE ve desteklenen kapsamlar. |
| POST | /mcp/oauth/register | Herkese açık istemci kaydı: client_name ve tam redirect_uris. Yalnızca HTTPS veya geri döngü HTTP. İstemci sırrı veya uzak meta veri alma yok. |
| GET | /mcp/oauth/authorize | client_id, redirect_uri, response_type=code, resource, code_challenge, code_challenge_method=S256, isteğe bağlı scope/state; konsol onayına yönlendirir. |
| POST | /mcp/oauth/token | Form kodlamalı authorization_code + code + code_verifier + redirect_uri veya refresh_token + refresh_token. client_id ve resource her zaman eklenmelidir. |
| POST | /mcp/oauth/revoke | Form kodlamalı client_id ve token. Eşleşen erişim/yenileme token'ı bağlantısını iptal eder. |
Doğrudan araç isteği örneği
Önce MCP istemcin üzerinden başlatma yap ve protokol üzerinde anlaş. Bu örnek sonraki isteği gösterir.
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/mcp" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'MCP-Protocol-Version: 2025-11-25' \
--header 'Accept: application/json, text/event-stream' \
--header 'Content-Type: application/json' \
--data-raw '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_invoices",
"arguments": {
"project_id": "YOUR_PROJECT_ID",
"limit": 10
}
}
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const body = `{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_invoices",
"arguments": {
"project_id": "YOUR_PROJECT_ID",
"limit": 10
}
}
}`;
const response = await fetch("https://api.example.com/mcp", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"MCP-Protocol-Version": "2025-11-25",
"Accept": "application/json, text/event-stream",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$body = <<<'JSON'
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_invoices",
"arguments": {
"project_id": "YOUR_PROJECT_ID",
"limit": 10
}
}
}
JSON;
$ch = curl_init("https://api.example.com/mcp");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "MCP-Protocol-Version: 2025-11-25", "Accept: application/json, text/event-stream", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {
"MCP-Protocol-Version": "2025-11-25",
"Accept": "application/json, text/event-stream",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_invoices",
"arguments": {
"project_id": "YOUR_PROJECT_ID",
"limit": 10
}
}
}""".encode("utf-8")
request = Request("https://api.example.com/mcp",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Operatör API'si
Barındırılan satıcıları ayrı, kapsamı sınırlı sunucu tarafı anahtarlarla oluştur ve yapılandır.
Birden fazla işletme barındır ve kurulumlarını api.example.com/v1/operator üzerinden otomatikleştir. 7.4.0'dan itibaren yalnızca Operatör modunda kullanılabilir. Normal Satıcı API'si değişmez.
- Operatör → Ayarlar → Operatör API'si bölümünü aç ve etkinleştir (varsayılan olarak kapalıdır). Yalnızca gereken izinlere ve barındırılan satıcılara sahip ayrı kimlik bilgisi oluştur.
- wc_operator_ anahtarını sunucunda tut. Operatör paneli sunucu adını veya satıcı anahtarını değil, API ana makine adını kullan.
- Her Operatör POST isteğinden önce Idempotency-Key ve tam istek gövdesini kalıcı sakla. Belirsiz sonuçtan sonra hesabı yeniden oku; yalnızca tekrar denemek için anahtarı değiştirme.
- onboarding: direct ve parolayla ya da onboarding: invitation ve parolasız satıcı oluştur. Ardından projeleri/mağazaları oluştur ve ödeme entegrasyonu için proje kapsamlı satıcı anahtarı düzenle.
| Kapsam | Erişim |
|---|---|
| merchants.read / merchants.write | Barındırılan satıcıları listele/oku ve oluştur/güncelle. |
| users.read / users.write / users.security | Kullanıcıları oku/oluştur/güncelle; parolaları değiştirme veya oturumları iptal etme ayrıdır. Asla operatör yöneticisi oluşturmaz. |
| invitations.read / invitations.write | Tek kullanımlık davet/sıfırlama bağlantılarını listele/oku, oluştur, yenile ve iptal et. Yeni kullanıcılar ayrıca users.write; sıfırlamalar ayrıca users.security gerektirir. |
| credits.read / credits.write / fees.write | Bakiyeleri/hesap defterini oku; yerel kredi ver veya düzelt; ileriye dönük ücretleri belirle. Sıfırdan farklı başlangıç kredisi credits.write gerektirir. |
| topups.read / topups.write | Barındırılan satıcıların kredi ödeme isteklerini oku veya oluştur. Hiçbir API işlemi bunları ödendi olarak işaretleyemez. |
| projects.read / projects.write / reports.read | Satıcı projelerini, mağazalarını, görünümü ve ödeme ayarlarını oluştur/yapılandır; faturaları, cüzdan bakiyelerini ve finansal raporları oku. |
| merchant_credentials.read / merchant_credentials.write | Normal kapsamlı satıcı anahtarlarını yönet. Güçlü yetkidir: bu anahtarlar oluşturulduktan sonra bağımsız çalışır. |
| events.read / webhooks.write / audit.read / health.read | Yaşam döngüsü geçmişini oku; imzalı yaşam döngüsü geri çağrılarını yapılandır; denetim/yetenek/düğüm sağlığı bilgilerini oku. |
Katılım, krediler, izinler ve güvenli yeniden denemeler
| Konu | Kural |
|---|---|
| Kimlik bilgileri | İsteğe bağlı sona erme ve tam IPv4/IPv6 izin listesi; varsayılan dakikada 60 istek, 1–600 arasında ayarlanabilir. Her istek, kimlik bilgisini oluşturan yöneticiyi ve güncel kapsamları kontrol eder. HTTP 429 Retry-After içerir. |
| Yalıtım | Anahtarlar yalnızca atanmış barındırılan satıcılara erişir. Satıcı oluşturmak ve kurulum genelindeki raporları görmek tüm satıcılara erişim gerektirir. Operatörün kendi işletmesi hariçtir. |
| İlk giriş | Doğrudan oluşturulan hesaplar, sunucuyu barındıranın cüzdan anahtarlarına erişebileceğini kabul eder. require_password_change ilk girişte parola değişikliği ekler. Davet kabulü açık saklama onayı, ardından normal giriş gerektirir. Basic Auth ve mevcut TOTP geçerliliğini korur. |
| Davetler | Yeni kullanıcı bağlantıları 48 saat; parola sıfırlama bağlantıları bir saat geçerlidir. Token'lar tek kullanımlıktır. Yeniden oluşturma eski bağlantıyı iptal eder. SMTP kabulü gelen kutusuna teslim garantisi değildir; email_delivery alanını incele. |
| Güvenli yeniden denemeler | Her Operatör POST isteği 16–128 karakterlik anahtar gerektirir (harf, rakam, -, _ veya .). Aynı anahtar ve birebir aynı URL/gövde kayıtlı sonucu döndürür. Farklı baytlar 409 döndürür. Tekrarda sırlar/bağlantılar çıkarılır; gerektiğinde açıkça yeni işlemle yenile veya yeniden oluştur. |
| Belirsiz sonuçlar | operator_request_in_progress, işlemin sürdüğü veya alındısı kaydedilmeden kesildiği anlamına gelir. Kaynağı ve denetim kaydını incele; körlemesine yeni anahtar gönderme. Tamamlanan alındılar 30 gün sonra sıkıştırılır; eski anahtarlar yine tekrar çalıştırılamaz. |
| Krediler ve ücretler | En fazla altı ondalık basamaklı ondalık sayı dizeleri. starting_credit tek seferlik yerel kredi tanımıdır. Düzeltmeler HTTP yeniden deneme anahtarına ek olarak işaretli tutar, not ve request_id gerektirir. fee_bps=100, %1 demektir; düzenlemeler sonraki faturaları etkiler. Kredi tanımlamaları kurulumun kendi ön ödemeli bakiyesini doldurmaz. |
| Duraklatma | enabled=false barındırılan hesabı devre dışı bırakır ve konsol oturumlarını iptal eder. payments_paused=true yeni faturaları durdurur. Mevcut ödeme izlemesi devam eder. Proje/mağaza oluşturma ve otomasyon kurulumun kredi politikasına bağlı kalır. |
| Sunulmayan işlemler | Cüzdan sırları, imzalama, gönderim, iade, kalıcı silme, TOTP sıfırlama, alan adı değişikliği veya sunucu düzeyi yapılandırma yoktur. Normal fatura istekleri yine satıcı anahtarı ve Satıcı API'si kullanır. |
Operatör yaşam döngüsü webhook'ları
| Olay | Veri |
|---|---|
| merchant.created / merchant.updated | merchant_id, enabled, payments_paused, fee_bps. |
| user.created / user.updated | merchant_id, user_id, enabled. Güncelleme olayı e-posta, etkinlik durumu ve yönetici rolü değişikliklerini kapsar. |
| invitation.accepted / password_reset.completed | merchant_id, user_id, invitation_id. |
| topup.settled / credit.balance_changed | merchant_id, ledger_id, kind, amount ve balance. Mutabakat sırasında satıcı kredi para birimini veya hesap defteri ayrıntısını oku. |
Operatör yaşam döngüsü olayları fatura IPN'inden/mağaza webhook'larından ayrıdır. Abonelik, onu oluşturan Operatör kimlik bilgisine aittir; anahtar başına en fazla 10 uç nokta olabilir. Yalnızca gelecekteki eşleşen olaylar kuyruğa alınır; saklanan geçmiş için GET /events kullan.
Gövde event_id, event_type, merchant_id, occurred_at ve data içerir. Uç noktanın bir kez gösterilen signing_secret değeriyle ham gövdenin tamamı üzerinde Wholly-Signature doğrula: HMAC-SHA256(secret, timestamp + '.' + raw_body), üst bilgi t=...,v1=.... Kısa zaman damgası toleransı uygula.
SDK'nın fatura bildirimi ayrıştırıcısını değil, genel imza doğrulayıcısını kullan. Ardından merchant_id ve event_type doğrula, event_id değerini bir veritabanı işlemiyle kaydet/tekilleştir ve yalnızca kalıcı kabulden sonra 2xx döndür. Wholly-Event-Id imzalı gövdeyle eşleşmelidir. İmzasız üst bilgileri iş verisi olarak değerlendirme.
Teslim en az bir kez gerçekleşir, sırasız gelebilir ve en fazla 8 kez denenir. Mutabakat için güncel kaynakları oku; occurred_at tek yönlü artan sıra numarası değildir. Teslim öncesi kapsam ve etkinlik/sona erme ayarları yeniden kontrol edilir. Devre dışı abonelikler kuyruktaki işleri duraklatır, ancak devre dışıyken yeni olayları kuyruğa almaz.
Olaylar ve teslim geçmişi 30 gün tutulur. Kurulum otomasyon politikası teslimi duraklatabilir. GET /webhooks/{id}/deliveries sonucu ve değiştirilemez yükü gösterir; herkese açık API süresi dolmuş kaydı zorla teslim etmez.
{
"event_id": "55555555-5555-4555-8555-555555555555",
"event_type": "merchant.created",
"merchant_id": "11111111-1111-4111-8111-111111111111",
"occurred_at": "2026-10-01T12:00:00Z",
"data": {
"merchant_id": "11111111-1111-4111-8111-111111111111",
"enabled": true,
"payments_paused": false,
"fee_bps": 300
}
}Pazaryeri API'si
Korunan satıcı payları ve kontrollü ödemelerle tek ödeme sayfası.
Tek müşteri faturası, tam satıcı payları ve aynı varlıkla kontrollü satıcı ödemeleri. Proje başına etkinleştirilir. Sürüm 8.0.0 tüm ödeme alma ağlarını değil, Bitcoin mainnet ile yapılandırılmış desteklenen EVM yerel coin'lerini / standart ERC-20 token'larını destekler.
- Projede Pazaryeri'ni etkinleştir, katılan mağazaları seç ve yapılandırırken satıcı ödemelerini duraklatılmış tut.
- Satıcıları kaydet ve ödeme adreslerini bağımsız olarak doğrula. Hedef oluşturulduğunda beklemededir; onay destinations.approve gerektirir.
- Ayarlar → API erişimi bölümünde ayrı Pazaryeri kimlik bilgisi oluştur. Normal Satıcı, Operatör ve MCP kimlik bilgileri Pazaryeri fonlarını harcayamaz.
- Toplamı fatura tutarına tam eşit olan, pozitif ondalık sayı dizeleriyle 1–100 tahsis içeren fatura oluştur. Her satıcının mağazanın desteklediği ortak bir ağda onaylanmış hedefi olmalıdır.
- Tahsislerin kullanılabilirliği doğrulanana kadar bekle. Satıcı ödemesini hazırla, değiştirilemez alıcılarını ve maliyet sınırlarını oku, ardından revizyonunu ve tam plan_hash değerini onayla. Ödemeyi sorgula veya imzalı olayları doğrula.
| Konu | Kural |
|---|---|
| Saklama | Müşteri fonları önce projenin kontrolündeki cüzdanlara girer. Satıcılara ödenene kadar anahtarları pazaryeri/sunucu sahibi kontrol eder. Bu, müşteriden satıcıya doğrudan ödeme, emanet hizmeti veya satıcı giriş sistemi değildir. |
| Üç satıcı | Üç adet 100 USD pay ve %4 komisyon içeren 300 USD faturada, teklif edilen kriptodan her satıcıya 96 USD karşılığı ayrılır ve 12 USD karşılığı brüt komisyon tutulur. Plan gelecekteki itibari para değerini değil, kripto atomik birimlerini garanti eder. |
| Ücretler | Mevcut işlem ücreti, tamamlanan asıl faturanın tutarına/para birimine bir kez uygulanır. Yapılandırılan oran %1 ise bu 3 USD ön ödemeli kredi demektir ve zincir ücretlerinden önce 9 USD karşılığı komisyon kalır. Satıcı ödemeleri ek müşteri satış ücreti oluşturmaz. |
| Tahsis | En büyük kalan yöntemiyle tahsis her atomik birimi korur. Komisyon aşağı yuvarlanır; satıcı neti kalan tutardır. Tahsis, fatura ve satıcı bazlı özel değerler ile mağaza/proje varsayılanlarının görüntüsü alınır. Satıcıya ödeme sırasında yeni kur uygulanmaz. |
| Korunan fonlar | Normal gönderimler, bakiye aktarımları, borsa yatırmaları ve otomatik kredi yüklemeleri Pazaryeri ödeme alma adreslerini hariç tutar. Ağ ücretleri ve token gas'ı ayrı, serbest yerel coin gerektirir. Önbellekteki cüzdan değerleri bilgi amaçlıdır; imzalamadan önce bağımsız canlı fon karşılığı kontrol edilir. |
| Kesinlik | Ödeme sayfası sıfır onay veya tek tarayıcı kabul etse bile Pazaryeri satıcı ödemesi kanıtı, pozitif asgari zincir onayı ve iki bağımsız uyumlu sağlayıcı gerektirir. Sağlayıcı bekleme süreleri ödeme doğrulamasını/satıcı ödemesini erteler; diğer koşulları geçerli olan fatura oluşturmayı ertelemez. |
| İstisnalar | Normal ödeme sayfası toleransıyla kabul edilen eksik ödemeler, karşılıksız tahsis yapılmadan bekletilir. Yetkili serbest bırakma işlemi, fon karşılığı tam olan daha küçük ve kesin bölüşümü onaylayabilir. Fazla ödeme tek başına BTC veya desteklenen EVM yerel/ERC-20 yöntemlerinde teklif edilen satıcı bölüşümünü engellemez. Fazlalık ayrı bekletilir. Bitcoin korunan para üstünü fatura adresine döndürür; ücretleri ve varsa dust alt sınırına tamamlama tutarını ayrı proje fonları karşılar. Karma yöntemler, geç/belirsiz/yeniden yapılanmadan etkilenen ödemeler ve eksik fon karşılığı inceleme gerektirir. |
| İadeler | Belirsizliği olmayan, onaylanmış tek bir ödeme alma yönteminin aynı varlıkla tam iadesini hazırla, ardından bunu ayrı olarak bir ödeme şeklinde onayla. Ödenmemiş tahsisler ve komisyon geri alınır. Tüm satıcılara ödendikten sonra birincil cüzdan adresini ayrıca fonla; satıcıdan geri alma yoktur. Kısmi satıcı grupları ve karma varlık iadeleri önce mutabakat gerektirir. 8.0.0'da kısmi tutar iadeleri ve komisyon çekimleri sunulmaz. |
| Yeniden denemeler | Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme. |
| Revizyonlar | Değiştirilebilir kayıtlar güncel revizyonlarını gerektirir. Onay/devam ettirme ayrıca expected_plan_hash ve confirm:true gerektirir. Hazırlık fonları 15 dakika ayırır; onay bir saat tanır. Süresi dolan imzasız işler güvenle serbest bırakılır. İmzalı/belirsiz transferler kimliklerini ve rezervasyonlarını korur. |
| Otomatik satıcı ödemeleri | Varsayılan olarak kapalıdır. Varlık başına politikalar onaylı hedefleri, pozitif asgari tutarı, ödeme başına/kayan 24 saatlik anapara ve yerel ücret/gas sınırlarını, aralığı ve onayları yetkilendirir. Yetkiyi değiştirmek/iptal etmek gönderilmemiş işleri durdurur; izleme sürer. Sınırlar ayrılmış ve belirsiz planları içerir. Faturalandırma nedeniyle duraklatılan politikalar adil biçimde yeniden zamanlanır. Geçersiz fatura, diğer uygun fatura gruplarını engellemeden inceleme için bekletilir. |
| Duraklatma ve kurtarma | Düşük kredi ve transfer güvenlik kontrolleri harcamayı yine duraklatır. İzleme ve hesap defteri mutabakatı devam eder. Devam ettirme, saklanan aynı planı yeniden inceler. İki bağımsız sağlayıcının kanıtladığı kanonik EVM revert'i, açık onaydan sonra kalan ücret bütçesi içinde yeni işlemle değiştirilebilir; ilk hash'ler ve ücretler kayıtlı kalır. Bilinmeyen sonuçlar veya token teslim uyumsuzlukları bekletilir. Tüm veritabanını ve anahtarları yedekle; geri yüklemeden sonra satıcı ödemelerine izin vermeden önce iletilmiş hash'lerin mutabakatını yap. |
| Tanımlayıcılar ve sayfalama | Proje Ayarları'ndan proje UUID'sini, Mağazalar → Temel → API kimlikleri bölümünden mağaza UUID'sini kullan. Satıcı/ödeme/varlık kimliklerini bu API döndürür. invoice_id herkese açık fatura UUID'sidir. Sayfalanan kaynaklar data ve pagination {page,per_page,total,pages} döndürür; varsayılanlar 1/25, en fazla 100 satırdır. Tam parasal değerler dizedir. |
| Kimlik bilgisi kapsamı | Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma. |
Pazaryeri izinleri
marketplace.read · vendors.write · destinations.write · destinations.approve · invoices.write · policies.write · commissions.override · payouts.write · payouts.approve · webhooks.write · reconciliation.write
Tahsis durumları
pending · held · available · reserved · paid · refunding · refunded · shortfall
Satıcı ödemesi durumları
awaiting_approval · queued · funding_gas · sending · confirming · partially_paid · paid · needs_attention · cancelled · expired
Pazaryeri olayları
Fatura geri çağrılarıyla aynı Wholly imza üst bilgileri ve ham gövde HMAC doğrulama algoritmasını kullanan ayrı Pazaryeri imzalama sırrı. Zaman damgasını/imzayı doğrula, event_id ile tekilleştir ve hızla 2xx döndür. Teslim en az bir kez, en fazla sekiz denemeyle yapılır; geçmişten aynı olay yeniden teslim edilebilir. Uç nokta düzenlemeleri müşteri verilerini yönlendirmek yerine eski gönderilmemiş teslimleri iptal eder. Faturanın tamamlanması satıcıya ödemenin tamamlanması değildir. Yalnızca harici bir geri çağrı söyledi diye asla para gönderme.
marketplace.invoice.createdmarketplace.allocations.availablemarketplace.allocations.heldmarketplace.payout.approvedmarketplace.payout.broadcastmarketplace.payout.confirmedmarketplace.payout.partialmarketplace.payout.failedmarketplace.payout.cancelledmarketplace.refund.preparedmarketplace.refund.confirmed
{
"event_id": "11111111-1111-4111-8111-111111111111",
"event_type": "marketplace.payout.confirmed",
"payload_version": 1,
"project_id": "YOUR_PROJECT_ID",
"occurred_at": "2026-10-06T12:00:00Z",
"data": {
"payout_id": "YOUR_PAYOUT_ID",
"asset_id": "YOUR_ASSET_ID",
"amount_atomic": "28800000",
"transactions": [
{
"transaction_id": "EXAMPLE_TRANSACTION_ID",
"explorer_url": "https://mempool.space/tx/EXAMPLE_TRANSACTION_ID"
}
]
}
}Hatalar ve sınırlar
Doğrulamayı, kotaları ve yeniden denemeleri öngörülebilir biçimde ele al.
HTTP durumunu ve şunu kontrol et: Content-Type yanıtı ayrıştırmadan önce. Şu durumda: 429, en az şu kadar bekle: Retry-After yeniden denemeden önce belirtilen süre.
| Sınır | Ayrıntılar |
|---|---|
| İstek hızı | Kimlik bilgisi başına kota: UTC dakikası başına varsayılan 120 istek; Ayarlar → API bölümünde 1 ile 6000 arasında ayarlanabilir. İdempotent yeniden denemeler ve kimlik doğrulama sonrasındaki yetkilendirme/doğrulama hataları dahil, kimlik doğrulamalı tüm v1 okuma ve yazmaları alan adları, projeler ve süreçler genelinde bu hakkı paylaşır. Geçersiz kimlik bilgileri, konsol rotaları ve herkese açık ödeme sayfası kotayı tüketmez. |
| İstek sınırı üst bilgileri | Kimlik doğrulamalı v1 yanıtları X-RateLimit-Limit, X-RateLimit-Remaining ve X-RateLimit-Reset içerir (sonraki UTC dakika sınırının Unix saniyesi). Fazla istekler JSON 429 rate_limit_exceeded ve tamsayı saniyeli Retry-After döndürür. En az bu kadar bekle ve yeniden denemeye rastgele zaman payı ekle. Sabit pencereler dakika sınırlarında ani yoğunluğa izin verir; bu saniye başına istek garantisi değildir. |
| Satıcı istek gövdesi | Uygulama yönlendiricisinde en fazla 32 KiB. Ağın giriş katmanı, JSON hata zarfı üretilmeden büyük isteği reddedebilir. |
| Fatura listesi | limit varsayılanı 50'dir ve 1–100 kabul eder; offset 0–1.000.000 kabul eder. Arama en fazla 100 karakterdir. Sonuçlar yeniden eskiye sıralanır ve total/has_more meta verilerini içerir. |
| Mağaza yöntemleri | Mağaza başına en fazla 64 varlık seçimi; 30 yerel zincirin tamamına ve sınırlı doğrulanmış token kataloğuna yeter. Fatura oluşturmak yine proje politikası, tarayıcı yeteneği ve kullanıma hazır, yedeklenmiş zincir cüzdanına bağlıdır. |
| Token keşfi | Aday limiti varsayılan 50'dir ve 1–100 kabul eder. Keşif sonuçları, zincir üstü doğrulama başarılı olana kadar ödeme varlığı sayılmaz. |
| Kayıtlı proje token'ları | Proje başına en fazla 20 kalıcı token varlığı. Zaten kayıtlı varlıklar başka yuva tüketmeden yeniden kullanılabilir. |
| İdempotent işlem | Fatura oluşturmak için gereklidir. Boşluksuz 1–128 görünür ASCII karakteri; anahtarlar mağaza başına benzersizdir ve tekrarda ilk kimlik bilgisi ile birebir ham gövde kullanılmalıdır. |
| Meta veriler | Yalnızca JSON nesnesi; kodlanmış boyut en fazla 4.096 bayt ve iç içe geçme en fazla beş düzey. |
| Geri çağrılar | En fazla 2.048 baytlık herkese açık HTTPS URL'si. Bildirim istek gövdeleri 256 KiB ile; saklanan fatura olay yükleri, sınırlı ödeme geçmişiyle 64 KiB ile sınırlandırılır. |
| Ödeme sayfası görselleri | Eksik ödeme kalan tam tutarı değiştirdiği için QR SVG yanıtları private ve no-store'dur. Revizyonlu PNG logoları bir yıl herkese açık önbelleğe alınır ve değiştirilemezdir. |
| API giriş katmanı | Yönetilen API üst sunucu isteklerinde 30 saniyelik okuma zaman aşımı vardır. Çağıranları, iş süresi bütçelerinden kısa ve açık zaman aşımlarıyla tasarla. |
| JSON olmayan hatalar | Hatalı UUID/sorgu çıkarımı, yanlış yöntemler ve 32 KiB uzunluk koruması çerçeve metni/boş yanıt döndürebilir. Bilinmeyen /v1 yolları şu anda 404 konsol HTML'i döndürür; ayrıştırmadan önce durumu ve Content-Type değerini doğrula. |
Hata başvuru kaynağı
| HTTP | Hata kodu | Anlamı |
|---|---|---|
| 400 | invalid_reconciliation_action | İstisna durumu, neden, arama veya geçmiş sayfası filtresi geçersiz. |
| 500 | reconciliation_unavailable | İstisna kuyruğu veya kanıt yüklenemedi. Okumayı artan beklemeyle yeniden dene. |
| 402 | billing_required | Her yeni fatura doğrulanmış eşleştirilmiş kredi hesabı ve canlı yetkilendirme gerektirir. Yetersiz ön ödemeli kredi oluşturmayı veya gelen ödemeleri engellemez: bunun yerine IPN, webhook'lar ve Bakiye Aktarımı duraklar; ücretler işlemeye devam eder. Askıya alınmış hesaplarda, süresi dolmuş/geçersiz faturalandırma doğrulamasında, erişilemeyen kredi hizmetinde veya yetkilendirilmemiş fatura itibari para temelinde oluşturma engelli kalır. Ücretler alınan kriptoyu, fiyat marjını, fazla ödemeyi veya ağ ücretini değil, ilk fatura itibari para tutarını kullanır. Bu tutar ve bağımsız dönüşüm, ödeme sayfası oluşturulmadan önce kaydedilir. Kesintilerde mevcut izleme ve fatura getirme devam eder. Bakiye yüklemesinden sonra kuyruktaki bildirimler normal yük saklama süresi içinde, etkin bakiye aktarım kuralları da yeniden çalışır. Ayarlar → Ücretler bölümünü kontrol et ve başarısız oluşturmayı aynı Idempotency-Key ile yeniden dene. |
| 400 | invalid_json | Hatalı JSON, bilinmeyen alan veya belgelenen istekle eşleşmeyen gövde. |
| 400 | idempotency_key_required | Fatura oluşturma isteğinde Idempotency-Key eksik. |
| 400 | invalid_idempotency_key | Anahtar boş, 128 bayttan uzun, ASCII dışında, boşluk içeriyor veya kontrol baytı barındırıyor. |
| 400 | invalid_payment_request | Doğrulanan alan veya seçili etkin yöntem başarısız oldu. Tam engeli öğrenmek için error.message ve error.details.payment_methods (PaymentMethodIssue[]) oku. SDK 2.4.0+ güvenli, işlem yapılabilir istisna özetleri ve sorun yardımcıları ekler; eski PHP SDK'ları getApiMessage() sunar. |
| 400 | invalid_invoice_status | Liste durumu belgelenen altı fatura durumunun dışında. |
| 400 | invalid_callback_url | Geçerli IPN hedefi HTTPS, herkese açık adres, DNS veya SSRF doğrulamasını geçemedi. |
| 400 | invalid_wallet_request | Cüzdan/adres hazırlama girdisi geçersiz. |
| 400 | invalid_token_asset | Token zinciri, aday sorgusu, CoinGecko kimliği, katalog meta verileri veya sözleşme/mint girdisi geçersiz. |
| 401 | authentication_required | Bearer token'ı eksik, hatalı, devre dışı, yenilenmiş veya bilinmiyor. |
| 403 | source_ip_denied | Kimlik bilgisinin IP kısıtlaması, isteğin tam herkese açık kaynak adresini içermiyor. |
| 403 | source_ip_not_allowed | Ana makine adının kaynak IP kısıtlaması bu istemciyi dışarıda bırakıyor. Yönetici canlı ana makine izin listelerini Ayarlar → Sistem bölümünde yönetebilir; bunlar kimlik bilgisi IP kısıtlamalarına ek uygulanır. |
| 503 | source_access_unavailable | Ana makine erişim doğrulaması geçici olarak kullanılamıyor. Daha sonra yeniden dene; doğrulama yapılamadığında erişim kapalı kalır. |
| 403 / 409 / 500 | merchant_api_access_denied | Yetkilendirme başarısız: izin/proje kapsamı 403, devre dışı proje/mağaza 409 ve yetkilendirme arka uç hatası 500 olabilir. Operatör ödeme alma cüzdanları Operatör paneline ayrılmıştır; eski açık proje izni olsa bile satıcı API kimlik bilgileri veya MCP için kullanılamaz. |
| 403 | project_access_denied | Oluşturma anındaki veritabanı işlemi içinde yeniden kontrol, kimlik bilgisinin artık projeye erişemediğini tespit etti. |
| 404 | invoice_not_found | Yetkili projede bu herkese açık kimliğe sahip fatura yok veya ödeme sayfası onu gösteremiyor. |
| 404 | payment_resource_not_found | Fatura hazırlanırken gereken proje, mağaza, varlık veya cüzdan artık mevcut değil. |
| 404 | token_candidate_not_found | Proje kullanılamıyor veya token güncel eşleşen keşif kataloğunda artık bulunmuyor. |
| 409 | idempotency_conflict | Mağaza kapsamlı anahtar zaten var; kimlik bilgisi veya ham isteğin birebir baytları farklı. |
| 409 | store_unavailable | Proje/mağaza devre dışı veya kullanılamıyor. |
| 409 | no_ready_payment_methods | Hiçbir mağaza yöntemi hazır değil. chain_slug, asset_ticker ve reason_code için error.message ve error.details.payment_methods oku. Cüzdan yedeği/etkinleştirmesi, kurulu adaptör ve fiyatlandırma geçerli olmalıdır. 6.0.6'dan itibaren tarayıcı bekleme süreleri, başarısız veya eski sağlık kontrolleri ve eksik sağlayıcı yeter sayısı oluşturmayı engellemez. |
| 409 | payment_method_unavailable | Seçilen yöntem, oluşturma anındaki atomik yeniden kontrol sırasında kullanılamaz hale geldi. |
| 409 | store_payment_method_not_selected | Mağazanın şu anda seçmediği varlık için mağaza onay ayarı geçersiz kılma istendi. |
| 409 | wallet_unavailable | Ödeme cüzdanı, oluşturma anındaki atomik yeniden kontrol sırasında kullanılamaz hale geldi. |
| 409 | ipn_secret_required | Geçerli IPN URL'si var, ancak mağazanın IPN imzalama sırrı yok. |
| 409 | payment_resource_not_ready | Gereken ödeme varlığı veya cüzdan devre dışı, yedeklenmemiş, ortak hesap etkinleştirme kanıtını bekliyor, kapasitesi tükenmiş veya başka nedenle hazır değil. |
| 409 | account_activation_unverified | XRP Ledger veya Stellar hesap etkinliği yapılandırılmış sayıdaki sağlıklı mainnet uç noktasında (varsayılan 2, isteğe bağlı 1) kanıtlanamadı; tam olarak o hesaba fon gönder ve doğrulamayı yeniden dene. |
| 400 | invalid_monero_wallet_rpc | HTTPS uç noktası, tam mainnet birincil adresi, etiket veya eksiksiz Digest/Basic/üst bilgi kimlik doğrulama girdisi geçersiz. |
| 404 | monero_wallet_rpc_not_found | Proje kapsamlı Monero wallet-RPC bağlantısı mevcut değil. |
| 409 | monero_wallet_rpc_not_ready | Monero varlığı, iki daemon yeter sayısı, değiştirilemez bağlantı veya açık yedek/yalnızca görüntüleme beyanı hazır değil. |
| 409 | monero_wallet_rpc_unavailable | Fatura oluşturmak, geçerli sunucu tarafı kimlik bilgisine sahip etkin, doğrulanmış ve beyanları tamamlanmış proje Monero wallet-RPC bağlantısı gerektirir. |
| 503 | lightning_unavailable | Mağazanın tek hazır yöntemi Lightning ve cüzdanı veya teklifi doğrulanamadı. Aynı idempotency anahtarıyla yeniden dene. Başka hazır zincir üstü yöntem varsa kullanılamayan Lightning yöntemi bunun yerine dışarıda bırakılır. |
| 422 | monero_wallet_rpc_verification_failed | Tam cüzdan, HTTPS sabitleme, eşzamanlama, mainnet daemon yeter sayısı veya geçidin yöntem reddi kanıtı başarısız oldu. |
| 503 | monero_wallet_rpc_failed | Harici salt izleme wallet-RPC'si fatura alt adresini güvenle oluşturup yeniden okuyamadı; yedek adres uydurulmaz. |
| 409 | token_chain_not_ready | Yerel zincir varlığı devre dışı, keşif eşlemesi doğrulama sırasında değişti veya proje mevcut üst sınır olan 20 kayıtlı token varlığına ulaştı. |
| 503 | dex_price_unavailable | DEX sağlayıcısı kullanılamıyor, meşgul, istek sınırına takıldı ya da eski yanıt veya hatalı veri döndürdü. Bir dakika sonra yeniden dene; sabit fiyatlandırma kullanılabilir kalır. |
| 422 | invalid_dex_price | Geçersiz fiyat modu birleşimi veya seçilen havuz tam sözleşme için uygun fiyat sağlayamıyor. Başka havuz veya sabit USD fiyatlandırması seç. |
| 422 | token_verification_failed | Uygun tüm düğümler zincir kimliği, sözleşme kodu, ondalık basamak, bakiye sorgusu veya mint doğrulamasını geçemedi. |
| 422 | invalid_store_confirmation_policy | Mağaza özel onay ayarı bu kesinlik modunda kullanılamıyor, döndürülen zincire uygun sınırların dışında veya desteklenmeyen sıfır onaylı kabul istiyor. |
| 409 | invoice_not_payable | Ödeme sayfası faturası son durumda veya ödeme son tarihi geçti. |
| 409 | invoice_payment_method_locked | Geçerli ödeme zaten farklı bir varlık seçti; active_payment_method_id ile devam et. |
| 409 | payment_method_not_payable | Seçilen yöntem tamamlandı veya artık başka ödeme kabul etmiyor. |
| 422 | payment_qr_unavailable | Ödeme sayfası ödeme isteği SVG QR görseline kodlanamayacak kadar büyük. |
| 503 | payment_rates_unavailable | Hazır ödeme yöntemlerinin hiçbiri için güncel ve güvenilir teklif yok. |
| 500 | authentication_unavailable | Bearer kimlik doğrulaması kayıtlı kimlik bilgisini güvenle okuyamadı veya doğrulayamadı. |
| 429 | rate_limit_exceeded | Bu kimlik bilgisi mevcut UTC dakikası hakkını tüketti. En az Retry-After saniye bekle; fatura oluşturmayı aynı idempotency anahtarıyla yeniden dene. |
| 500 | database_error / internal_error | Geçici sunucu tarafı hata; aynı idempotency anahtarıyla güvenle yeniden dene. |
API'ye genel bakış
Alanları, örnekleri ve yanıtını görmek için uç nokta seç.
Faturalar
POSTFatura oluştur/v1/projects/{project_id}/stores/{store_id}/invoicesGETFaturaları listele/v1/projects/{project_id}/invoicesGETFaturayı getir/v1/projects/{project_id}/invoices/{invoice_id}GETFatura ödemelerini listele/v1/projects/{project_id}/invoices/{invoice_id}/paymentsÖdeme yöntemleri
GETProje ödeme varlıklarını listele/v1/projects/{project_id}/payment-assetsPUTProje varlık politikasını güncelle/v1/projects/{project_id}/payment-assets/{asset_id}GETÖdeme token'ı adaylarına göz at/v1/projects/{project_id}/payment-token-candidatesPOSTToken doğrula ve kaydet/v1/projects/{project_id}/payment-token-assetsGETÖzel token DEX havuzlarını bul/v1/projects/{project_id}/payment-token-dex-poolsPOSTÖzel token ekle veya yeniden fiyatlandır/v1/projects/{project_id}/payment-token-assets/customGETMağaza ödeme yöntemlerini listele/v1/projects/{project_id}/stores/{store_id}/payment-assetsPUTMağaza ödeme yöntemlerini değiştir/v1/projects/{project_id}/stores/{store_id}/payment-assetsPUTMağaza onay politikası belirle/v1/projects/{project_id}/stores/{store_id}/payment-assets/{asset_id}/confirmation-policyCüzdanlar
GETProje cüzdanlarını ve bakiyelerini listele/v1/projects/{project_id}/walletsMutabakat
GETÖdeme istisnalarını listele/v1/projects/{project_id}/reconciliationGETMutabakat kanıtlarını oku/v1/projects/{project_id}/reconciliation/{invoice_id}Pazaryeri API'si
GETYetenekler/v1/marketplace/capabilitiesGETPazaryeri raporu/v1/marketplace/overviewGETProje ayarları/v1/marketplace/settingsPOSTProje ayarlarını kaydet/v1/marketplace/settingsGETSatıcıları listele/v1/marketplace/vendorsPOSTSatıcı oluştur/v1/marketplace/vendorsGETSatıcıyı getir/v1/marketplace/vendors/{vendor_id}POSTSatıcıyı güncelle/v1/marketplace/vendors/{vendor_id}/updatePOSTSatıcıyı arşivle/v1/marketplace/vendors/{vendor_id}/archiveGETSatıcı hedefleri/v1/marketplace/vendors/{vendor_id}/destinationsPOSTÖdeme hedefi ekle/v1/marketplace/vendors/{vendor_id}/destinationsPOSTHedefi onayla/v1/marketplace/vendors/{vendor_id}/destinations/{destination_id}/approvePOSTHedefi devre dışı bırak/v1/marketplace/vendors/{vendor_id}/destinations/{destination_id}/disableGETSatıcı bakiyeleri/v1/marketplace/vendors/{vendor_id}/balancesGETPazaryeri faturaları/v1/marketplace/invoicesPOSTÇok satıcılı fatura oluştur/v1/marketplace/invoicesGETFatura ve tahsisler/v1/marketplace/invoices/{invoice_id}GETFatura ödeme kanıtları/v1/marketplace/invoices/{invoice_id}/paymentsGETFatura tahsisleri/v1/marketplace/invoices/{invoice_id}/allocationsPOSTÖdenmemiş faturayı iptal et/v1/marketplace/invoices/{invoice_id}/cancelPOSTTahsisleri beklet/v1/marketplace/invoices/{invoice_id}/allocations/holdPOSTTahsisleri incele ve serbest bırak/v1/marketplace/invoices/{invoice_id}/allocations/releasePOSTÖdenmemiş hedefi yeniden bağla/v1/marketplace/invoices/{invoice_id}/allocations/{allocation_id}/destinationPOSTTam iade hazırla/v1/marketplace/invoices/{invoice_id}/refundGETÖdeme tahsislerini bul/v1/marketplace/allocationsGETProje hesap defteri bakiyeleri/v1/marketplace/balancesGETDeğiştirilemez yevmiye/v1/marketplace/ledgerGETSatıcı ödemesi geçmişi/v1/marketplace/payoutsPOSTTahsis planını önizle/v1/marketplace/payouts/previewPOSTSatıcı ödemesi hazırla/v1/marketplace/payoutsGETSatıcı ödemesi ayrıntıları/v1/marketplace/payouts/{payout_id}POSTOnayla ve gönder/v1/marketplace/payouts/{payout_id}/approvePOSTSatıcı ödemesini incele ve devam ettir/v1/marketplace/payouts/{payout_id}/resumePOSTİmzalanmamış işi iptal et/v1/marketplace/payouts/{payout_id}/cancelGETOtomatik satıcı ödemesi politikaları/v1/marketplace/policiesPOSTSatıcı ödemesi politikasını yetkilendir/v1/marketplace/policiesGETPazaryeri webhook'ları/v1/marketplace/webhooksPOSTPazaryeri webhook'u oluştur/v1/marketplace/webhooksPOSTPazaryeri webhook'unu güncelle/v1/marketplace/webhooks/{webhook_id}/updatePOSTPazaryeri webhook'unu devre dışı bırak/v1/marketplace/webhooks/{webhook_id}/disableGETPazaryeri olayları/v1/marketplace/eventsGETSaklanan olayı oku/v1/marketplace/events/{event_id}GETPazaryeri teslim geçmişi/v1/marketplace/webhook-deliveriesGETTeslim ayrıntıları/v1/marketplace/webhook-deliveries/{delivery_id}POSTAynı olayı yeniden teslim et/v1/marketplace/webhook-deliveries/{delivery_id}/resendOperatör API'si
GETYetenekler/v1/operator/capabilitiesGETSağlık/v1/operator/healthGETSatıcıları Listele/v1/operator/merchantsPOSTSatıcı Oluştur/v1/operator/merchantsGETSatıcıyı Getir/v1/operator/merchants/{merchant_id}POSTSatıcıyı Güncelle/v1/operator/merchants/{merchant_id}GETKullanıcıları Listele/v1/operator/merchants/{merchant_id}/usersPOSTKullanıcı Oluştur/v1/operator/merchants/{merchant_id}/usersGETKullanıcıyı Getir/v1/operator/merchants/{merchant_id}/users/{user_id}POSTKullanıcıyı Güncelle/v1/operator/merchants/{merchant_id}/users/{user_id}POSTKullanıcı Parolasını Belirle/v1/operator/merchants/{merchant_id}/users/{user_id}/passwordPOSTKullanıcı Oturumlarını İptal Et/v1/operator/merchants/{merchant_id}/users/{user_id}/revoke-sessionsGETDavetleri Listele/v1/operator/merchants/{merchant_id}/invitationsPOSTDavet Oluştur/v1/operator/merchants/{merchant_id}/invitationsGETDaveti Getir/v1/operator/invitations/{invitation_id}POSTDaveti Yeniden Gönder/v1/operator/invitations/{invitation_id}/resendPOSTDaveti İptal Et/v1/operator/invitations/{invitation_id}/revokeGETKredileri Getir/v1/operator/merchants/{merchant_id}/creditsGETKredi Defterini Listele/v1/operator/merchants/{merchant_id}/credits/ledgerPOSTKredileri Düzelt/v1/operator/merchants/{merchant_id}/credits/adjustmentsGETBakiye Yüklemelerini Listele/v1/operator/merchants/{merchant_id}/topupsPOSTBakiye Yüklemesi Oluştur/v1/operator/merchants/{merchant_id}/topupsGETBakiye Yüklemesini Getir/v1/operator/merchants/{merchant_id}/topups/{topup_id}GETRaporlar/v1/operator/reportsGETDenetim Kayıtlarını Listele/v1/operator/auditGETOlayları Listele/v1/operator/eventsGETWebhook'ları Listele/v1/operator/webhooksPOSTWebhook Oluştur/v1/operator/webhooksPOSTWebhook'u Güncelle/v1/operator/webhooks/{webhook_id}POSTWebhook Sırrını Yenile/v1/operator/webhooks/{webhook_id}/rotateGETWebhook Teslimlerini Listele/v1/operator/webhooks/{webhook_id}/deliveriesGETProjeleri Listele/v1/operator/merchants/{merchant_id}/projectsPOSTProje Oluştur/v1/operator/merchants/{merchant_id}/projectsGETProjeyi Getir/v1/operator/merchants/{merchant_id}/projects/{project_id}POSTProjeyi Güncelle/v1/operator/merchants/{merchant_id}/projects/{project_id}GETMağazaları Listele/v1/operator/merchants/{merchant_id}/projects/{project_id}/storesPOSTMağaza Oluştur/v1/operator/merchants/{merchant_id}/projects/{project_id}/storesGETMağazayı Getir/v1/operator/merchants/{merchant_id}/projects/{project_id}/stores/{store_id}POSTMağazayı Güncelle/v1/operator/merchants/{merchant_id}/projects/{project_id}/stores/{store_id}GETMağaza Görünümünü Getir/v1/operator/merchants/{merchant_id}/projects/{project_id}/stores/{store_id}/checkout-appearancePOSTMağaza Görünümünü Güncelle/v1/operator/merchants/{merchant_id}/projects/{project_id}/stores/{store_id}/checkout-appearanceGETMağaza Ödeme Varlıklarını Listele/v1/operator/merchants/{merchant_id}/projects/{project_id}/stores/{store_id}/payment-assetsPOSTMağaza Ödeme Varlıklarını Güncelle/v1/operator/merchants/{merchant_id}/projects/{project_id}/stores/{store_id}/payment-assetsGETMağaza Webhook'larını Listele/v1/operator/merchants/{merchant_id}/projects/{project_id}/stores/{store_id}/webhooksPOSTMağaza Webhook'u Oluştur/v1/operator/merchants/{merchant_id}/projects/{project_id}/stores/{store_id}/webhooksPOSTMağaza Webhook'unu Güncelle/v1/operator/merchants/{merchant_id}/projects/{project_id}/stores/{store_id}/webhooks/{webhook_id}GETFaturaları Listele/v1/operator/merchants/{merchant_id}/projects/{project_id}/invoicesGETFaturayı Getir/v1/operator/merchants/{merchant_id}/projects/{project_id}/invoices/{invoice_id}GETCüzdanları Listele/v1/operator/merchants/{merchant_id}/projects/{project_id}/walletsGETCüzdan Adreslerini Listele/v1/operator/merchants/{merchant_id}/projects/{project_id}/wallets/{wallet_id}/addressesGETSatıcı Kimlik Bilgilerini Listele/v1/operator/merchants/{merchant_id}/api-credentialsPOSTSatıcı Kimlik Bilgisi Oluştur/v1/operator/merchants/{merchant_id}/api-credentialsPOSTSatıcı Kimlik Bilgisini Güncelle/v1/operator/merchants/{merchant_id}/api-credentials/{credential_id}POSTSatıcı Kimlik Bilgisini Yenile/v1/operator/merchants/{merchant_id}/api-credentials/{credential_id}/rotatePOSTSatıcı Kimlik Bilgisini İptal Et/v1/operator/merchants/{merchant_id}/api-credentials/{credential_id}/revokePOSTDavet token'ını kontrol et/v1/onboarding/invitations/checkPOSTDaveti veya parola sıfırlamasını kabul et/v1/onboarding/invitations/acceptÖdeme sayfası
GETÖdeme sayfası kabuğu/GETBarındırılan ödeme sayfası/invoice/{invoice_id}GETÖdeme sayfasında güvenle gösterilebilen fatura/checkout-api/invoices/{invoice_id}GETMağaza ödeme sayfası önizlemesi/invoice/preview/{project_id}GETÖdeme sayfası önizleme verileri/checkout-api/previews/{project_id}GETMağaza ödeme sayfası görseli/checkout-api/invoices/{invoice_id}/appearance-images/{kind}/{revision}/image.pngGETMağaza önizleme görseli/checkout-api/previews/{project_id}/stores/{store_id}/appearance-images/{kind}/{revision}/image.pngGETRevizyonlu önizleme logosu/checkout-api/previews/{project_id}/logo/{revision}/image.pngGETÖdeme QR görseli/checkout-api/invoices/{invoice_id}/payment-methods/{intent_id}/qr.svgGETRevizyonlu ödeme sayfası logosu/checkout-api/invoices/{invoice_id}/logo/{revision}/image.pngHizmet
GETAPI hizmet keşfi/GETHizmet sağlığı/healthzGETYetenekler/v1/operator/capabilitiesSalt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/capabilities" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/capabilities", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/capabilities");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/capabilities",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"api_version": "v1",
"operator_version": "7.4.0",
"scopes": [
"health.read"
],
"all_merchants": false,
"merchant_ids": [
"11111111-1111-4111-8111-111111111111"
],
"onboarding": [
"direct",
"invitation"
],
"write_methods": [
"POST"
],
"idempotency_required": true
}Yanıt alanları
Kullanım notları
- health.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETSağlık/v1/operator/healthSalt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/health" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/health", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/health");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/health",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"version": "7.4.0",
"nodes": []
}Yanıt alanları
Kullanım notları
- health.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETSatıcıları Listele/v1/operator/merchantsSalt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Sorgu parametreleri
pageisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
searchisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/merchants" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/merchants", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/merchants");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/merchants",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [],
"page": 1,
"page_size": 25,
"total": 0
}Yanıt alanları
Kullanım notları
- merchants.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTSatıcı Oluştur/v1/operator/merchantsOkuma ve yazma
Barındırılan satıcıyı ve ilk yöneticiyi atomik olarak, doğrudan parolayla veya davetle oluştur.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/merchants" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Example shop",
"email": "admin@example.test",
"onboarding": "direct",
"password": "REPLACE_WITH_A_UNIQUE_TEMPORARY_PASSWORD",
"require_password_change": true,
"currency": "EUR",
"starting_credit": "0",
"external_id": "customer-1042"
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"name": "Example shop",
"email": "admin@example.test",
"onboarding": "direct",
"password": "REPLACE_WITH_A_UNIQUE_TEMPORARY_PASSWORD",
"require_password_change": true,
"currency": "EUR",
"starting_credit": "0",
"external_id": "customer-1042"
}`;
const response = await fetch("https://api.example.com/v1/operator/merchants", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"name": "Example shop",
"email": "admin@example.test",
"onboarding": "direct",
"password": "REPLACE_WITH_A_UNIQUE_TEMPORARY_PASSWORD",
"require_password_change": true,
"currency": "EUR",
"starting_credit": "0",
"external_id": "customer-1042"
}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/merchants");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"name": "Example shop",
"email": "admin@example.test",
"onboarding": "direct",
"password": "REPLACE_WITH_A_UNIQUE_TEMPORARY_PASSWORD",
"require_password_change": true,
"currency": "EUR",
"starting_credit": "0",
"external_id": "customer-1042"
}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/merchants",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
onboardingdirect | invitationzorunludirect, password gerektirir ve davet e-postası göndermez. invitation, password içermez.
passwordstring · direct only12–128 karakter (en fazla 512 UTF-8 baytı); asla döndürülmez veya e-postalanmaz. Geçici parolalarda require_password_change kullan.
require_password_changebooleanisteğe bağlıİlk girişte yeni parola gerektirir. Doğrudan oluşturulan her hesap barındırılan cüzdan saklama modelini kabul etmelidir.
currencyfiat codeisteğe bağlıÖn ödemeli hesap para birimi; varsayılan bölgesel para birimidir ve sonradan değiştirilemez.
fee_bpsintegeristeğe bağlı0–10000; 100, %1 demektir. Atlanırsa operatör varsayılanını kullanır. fees.write gerektirir.
starting_creditdecimal stringisteğe bağlıTam tek seferlik yerel kredi tanımı. Sıfırdan farklıysa credits.write gerektirir. Operatörün kurulum bakiyesini doldurmaz.
send_invitation_emailbooleanisteğe bağlıYalnızca davet için. Yapılandırılmış SMTP gerekir; yanıt röle kabulünü hesap oluşturulmasından ayırır.
Yanıt 201 or 200 application/json
Örnek yanıt
{
"merchant_id": "11111111-1111-4111-8111-111111111111",
"user_id": "22222222-2222-4222-8222-222222222222",
"merchant": {
"id": "11111111-1111-4111-8111-111111111111",
"name": "Example shop",
"currency": "EUR",
"balance": "0"
},
"onboarding": "direct",
"access_link": null,
"email_delivery": {
"status": "not_requested"
},
"custody_acceptance_required": true
}Yanıt alanları
Kullanım notları
- merchants.write gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Tüm satıcılara erişim gerekir. Açık ücret değişiklikleri ayrıca fees.write; sıfırdan farklı starting_credit, credits.write gerektirir. Davetle katılım ayrıca invitations.write gerektirir. Otomatik giriş, Basic Auth atlama veya yeniden denemede geriye dönük kredi yoktur.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETSatıcıyı Getir/v1/operator/merchants/{merchant_id}Salt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"id": "11111111-1111-4111-8111-111111111111",
"name": "Example shop",
"currency": "EUR",
"balance": "10",
"fee_bps": 300,
"enabled": true,
"payments_paused": false,
"external_id": "customer-1042"
}Yanıt alanları
Kullanım notları
- merchants.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTSatıcıyı Güncelle/v1/operator/merchants/{merchant_id}Okuma ve yazma
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"payments_paused": true
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"payments_paused": true
}`;
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"payments_paused": true
}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"payments_paused": true
}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
namefieldsisteğe bağlıDevre dışı bırakmak oturumları iptal eder. payments_paused, mevcut ödeme taramasını değil, yeni faturaları engeller. Ücret değişiklikleri fees.write gerektirir ve sonraki faturaları etkiler; hesap para birimi değiştirilemez.Ayrıntılar
Devre dışı bırakmak oturumları iptal eder. payments_paused, mevcut ödeme taramasını değil, yeni faturaları engeller. Ücret değişiklikleri fees.write gerektirir ve sonraki faturaları etkiler; hesap para birimi değiştirilemez.
enabledfieldsisteğe bağlıDevre dışı bırakmak oturumları iptal eder. payments_paused, mevcut ödeme taramasını değil, yeni faturaları engeller. Ücret değişiklikleri fees.write gerektirir ve sonraki faturaları etkiler; hesap para birimi değiştirilemez.Ayrıntılar
Devre dışı bırakmak oturumları iptal eder. payments_paused, mevcut ödeme taramasını değil, yeni faturaları engeller. Ücret değişiklikleri fees.write gerektirir ve sonraki faturaları etkiler; hesap para birimi değiştirilemez.
payments_pausedfieldsisteğe bağlıDevre dışı bırakmak oturumları iptal eder. payments_paused, mevcut ödeme taramasını değil, yeni faturaları engeller. Ücret değişiklikleri fees.write gerektirir ve sonraki faturaları etkiler; hesap para birimi değiştirilemez.Ayrıntılar
Devre dışı bırakmak oturumları iptal eder. payments_paused, mevcut ödeme taramasını değil, yeni faturaları engeller. Ücret değişiklikleri fees.write gerektirir ve sonraki faturaları etkiler; hesap para birimi değiştirilemez.
fee_bpsfieldsisteğe bağlıDevre dışı bırakmak oturumları iptal eder. payments_paused, mevcut ödeme taramasını değil, yeni faturaları engeller. Ücret değişiklikleri fees.write gerektirir ve sonraki faturaları etkiler; hesap para birimi değiştirilemez.Ayrıntılar
Devre dışı bırakmak oturumları iptal eder. payments_paused, mevcut ödeme taramasını değil, yeni faturaları engeller. Ücret değişiklikleri fees.write gerektirir ve sonraki faturaları etkiler; hesap para birimi değiştirilemez.
external_idfieldsisteğe bağlıDevre dışı bırakmak oturumları iptal eder. payments_paused, mevcut ödeme taramasını değil, yeni faturaları engeller. Ücret değişiklikleri fees.write gerektirir ve sonraki faturaları etkiler; hesap para birimi değiştirilemez.Ayrıntılar
Devre dışı bırakmak oturumları iptal eder. payments_paused, mevcut ödeme taramasını değil, yeni faturaları engeller. Ücret değişiklikleri fees.write gerektirir ve sonraki faturaları etkiler; hesap para birimi değiştirilemez.
Yanıt 200 application/json
Örnek yanıt
{
"id": "11111111-1111-4111-8111-111111111111",
"name": "Example shop",
"currency": "EUR",
"balance": "10",
"fee_bps": 300,
"enabled": true,
"payments_paused": false
}Yanıt alanları
Kullanım notları
- merchants.write gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETKullanıcıları Listele/v1/operator/merchants/{merchant_id}/usersSalt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
Sorgu parametreleri
pageisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
searchisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/users" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/users", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/users");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/users",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [],
"page": 1,
"page_size": 25,
"total": 0
}Yanıt alanları
Kullanım notları
- users.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTKullanıcı Oluştur/v1/operator/merchants/{merchant_id}/usersOkuma ve yazma
Satıcı yöneticisi veya seçili projelerle sınırlı kullanıcı ekle.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/users" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"email": "staff@example.test",
"display_name": "Store team",
"onboarding": "invitation",
"access_level": "projects",
"project_ids": [
"11111111-1111-4111-8111-111111111111"
],
"send_invitation_email": false
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"email": "staff@example.test",
"display_name": "Store team",
"onboarding": "invitation",
"access_level": "projects",
"project_ids": [
"11111111-1111-4111-8111-111111111111"
],
"send_invitation_email": false
}`;
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/users", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"email": "staff@example.test",
"display_name": "Store team",
"onboarding": "invitation",
"access_level": "projects",
"project_ids": [
"11111111-1111-4111-8111-111111111111"
],
"send_invitation_email": false
}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/users");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"email": "staff@example.test",
"display_name": "Store team",
"onboarding": "invitation",
"access_level": "projects",
"project_ids": [
"11111111-1111-4111-8111-111111111111"
],
"send_invitation_email": false
}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/users",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
require_password_changesame as merchant creationDavet oluşturmak ayrıca invitations.write gerektirir.
send_invitation_emailsame as merchant creationDavet oluşturmak ayrıca invitations.write gerektirir.
access_leveladmin | projectsisteğe bağlıadmin yalnızca bu satıcının yöneticisidir; asla kurulum/operatör yöneticisi değildir.
project_ids[]UUID[]Yalnızca satıcıya ait projeler. Projeyle sınırlı erişimde seçimler zorunludur; farklı kiracılar arasında erişim yoktur.
Yanıt 201 or 200 application/json
Örnek yanıt
{
"user": {
"id": "22222222-2222-4222-8222-222222222222",
"merchant_id": "11111111-1111-4111-8111-111111111111",
"email": "admin@example.test",
"display_name": "Shop administrator",
"access_level": "admin",
"project_ids": [],
"enabled": true,
"password_setup_required": false,
"custody_acceptance_required": true,
"password_change_required": true
},
"user_id": "22222222-2222-4222-8222-222222222222",
"access_link": null,
"email_delivery": {
"status": "not_requested"
},
"merchant_id": "11111111-1111-4111-8111-111111111111"
}Yanıt alanları
userobject
user_idstringaccess_linkJSON | nullmerchant_idstringKullanım notları
- users.write gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETKullanıcıyı Getir/v1/operator/merchants/{merchant_id}/users/{user_id}Salt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Yol parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/users/YOUR_USER_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/users/YOUR_USER_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/users/YOUR_USER_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/users/YOUR_USER_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"id": "22222222-2222-4222-8222-222222222222",
"merchant_id": "11111111-1111-4111-8111-111111111111",
"email": "admin@example.test",
"display_name": "Shop administrator",
"access_level": "admin",
"project_ids": [],
"enabled": true,
"password_setup_required": false,
"custody_acceptance_required": true,
"password_change_required": true
}Yanıt alanları
Kullanım notları
- users.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTKullanıcıyı Güncelle/v1/operator/merchants/{merchant_id}/users/{user_id}Okuma ve yazma
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
Yol parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/users/YOUR_USER_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"display_name": "Store manager"
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"display_name": "Store manager"
}`;
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/users/YOUR_USER_ID", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"display_name": "Store manager"
}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/users/YOUR_USER_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"display_name": "Store manager"
}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/users/YOUR_USER_ID",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
emailfieldsisteğe bağlıGönderilen alanları günceller; son yönetici koruması sürer. Parolalar için ayrı users.security işlemi vardır.
display_namefieldsisteğe bağlıGönderilen alanları günceller; son yönetici koruması sürer. Parolalar için ayrı users.security işlemi vardır.
enabledfieldsisteğe bağlıGönderilen alanları günceller; son yönetici koruması sürer. Parolalar için ayrı users.security işlemi vardır.
access_levelfieldsisteğe bağlıGönderilen alanları günceller; son yönetici koruması sürer. Parolalar için ayrı users.security işlemi vardır.
project_idsfieldsisteğe bağlıGönderilen alanları günceller; son yönetici koruması sürer. Parolalar için ayrı users.security işlemi vardır.
default_timezonefieldsisteğe bağlıGönderilen alanları günceller; son yönetici koruması sürer. Parolalar için ayrı users.security işlemi vardır.
Yanıt 200 application/json
Örnek yanıt
{
"id": "22222222-2222-4222-8222-222222222222",
"merchant_id": "11111111-1111-4111-8111-111111111111",
"email": "admin@example.test",
"display_name": "Shop administrator",
"access_level": "admin",
"project_ids": [],
"enabled": true,
"password_setup_required": false,
"custody_acceptance_required": true,
"password_change_required": true
}Yanıt alanları
Kullanım notları
- users.write gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTKullanıcı Parolasını Belirle/v1/operator/merchants/{merchant_id}/users/{user_id}/passwordOkuma ve yazma
Barındırılan hesap parolasını belirle ve oturumları iptal et. Mevcut TOTP korunur.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
Yol parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/users/YOUR_USER_ID/password" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"password": "REPLACE_WITH_A_NEW_UNIQUE_PASSWORD",
"require_password_change": true
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"password": "REPLACE_WITH_A_NEW_UNIQUE_PASSWORD",
"require_password_change": true
}`;
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/users/YOUR_USER_ID/password", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"password": "REPLACE_WITH_A_NEW_UNIQUE_PASSWORD",
"require_password_change": true
}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/users/YOUR_USER_ID/password");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"password": "REPLACE_WITH_A_NEW_UNIQUE_PASSWORD",
"require_password_change": true
}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/users/YOUR_USER_ID/password",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"user_id": "11111111-1111-4111-8111-111111111111",
"sessions_revoked": true,
"totp_preserved": true
}Yanıt alanları
Kullanım notları
- users.security gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTKullanıcı Oturumlarını İptal Et/v1/operator/merchants/{merchant_id}/users/{user_id}/revoke-sessionsOkuma ve yazma
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
Yol parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/users/YOUR_USER_ID/revoke-sessions" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{}`;
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/users/YOUR_USER_ID/revoke-sessions", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/users/YOUR_USER_ID/revoke-sessions");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/users/YOUR_USER_ID/revoke-sessions",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"user_id": "11111111-1111-4111-8111-111111111111",
"sessions_revoked": true,
"totp_preserved": true
}Yanıt alanları
Kullanım notları
- users.security gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETDavetleri Listele/v1/operator/merchants/{merchant_id}/invitationsSalt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
Sorgu parametreleri
pageisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
searchisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/invitations" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/invitations", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/invitations");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/invitations",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [],
"page": 1,
"page_size": 25,
"total": 0
}Yanıt alanları
Kullanım notları
- invitations.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTDavet Oluştur/v1/operator/merchants/{merchant_id}/invitationsOkuma ve yazma
Tek kullanımlık davet veya parola sıfırlama bağlantısı oluştur ya da yenile.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/invitations" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"user_id": "11111111-1111-4111-8111-111111111111",
"send_email": false
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"user_id": "11111111-1111-4111-8111-111111111111",
"send_email": false
}`;
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/invitations", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"user_id": "11111111-1111-4111-8111-111111111111",
"send_email": false
}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/invitations");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"user_id": "11111111-1111-4111-8111-111111111111",
"send_email": false
}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/invitations",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
user_idUUID, booleanMevcut hesap için tek kullanımlık bağlantı oluştur/yenile. Etkinleştirilmiş kullanıcılar bir saatlik sıfırlama bağlantısı alır ve users.security gerekir.
send_emailUUID, booleanMevcut hesap için tek kullanımlık bağlantı oluştur/yenile. Etkinleştirilmiş kullanıcılar bir saatlik sıfırlama bağlantısı alır ve users.security gerekir.
new user fieldsalternative to user_idDavet edilen kullanıcıyı oluşturmak için email, display_name, access_level ve project_ids kullan; users.write gerektirir.
Yanıt 201 or 200 application/json
Örnek yanıt
{
"user_id": "22222222-2222-4222-8222-222222222222",
"email": "admin@example.test",
"kind": "invitation",
"expires_at": "2026-10-03T12:00:00Z",
"url": "https://merchant.example.com/account-access.html#token=YOUR_PRIVATE_INVITATION_TOKEN"
}Yanıt alanları
Kullanım notları
- invitations.write gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETDaveti Getir/v1/operator/invitations/{invitation_id}Salt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Yol parametreleri
invitation_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/invitations/YOUR_INVITATION_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/invitations/YOUR_INVITATION_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/invitations/YOUR_INVITATION_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/invitations/YOUR_INVITATION_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"id": "44444444-4444-4444-8444-444444444444",
"user_id": "22222222-2222-4222-8222-222222222222",
"merchant_id": "11111111-1111-4111-8111-111111111111",
"kind": "invitation",
"status": "pending",
"created_at": "2026-10-01T12:00:00Z",
"expires_at": "2026-10-03T12:00:00Z"
}Yanıt alanları
Kullanım notları
- invitations.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTDaveti Yeniden Gönder/v1/operator/invitations/{invitation_id}/resendOkuma ve yazma
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
Yol parametreleri
invitation_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/invitations/YOUR_INVITATION_ID/resend" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"send_email": false
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"send_email": false
}`;
const response = await fetch("https://api.example.com/v1/operator/invitations/YOUR_INVITATION_ID/resend", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"send_email": false
}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/invitations/YOUR_INVITATION_ID/resend");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"send_email": false
}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/invitations/YOUR_INVITATION_ID/resend",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
send_emailbooleanisteğe bağlıÖnceki token'ın yerini alır; asla kredi eklemez. Yeni üretilen bağlantıyı bir kez döndürür. Zaten etkinleştirilmiş hesap için users.security gerekir.
Yanıt 200 application/json
Örnek yanıt
{
"user_id": "22222222-2222-4222-8222-222222222222",
"email": "admin@example.test",
"kind": "invitation",
"expires_at": "2026-10-03T12:00:00Z",
"url": "https://merchant.example.com/account-access.html#token=YOUR_PRIVATE_INVITATION_TOKEN"
}Yanıt alanları
Kullanım notları
- invitations.write gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTDaveti İptal Et/v1/operator/invitations/{invitation_id}/revokeOkuma ve yazma
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
Yol parametreleri
invitation_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/invitations/YOUR_INVITATION_ID/revoke" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{}`;
const response = await fetch("https://api.example.com/v1/operator/invitations/YOUR_INVITATION_ID/revoke", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/invitations/YOUR_INVITATION_ID/revoke");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/invitations/YOUR_INVITATION_ID/revoke",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"revoked": true,
"invitation_id": "44444444-4444-4444-8444-444444444444"
}Yanıt alanları
Kullanım notları
- invitations.write gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETKredileri Getir/v1/operator/merchants/{merchant_id}/creditsSalt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/credits" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/credits", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/credits");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/credits",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"id": "11111111-1111-4111-8111-111111111111",
"name": "Example shop",
"currency": "EUR",
"balance": "10",
"fee_bps": 300,
"enabled": true,
"payments_paused": false,
"external_id": "customer-1042"
}Yanıt alanları
Kullanım notları
- credits.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETKredi Defterini Listele/v1/operator/merchants/{merchant_id}/credits/ledgerSalt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
Sorgu parametreleri
pageisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
qisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/credits/ledger" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/credits/ledger", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/credits/ledger");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/credits/ledger",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [],
"page": 1,
"page_size": 25,
"total": 0
}Yanıt alanları
Kullanım notları
- credits.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTKredileri Düzelt/v1/operator/merchants/{merchant_id}/credits/adjustmentsOkuma ve yazma
Bu satıcının ön ödemeli hesap defterine gerekçeli kredi tanımı veya düzeltme ekle.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/credits/adjustments" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"amount": "10.00",
"note": "Promotional credit",
"request_id": "11111111-1111-4111-8111-111111111111"
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"amount": "10.00",
"note": "Promotional credit",
"request_id": "11111111-1111-4111-8111-111111111111"
}`;
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/credits/adjustments", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"amount": "10.00",
"note": "Promotional credit",
"request_id": "11111111-1111-4111-8111-111111111111"
}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/credits/adjustments");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"amount": "10.00",
"note": "Promotional credit",
"request_id": "11111111-1111-4111-8111-111111111111"
}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/credits/adjustments",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
amountsigned decimal stringzorunluSatıcı kredi para biriminde en fazla altı ondalık basamakla pozitif kredi tanımı veya negatif düzeltme. Zincir üstü transfer değildir.
Yanıt 200 application/json
Örnek yanıt
{
"balance": "25"
}Yanıt alanları
balancestringKullanım notları
- credits.write gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETBakiye Yüklemelerini Listele/v1/operator/merchants/{merchant_id}/topupsSalt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
Sorgu parametreleri
pageisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
searchisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/topups" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/topups", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/topups");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/topups",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [],
"page": 1,
"page_size": 25,
"total": 0
}Yanıt alanları
Kullanım notları
- topups.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTBakiye Yüklemesi Oluştur/v1/operator/merchants/{merchant_id}/topupsOkuma ve yazma
Ön ödemeli kredi için ödeme sayfası oluştur; asla elle ödendi işaretleme.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/topups" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"amount": "25.00",
"request_id": "11111111-1111-4111-8111-111111111111"
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"amount": "25.00",
"request_id": "11111111-1111-4111-8111-111111111111"
}`;
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/topups", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"amount": "25.00",
"request_id": "11111111-1111-4111-8111-111111111111"
}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/topups");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"amount": "25.00",
"request_id": "11111111-1111-4111-8111-111111111111"
}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/topups",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 201 or 200 application/json
Örnek yanıt
{
"id": "44444444-4444-4444-8444-444444444444",
"invoice_id": "33333333-3333-4333-8333-333333333333",
"checkout_url": "https://pay.example.com/invoice/33333333-3333-4333-8333-333333333333"
}Yanıt alanları
Kullanım notları
- topups.write gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETBakiye Yüklemesini Getir/v1/operator/merchants/{merchant_id}/topups/{topup_id}Salt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Yol parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/topups/YOUR_TOPUP_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/topups/YOUR_TOPUP_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/topups/YOUR_TOPUP_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/topups/YOUR_TOPUP_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"id": "44444444-4444-4444-8444-444444444444",
"merchant_id": "11111111-1111-4111-8111-111111111111",
"invoice_id": "33333333-3333-4333-8333-333333333333",
"amount": "25",
"currency": "EUR",
"status": "pending",
"invoice_status": "new",
"checkout_url": "https://pay.example.com/invoice/33333333-3333-4333-8333-333333333333"
}Yanıt alanları
Kullanım notları
- topups.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETRaporlar/v1/operator/reportsSalt okunur
Operatör finansal genel bakışını oku. Barındırılan tüm satıcılara erişim gerektirir.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Sorgu parametreleri
periodisteğe bağlıFinans filtreleri. period varsayılanı last30; YYYY-MM-DD start/end ile custom kullan. Yalnızca tüm satıcılara erişen kimlik bilgileri.
startisteğe bağlıFinans filtreleri. period varsayılanı last30; YYYY-MM-DD start/end ile custom kullan. Yalnızca tüm satıcılara erişen kimlik bilgileri.
endisteğe bağlıFinans filtreleri. period varsayılanı last30; YYYY-MM-DD start/end ile custom kullan. Yalnızca tüm satıcılara erişen kimlik bilgileri.
currencyisteğe bağlıFinans filtreleri. period varsayılanı last30; YYYY-MM-DD start/end ile custom kullan. Yalnızca tüm satıcılara erişen kimlik bilgileri.
merchant_idisteğe bağlıFinans filtreleri. period varsayılanı last30; YYYY-MM-DD start/end ile custom kullan. Yalnızca tüm satıcılara erişen kimlik bilgileri.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/reports" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/reports", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/reports");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/reports",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"summary": {
"fees": "10",
"costs": "3",
"margin": "7",
"credits": "25",
"pending": 0,
"missing_rates": 0
},
"merchants": [],
"filters": {
"period": "last30",
"currency": "EUR",
"timezone": "UTC"
},
"basis": "first_settlement_latest_net_fees"
}Yanıt alanları
Kullanım notları
- reports.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Toplamlar hesaplanmadan önce kendi işletmesine ait satırlar, maliyetler ve sayılar hariç tutulur. Kendi işletmesine ait merchant_id filtresi 404 döndürür. Raporlama kurulum saat dilimini kullanır.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETDenetim Kayıtlarını Listele/v1/operator/auditSalt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Sorgu parametreleri
merchant_idisteğe bağlıİzin verilen satıcıyı, tam olay türünü (events) veya eylem metnini (audit) filtrele. Olay saklama: 30 gün.
searchisteğe bağlıİzin verilen satıcıyı, tam olay türünü (events) veya eylem metnini (audit) filtrele. Olay saklama: 30 gün.
pageisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/audit" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/audit", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/audit");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/audit",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [],
"page": 1,
"page_size": 25,
"total": 0
}Yanıt alanları
Kullanım notları
- audit.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETOlayları Listele/v1/operator/eventsSalt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Sorgu parametreleri
merchant_idisteğe bağlıİzin verilen satıcıyı, tam olay türünü (events) veya eylem metnini (audit) filtrele. Olay saklama: 30 gün.
event_typeisteğe bağlıİzin verilen satıcıyı, tam olay türünü (events) veya eylem metnini (audit) filtrele. Olay saklama: 30 gün.
pageisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/events" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/events", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/events");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/events",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [],
"page": 1,
"page_size": 25,
"total": 0
}Yanıt alanları
Kullanım notları
- events.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETWebhook'ları Listele/v1/operator/webhooksSalt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Sorgu parametreleri
pageisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
searchisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/webhooks" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/webhooks", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/webhooks");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/webhooks",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [],
"page": 1,
"page_size": 25,
"total": 0
}Yanıt alanları
Kullanım notları
- events.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTWebhook Oluştur/v1/operator/webhooksOkuma ve yazma
Gelecekteki Operatör yaşam döngüsü olaylarına abone ol. Mağaza ödeme webhook'u değildir.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/webhooks" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"url": "https://shop.example.test/operator-events",
"events": [
"merchant.created",
"topup.settled"
],
"merchant_ids": [],
"enabled": true
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"url": "https://shop.example.test/operator-events",
"events": [
"merchant.created",
"topup.settled"
],
"merchant_ids": [],
"enabled": true
}`;
const response = await fetch("https://api.example.com/v1/operator/webhooks", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"url": "https://shop.example.test/operator-events",
"events": [
"merchant.created",
"topup.settled"
],
"merchant_ids": [],
"enabled": true
}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/webhooks");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"url": "https://shop.example.test/operator-events",
"events": [
"merchant.created",
"topup.settled"
],
"merchant_ids": [],
"enabled": true
}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/webhooks",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
urlpublic HTTPS URLzorunluKimlik bilgisi, özel IP veya yönlendirme yok. Teslimde DNS/IP yeniden kontrol edilir.
events[]string[]zorunluFatura geri çağrıları yerine Operatör rehberindeki yaşam döngüsü olaylarını seç.
merchant_ids[]UUID[]isteğe bağlıBoş olması bu kimlik bilgisinin izin verdiği tüm satıcılar demektir. Güncel kapsam kısıtlamaları yeniden kontrol edilir.
enabledbooleanisteğe bağlıDuraklatılan uç noktalar kuyruktaki teslimleri korur; yeniden etkinleştirme geçerli saklanan işleri devam ettirir.
Yanıt 201 or 200 application/json
Örnek yanıt
{
"id": "11111111-1111-4111-8111-111111111111",
"signing_secret": "wco_whsec_EXAMPLE_ONLY_SAVE_ONCE"
}Yanıt alanları
Kullanım notları
- webhooks.write + events.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTWebhook'u Güncelle/v1/operator/webhooks/{webhook_id}Okuma ve yazma
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
Yol parametreleri
webhook_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/webhooks/YOUR_WEBHOOK_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"url": "https://shop.example.test/operator-events",
"events": [
"topup.settled"
],
"merchant_ids": [],
"enabled": false
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"url": "https://shop.example.test/operator-events",
"events": [
"topup.settled"
],
"merchant_ids": [],
"enabled": false
}`;
const response = await fetch("https://api.example.com/v1/operator/webhooks/YOUR_WEBHOOK_ID", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"url": "https://shop.example.test/operator-events",
"events": [
"topup.settled"
],
"merchant_ids": [],
"enabled": false
}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/webhooks/YOUR_WEBHOOK_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"url": "https://shop.example.test/operator-events",
"events": [
"topup.settled"
],
"merchant_ids": [],
"enabled": false
}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/webhooks/YOUR_WEBHOOK_ID",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
urlpublic HTTPS URLzorunluKimlik bilgisi, özel IP veya yönlendirme yok. Teslimde DNS/IP yeniden kontrol edilir.
events[]string[]zorunluFatura geri çağrıları yerine Operatör rehberindeki yaşam döngüsü olaylarını seç.
merchant_ids[]UUID[]isteğe bağlıBoş olması bu kimlik bilgisinin izin verdiği tüm satıcılar demektir. Güncel kapsam kısıtlamaları yeniden kontrol edilir.
enabledbooleanisteğe bağlıDuraklatılan uç noktalar kuyruktaki teslimleri korur; yeniden etkinleştirme geçerli saklanan işleri devam ettirir.
Yanıt 200 application/json
Örnek yanıt
{
"id": "44444444-4444-4444-8444-444444444444",
"signing_secret": null
}Yanıt alanları
Kullanım notları
- webhooks.write + events.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTWebhook Sırrını Yenile/v1/operator/webhooks/{webhook_id}/rotateOkuma ve yazma
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
Yol parametreleri
webhook_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/webhooks/YOUR_WEBHOOK_ID/rotate" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{}`;
const response = await fetch("https://api.example.com/v1/operator/webhooks/YOUR_WEBHOOK_ID/rotate", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/webhooks/YOUR_WEBHOOK_ID/rotate");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/webhooks/YOUR_WEBHOOK_ID/rotate",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"id": "11111111-1111-4111-8111-111111111111",
"signing_secret": "wco_whsec_EXAMPLE_ONLY_SAVE_ONCE"
}Yanıt alanları
Kullanım notları
- webhooks.write + events.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETWebhook Teslimlerini Listele/v1/operator/webhooks/{webhook_id}/deliveriesSalt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Yol parametreleri
webhook_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
Sorgu parametreleri
pageisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/webhooks/YOUR_WEBHOOK_ID/deliveries" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/webhooks/YOUR_WEBHOOK_ID/deliveries", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/webhooks/YOUR_WEBHOOK_ID/deliveries");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/webhooks/YOUR_WEBHOOK_ID/deliveries",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [],
"page": 1,
"page_size": 25,
"total": 0
}Yanıt alanları
Kullanım notları
- events.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETProjeleri Listele/v1/operator/merchants/{merchant_id}/projectsSalt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
Sorgu parametreleri
pageisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
searchisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [],
"page": 1,
"page_size": 25,
"total": 0
}Yanıt alanları
Kullanım notları
- projects.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTProje Oluştur/v1/operator/merchants/{merchant_id}/projectsOkuma ve yazma
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Online shop",
"slug": "online-shop",
"enabled": false
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"name": "Online shop",
"slug": "online-shop",
"enabled": false
}`;
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"name": "Online shop",
"slug": "online-shop",
"enabled": false
}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"name": "Online shop",
"slug": "online-shop",
"enabled": false
}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
namestringszorunluAd ve benzersiz sabit proje tanımlayıcısı. Mevcut proje başlangıç sürecini kullanarak yerel cüzdanlar oluşturur; asla fon transfer etmez.
slugstringszorunluAd ve benzersiz sabit proje tanımlayıcısı. Mevcut proje başlangıç sürecini kullanarak yerel cüzdanlar oluşturur; asla fon transfer etmez.
enabledisteğe bağlıenabled varsayılanı true; duraklatılmış oluşturup önce mağazayı yapılandırmak önerilir.
reporting_timezoneisteğe bağlıenabled varsayılanı true; duraklatılmış oluşturup önce mağazayı yapılandırmak önerilir.
checkout_titleisteğe bağlıenabled varsayılanı true; duraklatılmış oluşturup önce mağazayı yapılandırmak önerilir.
checkout_descriptionisteğe bağlıenabled varsayılanı true; duraklatılmış oluşturup önce mağazayı yapılandırmak önerilir.
checkout_themeisteğe bağlıenabled varsayılanı true; duraklatılmış oluşturup önce mağazayı yapılandırmak önerilir.
checkout_accent_coloristeğe bağlıenabled varsayılanı true; duraklatılmış oluşturup önce mağazayı yapılandırmak önerilir.
Yanıt 201 or 200 application/json
Örnek yanıt
{
"id": "33333333-3333-4333-8333-333333333333",
"slug": "example-shop",
"name": "Example shop",
"enabled": false,
"reporting_currency": "EUR",
"reporting_timezone": "Europe/Berlin",
"stores": []
}Yanıt alanları
Kullanım notları
- projects.write gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETProjeyi Getir/v1/operator/merchants/{merchant_id}/projects/{project_id}Salt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Yol parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"id": "33333333-3333-4333-8333-333333333333",
"slug": "example-shop",
"name": "Example shop",
"enabled": false,
"reporting_currency": "EUR",
"reporting_timezone": "Europe/Berlin",
"stores": []
}Yanıt alanları
Kullanım notları
- projects.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTProjeyi Güncelle/v1/operator/merchants/{merchant_id}/projects/{project_id}Okuma ve yazma
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
Yol parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"enabled": true
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"enabled": true
}`;
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"enabled": true
}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"enabled": true
}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"id": "33333333-3333-4333-8333-333333333333",
"slug": "example-shop",
"name": "Example shop",
"enabled": false,
"reporting_currency": "EUR",
"reporting_timezone": "Europe/Berlin",
"stores": []
}Yanıt alanları
Kullanım notları
- projects.write gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETMağazaları Listele/v1/operator/merchants/{merchant_id}/projects/{project_id}/storesSalt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Yol parametreleri
Sorgu parametreleri
pageisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
searchisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [],
"page": 1,
"page_size": 25,
"total": 0
}Yanıt alanları
Kullanım notları
- projects.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTMağaza Oluştur/v1/operator/merchants/{merchant_id}/projects/{project_id}/storesOkuma ve yazma
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
Yol parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Web checkout",
"slug": "web-checkout",
"default_currency": "EUR",
"enabled": false
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"name": "Web checkout",
"slug": "web-checkout",
"default_currency": "EUR",
"enabled": false
}`;
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"name": "Web checkout",
"slug": "web-checkout",
"default_currency": "EUR",
"enabled": false
}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"name": "Web checkout",
"slug": "web-checkout",
"default_currency": "EUR",
"enabled": false
}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
default_currencyisteğe bağlıYüzdeler için ondalık sayı dizeleri kullan. Yeni mağazalar projenin varsayılan mağaza görünümünü devralır.
invoice_expiry_minutesisteğe bağlıYüzdeler için ondalık sayı dizeleri kullan. Yeni mağazalar projenin varsayılan mağaza görünümünü devralır.
exchange_rate_spread_percentisteğe bağlıYüzdeler için ondalık sayı dizeleri kullan. Yeni mağazalar projenin varsayılan mağaza görünümünü devralır.
underpayment_tolerance_percentisteğe bağlıYüzdeler için ondalık sayı dizeleri kullan. Yeni mağazalar projenin varsayılan mağaza görünümünü devralır.
enabledisteğe bağlıKabul edilen varlıkları payment-assets ile yapılandır; sıfır tutarlı faturalar varsayılan olarak kapalıdır.
is_defaultisteğe bağlıKabul edilen varlıkları payment-assets ile yapılandır; sıfır tutarlı faturalar varsayılan olarak kapalıdır.
allow_zero_amount_invoicesisteğe bağlıKabul edilen varlıkları payment-assets ile yapılandır; sıfır tutarlı faturalar varsayılan olarak kapalıdır.
allow_underpaymentsisteğe bağlıKabul edilen varlıkları payment-assets ile yapılandır; sıfır tutarlı faturalar varsayılan olarak kapalıdır.
allow_overpaymentsisteğe bağlıKabul edilen varlıkları payment-assets ile yapılandır; sıfır tutarlı faturalar varsayılan olarak kapalıdır.
allowed_chain_slugsisteğe bağlıKabul edilen varlıkları payment-assets ile yapılandır; sıfır tutarlı faturalar varsayılan olarak kapalıdır.
ipn_enabledisteğe bağlıIPN ve dönüş URL'leri mevcut URL doğrulamasına uyar. Serbest HTML/JavaScript yoktur.
default_ipn_urlisteğe bağlıIPN ve dönüş URL'leri mevcut URL doğrulamasına uyar. Serbest HTML/JavaScript yoktur.
default_redirect_urlisteğe bağlıIPN ve dönüş URL'leri mevcut URL doğrulamasına uyar. Serbest HTML/JavaScript yoktur.
default_cancel_urlisteğe bağlıIPN ve dönüş URL'leri mevcut URL doğrulamasına uyar. Serbest HTML/JavaScript yoktur.
redirect_automaticallyisteğe bağlıIPN ve dönüş URL'leri mevcut URL doğrulamasına uyar. Serbest HTML/JavaScript yoktur.
checkout_languageisteğe bağlıDesteklenen dil ve etkin rol alan adları kullan; gömme kökenlerini açıkça yapılandır.
embed_enabledisteğe bağlıDesteklenen dil ve etkin rol alan adları kullan; gömme kökenlerini açıkça yapılandır.
allowed_embed_originsisteğe bağlıDesteklenen dil ve etkin rol alan adları kullan; gömme kökenlerini açıkça yapılandır.
domainsisteğe bağlıDesteklenen dil ve etkin rol alan adları kullan; gömme kökenlerini açıkça yapılandır.
Yanıt 201 or 200 application/json
Örnek yanıt
{
"id": "44444444-4444-4444-8444-444444444444",
"project_id": "33333333-3333-4333-8333-333333333333",
"slug": "online",
"name": "Online shop",
"enabled": false,
"default_currency": "EUR",
"invoice_expiry_minutes": 60
}Yanıt alanları
Kullanım notları
- projects.write gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETMağazayı Getir/v1/operator/merchants/{merchant_id}/projects/{project_id}/stores/{store_id}Salt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
project_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
store_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"id": "44444444-4444-4444-8444-444444444444",
"project_id": "33333333-3333-4333-8333-333333333333",
"slug": "online",
"name": "Online shop",
"enabled": false,
"default_currency": "EUR",
"invoice_expiry_minutes": 60
}Yanıt alanları
Kullanım notları
- projects.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTMağazayı Güncelle/v1/operator/merchants/{merchant_id}/projects/{project_id}/stores/{store_id}Okuma ve yazma
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
project_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
store_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"enabled": true
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"enabled": true
}`;
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"enabled": true
}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"enabled": true
}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"id": "44444444-4444-4444-8444-444444444444",
"project_id": "33333333-3333-4333-8333-333333333333",
"slug": "online",
"name": "Online shop",
"enabled": false,
"default_currency": "EUR",
"invoice_expiry_minutes": 60
}Yanıt alanları
Kullanım notları
- projects.write gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETMağaza Görünümünü Getir/v1/operator/merchants/{merchant_id}/projects/{project_id}/stores/{store_id}/checkout-appearanceSalt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
project_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
store_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/checkout-appearance" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/checkout-appearance", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/checkout-appearance");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/checkout-appearance",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"revision": 1,
"settings": {
"inherit_default_store": true
},
"effective": {
"title": "Pay securely"
}
}Yanıt alanları
Kullanım notları
- projects.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTMağaza Görünümünü Güncelle/v1/operator/merchants/{merchant_id}/projects/{project_id}/stores/{store_id}/checkout-appearanceOkuma ve yazma
Doğrulanmış, revizyon korumalı mağaza tasarımını kaydet.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
project_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
store_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/checkout-appearance" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"revision": 1,
"settings": {
"inherit_default_store": false,
"title": "Pay securely",
"theme": "light"
}
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"revision": 1,
"settings": {
"inherit_default_store": false,
"title": "Pay securely",
"theme": "light"
}
}`;
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/checkout-appearance", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"revision": 1,
"settings": {
"inherit_default_store": false,
"title": "Pay securely",
"theme": "light"
}
}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/checkout-appearance");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"revision": 1,
"settings": {
"inherit_default_store": false,
"title": "Pay securely",
"theme": "light"
}
}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/checkout-appearance",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
revisionintegerzorunluÖnce GET ile güncel revizyonu oku. Eski revizyon, başka düzenleyenin çalışmasının üzerine yazmadan başarısız olur.
settingsobjectzorunlu
inherit_default_store, markalama, giriş/çıkış metinleri, yazı boyutları ve görünürlük dahil doğrulanmış ödeme sayfası görünümü. Serbest HTML/JavaScript yoktur. Görsel baytlarını yüklemek yalnızca konsoldan mümkündür.Ayrıntılar
inherit_default_store, markalama, giriş/çıkış metinleri, yazı boyutları ve görünürlük dahil doğrulanmış ödeme sayfası görünümü. Serbest HTML/JavaScript yoktur. Görsel baytlarını yüklemek yalnızca konsoldan mümkündür.
Yanıt 200 application/json
Örnek yanıt
{
"settings": {
"inherit_default_store": false,
"title": "Pay securely",
"theme": "light"
},
"revision": 2
}Yanıt alanları
Kullanım notları
- projects.write gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETMağaza Ödeme Varlıklarını Listele/v1/operator/merchants/{merchant_id}/projects/{project_id}/stores/{store_id}/payment-assetsSalt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
project_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
store_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/payment-assets" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/payment-assets", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/payment-assets");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/payment-assets",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": []
}Yanıt alanları
data[]arrayKullanım notları
- projects.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTMağaza Ödeme Varlıklarını Güncelle/v1/operator/merchants/{merchant_id}/projects/{project_id}/stores/{store_id}/payment-assetsOkuma ve yazma
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
project_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
store_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/payment-assets" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"assets": [
{
"asset_id": "11111111-1111-4111-8111-111111111111",
"display_order": 0
}
]
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"assets": [
{
"asset_id": "11111111-1111-4111-8111-111111111111",
"display_order": 0
}
]
}`;
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/payment-assets", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"assets": [
{
"asset_id": "11111111-1111-4111-8111-111111111111",
"display_order": 0
}
]
}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/payment-assets");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"assets": [
{
"asset_id": "11111111-1111-4111-8111-111111111111",
"display_order": 0
}
]
}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/payment-assets",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
assets[]object[]zorunlu
Zincir üstü yöntemleri tamamen değiştirir: asset_id UUID ve display_order. [] kabul edilen zincir üstü varlıkları temizler. Yalnızca doğrulanmış proje varlıkları; Lightning'i yapılandırmaz.Ayrıntılar
Zincir üstü yöntemleri tamamen değiştirir: asset_id UUID ve display_order. [] kabul edilen zincir üstü varlıkları temizler. Yalnızca doğrulanmış proje varlıkları; Lightning'i yapılandırmaz.
Yanıt 200 application/json
Örnek yanıt
{
"data": []
}Yanıt alanları
data[]arrayKullanım notları
- projects.write gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETMağaza Webhook'larını Listele/v1/operator/merchants/{merchant_id}/projects/{project_id}/stores/{store_id}/webhooksSalt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
project_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
store_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
Sorgu parametreleri
pageisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
searchisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/webhooks" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/webhooks", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/webhooks");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/webhooks",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [],
"page": 1,
"page_size": 25,
"total": 0
}Yanıt alanları
Kullanım notları
- projects.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTMağaza Webhook'u Oluştur/v1/operator/merchants/{merchant_id}/projects/{project_id}/stores/{store_id}/webhooksOkuma ve yazma
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
project_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
store_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/webhooks" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Orders",
"url": "https://shop.example.test/payments",
"event_types": [
"invoice.settled"
],
"enabled": true,
"automatic_redelivery": true
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"name": "Orders",
"url": "https://shop.example.test/payments",
"event_types": [
"invoice.settled"
],
"enabled": true,
"automatic_redelivery": true
}`;
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/webhooks", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"name": "Orders",
"url": "https://shop.example.test/payments",
"event_types": [
"invoice.settled"
],
"enabled": true,
"automatic_redelivery": true
}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/webhooks");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"name": "Orders",
"url": "https://shop.example.test/payments",
"event_types": [
"invoice.settled"
],
"enabled": true,
"automatic_redelivery": true
}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/webhooks",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
namestrings / arrayzorunluHerkese açık HTTPS alıcısı ve IPN/webhook belgelerindeki fatura olay adları.
urlstrings / arrayzorunluHerkese açık HTTPS alıcısı ve IPN/webhook belgelerindeki fatura olay adları.
event_types[]strings / arrayzorunluHerkese açık HTTPS alıcısı ve IPN/webhook belgelerindeki fatura olay adları.
enabledbooleansisteğe bağlıOluşturma imzalama sırrını bir kez döndürür. Bunlar Operatör yaşam döngüsü olayları değil, mağaza ödeme geri çağrılarıdır.
automatic_redeliverybooleansisteğe bağlıOluşturma imzalama sırrını bir kez döndürür. Bunlar Operatör yaşam döngüsü olayları değil, mağaza ödeme geri çağrılarıdır.
Yanıt 201 or 200 application/json
Örnek yanıt
{
"signing_secret": "EXAMPLE_ONLY_SAVE_ONCE",
"endpoint": {
"id": "44444444-4444-4444-8444-444444444444",
"name": "Orders",
"enabled": true
},
"secret_visible_once": true
}Yanıt alanları
Kullanım notları
- projects.write gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTMağaza Webhook'unu Güncelle/v1/operator/merchants/{merchant_id}/projects/{project_id}/stores/{store_id}/webhooks/{webhook_id}Okuma ve yazma
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
project_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
store_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
webhook_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/webhooks/YOUR_WEBHOOK_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Orders",
"url": "https://shop.example.test/payments",
"event_types": [
"invoice.settled"
],
"enabled": false,
"automatic_redelivery": true
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"name": "Orders",
"url": "https://shop.example.test/payments",
"event_types": [
"invoice.settled"
],
"enabled": false,
"automatic_redelivery": true
}`;
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/webhooks/YOUR_WEBHOOK_ID", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"name": "Orders",
"url": "https://shop.example.test/payments",
"event_types": [
"invoice.settled"
],
"enabled": false,
"automatic_redelivery": true
}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/webhooks/YOUR_WEBHOOK_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"name": "Orders",
"url": "https://shop.example.test/payments",
"event_types": [
"invoice.settled"
],
"enabled": false,
"automatic_redelivery": true
}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/webhooks/YOUR_WEBHOOK_ID",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
namestrings / arrayzorunluHerkese açık HTTPS alıcısı ve IPN/webhook belgelerindeki fatura olay adları.
urlstrings / arrayzorunluHerkese açık HTTPS alıcısı ve IPN/webhook belgelerindeki fatura olay adları.
event_types[]strings / arrayzorunluHerkese açık HTTPS alıcısı ve IPN/webhook belgelerindeki fatura olay adları.
enabledbooleansisteğe bağlıOluşturma imzalama sırrını bir kez döndürür. Bunlar Operatör yaşam döngüsü olayları değil, mağaza ödeme geri çağrılarıdır.
automatic_redeliverybooleansisteğe bağlıOluşturma imzalama sırrını bir kez döndürür. Bunlar Operatör yaşam döngüsü olayları değil, mağaza ödeme geri çağrılarıdır.
Yanıt 200 application/json
Örnek yanıt
{
"id": "44444444-4444-4444-8444-444444444444",
"name": "Orders",
"enabled": true
}Yanıt alanları
Kullanım notları
- projects.write gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETFaturaları Listele/v1/operator/merchants/{merchant_id}/projects/{project_id}/invoicesSalt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Yol parametreleri
Sorgu parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/invoices" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/invoices", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/invoices");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/invoices",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [],
"pagination": {
"limit": 25,
"offset": 0,
"total": 0,
"has_more": false
}
}Yanıt alanları
Kullanım notları
- reports.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETFaturayı Getir/v1/operator/merchants/{merchant_id}/projects/{project_id}/invoices/{invoice_id}Salt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
project_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
invoice_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/invoices/YOUR_INVOICE_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/invoices/YOUR_INVOICE_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/invoices/YOUR_INVOICE_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/invoices/YOUR_INVOICE_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"invoice_id": "44444444-4444-4444-8444-444444444444",
"project_id": "33333333-3333-4333-8333-333333333333",
"amount": "25",
"currency": "EUR",
"status": "new",
"metadata": {},
"payment_intents": []
}Yanıt alanları
Kullanım notları
- reports.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
- invoice_id, dahili id değil, oluşturulurken ve geri çağrılarda döndürülen herkese açık fatura kimliğidir.
Hatalar
GETCüzdanları Listele/v1/operator/merchants/{merchant_id}/projects/{project_id}/walletsSalt okunur
Önbellekteki herkese açık cüzdan bakiyelerini oku; özel anahtar veya kurtarma ifadelerini asla değil.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Yol parametreleri
Sorgu parametreleri
pageisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
searchisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/wallets" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/wallets", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/wallets");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/wallets",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [],
"page": 1,
"page_size": 25,
"total": 0
}Yanıt alanları
Kullanım notları
- reports.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Bakiyeler güncellik alanları içeren önbellek gözlemleridir; harcanabilir bakiye garantisi değildir. Gönderim ve anahtar dışa aktarma bu API'de sunulmaz.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETCüzdan Adreslerini Listele/v1/operator/merchants/{merchant_id}/projects/{project_id}/wallets/{wallet_id}/addressesSalt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
project_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
wallet_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
Sorgu parametreleri
limitisteğe bağlıLimit 1–50, varsayılan 25. Sonraki sayfa için next_cursor değerini before olarak gönder. İlk sayfada before kullanma. has_balance=false ve hide_small_balances=false boş/küçük bakiyeleri dahil eder.Ayrıntılar
Limit 1–50, varsayılan 25. Sonraki sayfa için next_cursor değerini before olarak gönder. İlk sayfada before kullanma. has_balance=false ve hide_small_balances=false boş/küçük bakiyeleri dahil eder.
beforeisteğe bağlıLimit 1–50, varsayılan 25. Sonraki sayfa için next_cursor değerini before olarak gönder. İlk sayfada before kullanma. has_balance=false ve hide_small_balances=false boş/küçük bakiyeleri dahil eder.Ayrıntılar
Limit 1–50, varsayılan 25. Sonraki sayfa için next_cursor değerini before olarak gönder. İlk sayfada before kullanma. has_balance=false ve hide_small_balances=false boş/küçük bakiyeleri dahil eder.
searchisteğe bağlıLimit 1–50, varsayılan 25. Sonraki sayfa için next_cursor değerini before olarak gönder. İlk sayfada before kullanma. has_balance=false ve hide_small_balances=false boş/küçük bakiyeleri dahil eder.Ayrıntılar
Limit 1–50, varsayılan 25. Sonraki sayfa için next_cursor değerini before olarak gönder. İlk sayfada before kullanma. has_balance=false ve hide_small_balances=false boş/küçük bakiyeleri dahil eder.
has_balanceisteğe bağlıLimit 1–50, varsayılan 25. Sonraki sayfa için next_cursor değerini before olarak gönder. İlk sayfada before kullanma. has_balance=false ve hide_small_balances=false boş/küçük bakiyeleri dahil eder.Ayrıntılar
Limit 1–50, varsayılan 25. Sonraki sayfa için next_cursor değerini before olarak gönder. İlk sayfada before kullanma. has_balance=false ve hide_small_balances=false boş/küçük bakiyeleri dahil eder.
hide_small_balancesisteğe bağlıLimit 1–50, varsayılan 25. Sonraki sayfa için next_cursor değerini before olarak gönder. İlk sayfada before kullanma. has_balance=false ve hide_small_balances=false boş/küçük bakiyeleri dahil eder.Ayrıntılar
Limit 1–50, varsayılan 25. Sonraki sayfa için next_cursor değerini before olarak gönder. İlk sayfada before kullanma. has_balance=false ve hide_small_balances=false boş/küçük bakiyeleri dahil eder.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/wallets/YOUR_WALLET_ID/addresses" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/wallets/YOUR_WALLET_ID/addresses", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/wallets/YOUR_WALLET_ID/addresses");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/projects/YOUR_PROJECT_ID/wallets/YOUR_WALLET_ID/addresses",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"wallet": {
"id": "22222222-2222-4222-8222-222222222222",
"chain_slug": "ethereum"
},
"items": [],
"total": 0,
"total_pages": 1,
"next_cursor": null,
"reporting_currency": "EUR",
"has_balance": true,
"hide_small_balances": true,
"small_balance_threshold": {
"amount": "0.20",
"currency": "EUR"
}
}Yanıt alanları
Kullanım notları
- reports.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETSatıcı Kimlik Bilgilerini Listele/v1/operator/merchants/{merchant_id}/api-credentialsSalt okunur
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
Sorgu parametreleri
pageisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
searchisteğe bağlıSayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.Ayrıntılar
Sayfa numarası 1'den başlar; sayfa başına 25 öğe. Satıcılar, kullanıcılar, projeler, mağazalar, cüzdanlar, kimlik bilgileri ve webhook'larda arama desteklenir; yerel olay listeleri kendi özel filtrelerini kullanır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/api-credentials" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/api-credentials", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/api-credentials");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/api-credentials",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [],
"page": 1,
"page_size": 25,
"total": 0
}Yanıt alanları
Kullanım notları
- merchant_credentials.read gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTSatıcı Kimlik Bilgisi Oluştur/v1/operator/merchants/{merchant_id}/api-credentialsOkuma ve yazma
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
Yol parametreleri
merchant_idUUIDzorunluKanonik küçük harfli kaynak UUID'si; kimlik bilgisinin satıcı kapsamına ait olmalıdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/api-credentials" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Store integration",
"access_level": "read_only",
"enabled": true,
"ip_restriction_enabled": false,
"allowed_ips": [],
"project_ids": [
"11111111-1111-4111-8111-111111111111"
]
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"name": "Store integration",
"access_level": "read_only",
"enabled": true,
"ip_restriction_enabled": false,
"allowed_ips": [],
"project_ids": [
"11111111-1111-4111-8111-111111111111"
]
}`;
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/api-credentials", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"name": "Store integration",
"access_level": "read_only",
"enabled": true,
"ip_restriction_enabled": false,
"allowed_ips": [],
"project_ids": [
"11111111-1111-4111-8111-111111111111"
]
}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/api-credentials");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"name": "Store integration",
"access_level": "read_only",
"enabled": true,
"ip_restriction_enabled": false,
"allowed_ips": [],
"project_ids": [
"11111111-1111-4111-8111-111111111111"
]
}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/api-credentials",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
access_levelread_only | read_writeisteğe bağlıOkuma/yazma, mevcut satıcı API sözleşmesini etkinleştirir.
project_ids[]UUID[]Yalnızca seçili satıcıya ait projeler; boş liste mevcut tüm satıcı projeleri politikasına uyar.
enabledisteğe bağlıMevcut satıcı anahtarı kontrolleri. Sır yalnızca bir kez döndürülür; merchant_credentials.write gerektirir.
ip_restriction_enabledisteğe bağlıMevcut satıcı anahtarı kontrolleri. Sır yalnızca bir kez döndürülür; merchant_credentials.write gerektirir.
allowed_ips[]isteğe bağlıMevcut satıcı anahtarı kontrolleri. Sır yalnızca bir kez döndürülür; merchant_credentials.write gerektirir.
requests_per_minuteisteğe bağlıMevcut satıcı anahtarı kontrolleri. Sır yalnızca bir kez döndürülür; merchant_credentials.write gerektirir.
Yanıt 201 or 200 application/json
Örnek yanıt
{
"credential": {
"id": "22222222-2222-4222-8222-222222222222",
"name": "Checkout",
"access_level": "read_only",
"project_ids": [
"33333333-3333-4333-8333-333333333333"
],
"enabled": true
},
"token": "wc_live_EXAMPLE_ONLY_SAVE_ONCE"
}Yanıt alanları
Kullanım notları
- merchant_credentials.write gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTSatıcı Kimlik Bilgisini Güncelle/v1/operator/merchants/{merchant_id}/api-credentials/{credential_id}Okuma ve yazma
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
Yol parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/api-credentials/YOUR_CREDENTIAL_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Checkout",
"access_level": "read_only",
"enabled": true,
"ip_restriction_enabled": false,
"allowed_ips": [],
"project_ids": [
"33333333-3333-4333-8333-333333333333"
]
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"name": "Checkout",
"access_level": "read_only",
"enabled": true,
"ip_restriction_enabled": false,
"allowed_ips": [],
"project_ids": [
"33333333-3333-4333-8333-333333333333"
]
}`;
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/api-credentials/YOUR_CREDENTIAL_ID", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"name": "Checkout",
"access_level": "read_only",
"enabled": true,
"ip_restriction_enabled": false,
"allowed_ips": [],
"project_ids": [
"33333333-3333-4333-8333-333333333333"
]
}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/api-credentials/YOUR_CREDENTIAL_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"name": "Checkout",
"access_level": "read_only",
"enabled": true,
"ip_restriction_enabled": false,
"allowed_ips": [],
"project_ids": [
"33333333-3333-4333-8333-333333333333"
]
}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/api-credentials/YOUR_CREDENTIAL_ID",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
namefieldszorunluDeğişikliklerle birlikte güncel kimlik bilgisi yapılandırmasının tamamını gönder. project_ids varsayılanı []; requests_per_minute varsayılanı satıcı API kotasıdır.
access_levelfieldszorunluDeğişikliklerle birlikte güncel kimlik bilgisi yapılandırmasının tamamını gönder. project_ids varsayılanı []; requests_per_minute varsayılanı satıcı API kotasıdır.
enabledfieldszorunluDeğişikliklerle birlikte güncel kimlik bilgisi yapılandırmasının tamamını gönder. project_ids varsayılanı []; requests_per_minute varsayılanı satıcı API kotasıdır.
ip_restriction_enabledfieldszorunluDeğişikliklerle birlikte güncel kimlik bilgisi yapılandırmasının tamamını gönder. project_ids varsayılanı []; requests_per_minute varsayılanı satıcı API kotasıdır.
allowed_ips[]fieldszorunluDeğişikliklerle birlikte güncel kimlik bilgisi yapılandırmasının tamamını gönder. project_ids varsayılanı []; requests_per_minute varsayılanı satıcı API kotasıdır.
project_ids[]arrayYanıt 200 application/json
Örnek yanıt
{
"id": "22222222-2222-4222-8222-222222222222",
"name": "Checkout",
"access_level": "read_only",
"project_ids": [
"33333333-3333-4333-8333-333333333333"
],
"enabled": true
}Yanıt alanları
Kullanım notları
- merchant_credentials.write gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTSatıcı Kimlik Bilgisini Yenile/v1/operator/merchants/{merchant_id}/api-credentials/{credential_id}/rotateOkuma ve yazma
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
Yol parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/api-credentials/YOUR_CREDENTIAL_ID/rotate" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{}`;
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/api-credentials/YOUR_CREDENTIAL_ID/rotate", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/api-credentials/YOUR_CREDENTIAL_ID/rotate");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/api-credentials/YOUR_CREDENTIAL_ID/rotate",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"credential": {
"id": "22222222-2222-4222-8222-222222222222",
"name": "Checkout",
"access_level": "read_only",
"project_ids": [
"33333333-3333-4333-8333-333333333333"
],
"enabled": true
},
"token": "wc_live_EXAMPLE_ONLY_SAVE_ONCE"
}Yanıt alanları
Kullanım notları
- merchant_credentials.write gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTSatıcı Kimlik Bilgisini İptal Et/v1/operator/merchants/{merchant_id}/api-credentials/{credential_id}/revokeOkuma ve yazma
Belirtilen barındırılan satıcı kaynağını ayrı Operatör kimlik bilgisiyle yönet veya incele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_OPERATOR_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu işlem için kalıcı saklanır |
Yol parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/api-credentials/YOUR_CREDENTIAL_ID/revoke" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: operator-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{}`;
const response = await fetch("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/api-credentials/YOUR_CREDENTIAL_ID/revoke", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{}
JSON;
$ch = curl_init("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/api-credentials/YOUR_CREDENTIAL_ID/revoke");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: operator-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "operator-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{}""".encode("utf-8")
request = Request("https://api.example.com/v1/operator/merchants/YOUR_MERCHANT_ID/api-credentials/YOUR_CREDENTIAL_ID/revoke",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"revoked": true
}Yanıt alanları
revokedbooleanKullanım notları
- merchant_credentials.write gerektirir; yalnızca izin verilen barındırılan satıcılar. Operatör anahtarları sahibin kendi işletme çalışma alanına erişemez.
- Göndermeden önce benzersiz Idempotency-Key ve tam gövdeyi kalıcı sakla. Yeniden denemeler tamamlanmış işlemi asla tekrarlamaz. Tekrarda gizli alanlar çıkarılır; gizli yanıt kaybolduysa oluşturulan kaynağı incele ve açıkça yenile/yeniden oluştur. 409 operator_request_in_progress, sonucu bilinmeyen kesintiye uğramış istek anlamına gelebilir: kaynağı/denetimi incele; körlemesine yeni anahtarla deneme.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTDavet token'ını kontrol et/v1/onboarding/invitations/checkHerkese açık
Yalnızca token ile katılım. Operatör anahtarı kabul etmez veya otomatik giriş yapmaz. Konsol girişi yine sitenin Basic Auth ve mevcut TOTP korumalarını gerektirir.
Kimlik doğrulama ve üst bilgiler
Herkese açık
İstek
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/onboarding/invitations/check" \
--header 'Content-Type: application/json' \
--data-raw '{
"token": "YOUR_PRIVATE_INVITATION_TOKEN"
}'// Node.js 18+ · run on your server, never in browser code.
const body = `{
"token": "YOUR_PRIVATE_INVITATION_TOKEN"
}`;
const response = await fetch("https://api.example.com/v1/onboarding/invitations/check", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$body = <<<'JSON'
{
"token": "YOUR_PRIVATE_INVITATION_TOKEN"
}
JSON;
$ch = curl_init("https://api.example.com/v1/onboarding/invitations/check");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ["Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {
"Content-Type": "application/json"
}
body = """{
"token": "YOUR_PRIVATE_INVITATION_TOKEN"
}""".encode("utf-8")
request = Request("https://api.example.com/v1/onboarding/invitations/check",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"kind": "invitation",
"email": "admin@example.test",
"merchant_name": "Example shop"
}Yanıt alanları
Kullanım notları
- 48 saatlik davet; bir saatlik parola sıfırlama bağlantısı. Tek kullanımlık hash'lenmiş token'lar. Yeniden düzenleme eski bağlantıyı iptal eder. Kabul, TOTP'yi korur ve eski oturumları iptal eder.
- Otomatik yeniden deneme yok. Kabul zaman aşımına uğrarsa bağlantı durumunu kontrol et ve giriş yapmayı dene; başarısız olduğunu varsayma. Gözlenen kaynak IP'ye göre istek sınırı uygulanır. Alıcı saklama onayını kendisi vermelidir.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
POSTDaveti veya parola sıfırlamasını kabul et/v1/onboarding/invitations/acceptHerkese açık
Yalnızca token ile katılım. Operatör anahtarı kabul etmez veya otomatik giriş yapmaz. Konsol girişi yine sitenin Basic Auth ve mevcut TOTP korumalarını gerektirir.
Kimlik doğrulama ve üst bilgiler
Herkese açık
İstek
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/onboarding/invitations/accept" \
--header 'Content-Type: application/json' \
--data-raw '{
"token": "YOUR_PRIVATE_INVITATION_TOKEN",
"password": "REPLACE_WITH_YOUR_OWN_UNIQUE_PASSWORD",
"custody_acknowledged": true
}'// Node.js 18+ · run on your server, never in browser code.
const body = `{
"token": "YOUR_PRIVATE_INVITATION_TOKEN",
"password": "REPLACE_WITH_YOUR_OWN_UNIQUE_PASSWORD",
"custody_acknowledged": true
}`;
const response = await fetch("https://api.example.com/v1/onboarding/invitations/accept", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$body = <<<'JSON'
{
"token": "YOUR_PRIVATE_INVITATION_TOKEN",
"password": "REPLACE_WITH_YOUR_OWN_UNIQUE_PASSWORD",
"custody_acknowledged": true
}
JSON;
$ch = curl_init("https://api.example.com/v1/onboarding/invitations/accept");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ["Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {
"Content-Type": "application/json"
}
body = """{
"token": "YOUR_PRIVATE_INVITATION_TOKEN",
"password": "REPLACE_WITH_YOUR_OWN_UNIQUE_PASSWORD",
"custody_acknowledged": true
}""".encode("utf-8")
request = Request("https://api.example.com/v1/onboarding/invitations/accept",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"password_set": true
}Yanıt alanları
password_setbooleanKullanım notları
- 48 saatlik davet; bir saatlik parola sıfırlama bağlantısı. Tek kullanımlık hash'lenmiş token'lar. Yeniden düzenleme eski bağlantıyı iptal eder. Kabul, TOTP'yi korur ve eski oturumları iptal eder.
- Otomatik yeniden deneme yok. Kabul zaman aşımına uğrarsa bağlantı durumunu kontrol et ve giriş yapmayı dene; başarısız olduğunu varsayma. Gözlenen kaynak IP'ye göre istek sınırı uygulanır. Alıcı saklama onayını kendisi vermelidir.
- Yanıt örnekleri seçili alanları gösterir. Ek yanıt alanlarını mevcut yapıya eklenen alanlar olarak ele al.
Hatalar
GETYetenekler/v1/marketplace/capabilitiesSalt okunur
Katılan mağazalar, yapılandırılmış varlıklar, desteklenen satıcı ödeme altyapıları, yerel ücret varlığı ve hazırlık nedenleri. Geçici tarayıcı kullanılabilirliği izin verilen varlık kümesini genişletmez.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | marketplace.read |
Sorgu parametreleri
pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
per_pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
qisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
statusisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
store_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
vendor_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
asset_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
fromisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
toisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/marketplace/capabilities?project_id=YOUR_PROJECT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/marketplace/capabilities?project_id=YOUR_PROJECT_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/marketplace/capabilities?project_id=YOUR_PROJECT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/marketplace/capabilities?project_id=YOUR_PROJECT_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- marketplace.read gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
GETPazaryeri raporu/v1/marketplace/overviewSalt okunur
store_id, asset_id, from ve to filtreleri (dahil YYYY-MM-DD, UTC; varsayılan son 30 gün; en fazla on yıl). Bitiş tarihi itibarıyla tam hesap bakiyeleri ve dönem içi değişiklikler. Tahmini itibari para kazancı yok. Mağaza filtresi faturası olmayan proje geneli ücretleri dışarıda bırakır.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | marketplace.read |
Sorgu parametreleri
pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
per_pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
qisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
statusisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
store_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
vendor_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
asset_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
fromisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
toisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/marketplace/overview?project_id=YOUR_PROJECT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/marketplace/overview?project_id=YOUR_PROJECT_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/marketplace/overview?project_id=YOUR_PROJECT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/marketplace/overview?project_id=YOUR_PROJECT_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- marketplace.read gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
GETProje ayarları/v1/marketplace/settingsSalt okunur
enabled, payouts_paused, commission_percent, revision ve katılan mağazaları döndürür.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | marketplace.read |
Sorgu parametreleri
pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
per_pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
qisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
statusisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
store_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
vendor_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
asset_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
fromisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
toisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/marketplace/settings?project_id=YOUR_PROJECT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/marketplace/settings?project_id=YOUR_PROJECT_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/marketplace/settings?project_id=YOUR_PROJECT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/marketplace/settings?project_id=YOUR_PROJECT_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- marketplace.read gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
POSTProje ayarlarını kaydet/v1/marketplace/settingsOkuma ve yazma
Katılan mağaza seçimini değiştir. revision 0 ayarları başlatır; sonraki düzenlemeler döndürülen revision değerini gerektirir. Komisyon 0–100 arası, en fazla iki ondalık basamaklı yüzdedir.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu tam istekle birlikte sakla |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | policies.write |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/marketplace/settings" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: marketplace-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"project_id": "YOUR_PROJECT_ID",
"revision": 0,
"enabled": true,
"payouts_paused": true,
"commission_percent": "4",
"stores": [
{
"store_id": "YOUR_STORE_ID",
"enabled": true,
"commission_percent": null
}
]
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"project_id": "YOUR_PROJECT_ID",
"revision": 0,
"enabled": true,
"payouts_paused": true,
"commission_percent": "4",
"stores": [
{
"store_id": "YOUR_STORE_ID",
"enabled": true,
"commission_percent": null
}
]
}`;
const response = await fetch("https://api.example.com/v1/marketplace/settings", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"project_id": "YOUR_PROJECT_ID",
"revision": 0,
"enabled": true,
"payouts_paused": true,
"commission_percent": "4",
"stores": [
{
"store_id": "YOUR_STORE_ID",
"enabled": true,
"commission_percent": null
}
]
}
JSON;
$ch = curl_init("https://api.example.com/v1/marketplace/settings");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: marketplace-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"project_id": "YOUR_PROJECT_ID",
"revision": 0,
"enabled": true,
"payouts_paused": true,
"commission_percent": "4",
"stores": [
{
"store_id": "YOUR_STORE_ID",
"enabled": true,
"commission_percent": null
}
]
}""".encode("utf-8")
request = Request("https://api.example.com/v1/marketplace/settings",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- policies.write gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
GETSatıcıları listele/v1/marketplace/vendorsSalt okunur
Sayfalanmış satıcılar. q ile ad, harici kimlik veya e-posta ara; status active, suspended veya archived olabilir.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | marketplace.read |
Sorgu parametreleri
pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
per_pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
qisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
statusisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
store_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
vendor_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
asset_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
fromisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
toisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/marketplace/vendors?project_id=YOUR_PROJECT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/marketplace/vendors?project_id=YOUR_PROJECT_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/marketplace/vendors?project_id=YOUR_PROJECT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/marketplace/vendors?project_id=YOUR_PROJECT_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [],
"pagination": {
"page": 1,
"per_page": 25,
"total": 0,
"pages": 1
}
}Yanıt alanları
Kullanım notları
- marketplace.read gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
POSTSatıcı oluştur/v1/marketplace/vendorsOkuma ve yazma
Ad zorunlu (160 karakter); external_id isteğe bağlı ve proje içinde benzersiz (128); e-posta isteğe bağlı (254); açıklama en fazla 2000. commission_percent null ise mağazayı devralır. Null olmayan özel değer ayrıca commissions.override gerektirir. Satıcılar barındırılan merchant hesapları değildir.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu tam istekle birlikte sakla |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | vendors.write |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/marketplace/vendors" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: marketplace-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"project_id": "YOUR_PROJECT_ID",
"name": "Example vendor",
"external_id": "vendor-1042",
"email": "vendor@example.com",
"description": "",
"status": "active",
"commission_percent": null
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"project_id": "YOUR_PROJECT_ID",
"name": "Example vendor",
"external_id": "vendor-1042",
"email": "vendor@example.com",
"description": "",
"status": "active",
"commission_percent": null
}`;
const response = await fetch("https://api.example.com/v1/marketplace/vendors", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"project_id": "YOUR_PROJECT_ID",
"name": "Example vendor",
"external_id": "vendor-1042",
"email": "vendor@example.com",
"description": "",
"status": "active",
"commission_percent": null
}
JSON;
$ch = curl_init("https://api.example.com/v1/marketplace/vendors");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: marketplace-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"project_id": "YOUR_PROJECT_ID",
"name": "Example vendor",
"external_id": "vendor-1042",
"email": "vendor@example.com",
"description": "",
"status": "active",
"commission_percent": null
}""".encode("utf-8")
request = Request("https://api.example.com/v1/marketplace/vendors",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- vendors.write gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
GETSatıcıyı getir/v1/marketplace/vendors/{vendor_id}Salt okunur
Bir satıcıyı, revizyonu ve özel komisyon ayarını döndürür.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | marketplace.read |
Sorgu parametreleri
pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
per_pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
qisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
statusisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
store_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
vendor_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
asset_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
fromisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
toisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID?project_id=YOUR_PROJECT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID?project_id=YOUR_PROJECT_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID?project_id=YOUR_PROJECT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID?project_id=YOUR_PROJECT_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- marketplace.read gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
POSTSatıcıyı güncelle/v1/marketplace/vendors/{vendor_id}/updateOkuma ve yazma
Satıcı ayrıntılarını güncelle; status active veya suspended. commission_percent değiştirmek veya kaldırmak ayrıca commissions.override gerektirir; değişmeyen değerler yalnızca vendors.write ister. Arşivlenmiş satıcıyı geri getirmek ayrıca reconciliation.write gerektirir. Konsoldaki finansal düzenlemelerde hesapla yeniden kimlik doğrulaması gerekir. Mevcut tahsisler ilk komisyonlarını ve hedeflerini korur.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu tam istekle birlikte sakla |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | vendors.write |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/update" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: marketplace-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"project_id": "YOUR_PROJECT_ID",
"name": "Example vendor",
"external_id": "vendor-1042",
"email": "vendor@example.com",
"description": "",
"status": "active",
"commission_percent": null,
"revision": 1
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"project_id": "YOUR_PROJECT_ID",
"name": "Example vendor",
"external_id": "vendor-1042",
"email": "vendor@example.com",
"description": "",
"status": "active",
"commission_percent": null,
"revision": 1
}`;
const response = await fetch("https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/update", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"project_id": "YOUR_PROJECT_ID",
"name": "Example vendor",
"external_id": "vendor-1042",
"email": "vendor@example.com",
"description": "",
"status": "active",
"commission_percent": null,
"revision": 1
}
JSON;
$ch = curl_init("https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/update");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: marketplace-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"project_id": "YOUR_PROJECT_ID",
"name": "Example vendor",
"external_id": "vendor-1042",
"email": "vendor@example.com",
"description": "",
"status": "active",
"commission_percent": null,
"revision": 1
}""".encode("utf-8")
request = Request("https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/update",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- vendors.write gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
POSTSatıcıyı arşivle/v1/marketplace/vendors/{vendor_id}/archiveOkuma ve yazma
Yalnızca ödenmemiş ve açık fatura yükümlülükleri çözüldükten sonra arşivle; aksi halde 409 vendor_has_obligations döner. Geçmiş korunur. Geçici olarak suspended kullan veya eski arşivlenmiş satıcıyı güncelleme rotası ve reconciliation.write ile geri getir.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu tam istekle birlikte sakla |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | vendors.write |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/archive" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: marketplace-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"project_id": "YOUR_PROJECT_ID",
"revision": 1
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"project_id": "YOUR_PROJECT_ID",
"revision": 1
}`;
const response = await fetch("https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/archive", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"project_id": "YOUR_PROJECT_ID",
"revision": 1
}
JSON;
$ch = curl_init("https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/archive");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: marketplace-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"project_id": "YOUR_PROJECT_ID",
"revision": 1
}""".encode("utf-8")
request = Request("https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/archive",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- vendors.write gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
GETSatıcı hedefleri/v1/marketplace/vendors/{vendor_id}/destinationsSalt okunur
Sürümlenmiş hedefler ve pending/approved/disabled durumları. Onay, sahipliği kanıtlamaz.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | marketplace.read |
Sorgu parametreleri
pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
per_pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
qisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
statusisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
store_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
vendor_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
asset_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
fromisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
toisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/destinations?project_id=YOUR_PROJECT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/destinations?project_id=YOUR_PROJECT_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/destinations?project_id=YOUR_PROJECT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/destinations?project_id=YOUR_PROJECT_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [],
"pagination": {
"page": 1,
"per_page": 25,
"total": 0,
"pages": 1
}
}Yanıt alanları
Kullanım notları
- marketplace.read gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
POSTÖdeme hedefi ekle/v1/marketplace/vendors/{vendor_id}/destinationsOkuma ve yazma
Onay beklemek üzere geçerli mainnet BTC veya desteklenen EVM adresi kaydet. Projeye ait adresler, yanlış ağ ve sıfır EVM adresleri reddedilir.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu tam istekle birlikte sakla |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | destinations.write |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/destinations" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: marketplace-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"project_id": "YOUR_PROJECT_ID",
"chain_slug": "bitcoin",
"network": "mainnet",
"address": "VERIFIED_VENDOR_BTC_ADDRESS",
"label": "Vendor BTC"
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"project_id": "YOUR_PROJECT_ID",
"chain_slug": "bitcoin",
"network": "mainnet",
"address": "VERIFIED_VENDOR_BTC_ADDRESS",
"label": "Vendor BTC"
}`;
const response = await fetch("https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/destinations", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"project_id": "YOUR_PROJECT_ID",
"chain_slug": "bitcoin",
"network": "mainnet",
"address": "VERIFIED_VENDOR_BTC_ADDRESS",
"label": "Vendor BTC"
}
JSON;
$ch = curl_init("https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/destinations");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: marketplace-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"project_id": "YOUR_PROJECT_ID",
"chain_slug": "bitcoin",
"network": "mainnet",
"address": "VERIFIED_VENDOR_BTC_ADDRESS",
"label": "Vendor BTC"
}""".encode("utf-8")
request = Request("https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/destinations",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- destinations.write gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
POSTHedefi onayla/v1/marketplace/vendors/{vendor_id}/destinations/{destination_id}/approveOkuma ve yazma
Önce sahipliği bağımsız doğrula. Bu satıcı/ağdaki mevcut onaylı hedefi önce devre dışı bırak; eski görüntüler yeniden yönlendirilmez.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu tam istekle birlikte sakla |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | destinations.approve |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/destinations/YOUR_DESTINATION_ID/approve" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: marketplace-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"project_id": "YOUR_PROJECT_ID",
"revision": 1
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"project_id": "YOUR_PROJECT_ID",
"revision": 1
}`;
const response = await fetch("https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/destinations/YOUR_DESTINATION_ID/approve", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"project_id": "YOUR_PROJECT_ID",
"revision": 1
}
JSON;
$ch = curl_init("https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/destinations/YOUR_DESTINATION_ID/approve");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: marketplace-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"project_id": "YOUR_PROJECT_ID",
"revision": 1
}""".encode("utf-8")
request = Request("https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/destinations/YOUR_DESTINATION_ID/approve",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- destinations.approve gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
POSTHedefi devre dışı bırak/v1/marketplace/vendors/{vendor_id}/destinations/{destination_id}/disableOkuma ve yazma
Bu sürümü kullanan yeni/gönderilmemiş işleri durdur. İmzalı işlem iptal edilemez.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu tam istekle birlikte sakla |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | destinations.approve |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/destinations/YOUR_DESTINATION_ID/disable" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: marketplace-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"project_id": "YOUR_PROJECT_ID",
"revision": 1
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"project_id": "YOUR_PROJECT_ID",
"revision": 1
}`;
const response = await fetch("https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/destinations/YOUR_DESTINATION_ID/disable", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"project_id": "YOUR_PROJECT_ID",
"revision": 1
}
JSON;
$ch = curl_init("https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/destinations/YOUR_DESTINATION_ID/disable");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: marketplace-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"project_id": "YOUR_PROJECT_ID",
"revision": 1
}""".encode("utf-8")
request = Request("https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/destinations/YOUR_DESTINATION_ID/disable",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- destinations.approve gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
GETSatıcı bakiyeleri/v1/marketplace/vendors/{vendor_id}/balancesSalt okunur
Değiştirilemez varlık kimliği ve hesap türüne göre gruplanmış, saklanan tam hesap defteri tutarları; canlı harcanabilir cüzdan bakiyeleri değildir.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | marketplace.read |
Sorgu parametreleri
pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
per_pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
qisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
statusisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
store_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
vendor_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
asset_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
fromisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
toisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/balances?project_id=YOUR_PROJECT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/balances?project_id=YOUR_PROJECT_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/balances?project_id=YOUR_PROJECT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/marketplace/vendors/YOUR_VENDOR_ID/balances?project_id=YOUR_PROJECT_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- marketplace.read gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
GETPazaryeri faturaları/v1/marketplace/invoicesSalt okunur
Sayfalanmış faturalar; q sipariş, e-posta, açıklama, meta veri ve fatura UUID'sinde arar. store_id, vendor_id ve Pazaryeri durumuyla filtrele. Normal faturalar hariçtir.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | marketplace.read |
Sorgu parametreleri
pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
per_pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
qisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
statusisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
store_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
vendor_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
asset_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
fromisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
toisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/marketplace/invoices?project_id=YOUR_PROJECT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/marketplace/invoices?project_id=YOUR_PROJECT_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/marketplace/invoices?project_id=YOUR_PROJECT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/marketplace/invoices?project_id=YOUR_PROJECT_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [],
"pagination": {
"page": 1,
"per_page": 25,
"total": 0,
"pages": 1
}
}Yanıt alanları
Kullanım notları
- marketplace.read gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
POSTÇok satıcılı fatura oluştur/v1/marketplace/invoicesOkuma ve yazma
Normal InvoiceCreateInput alanlarını, store_id ve allocations ile birlikte kullan. Her satıcı bir kez yer alır; 1–100 pozitif payın toplamı amount değerine tam eşit olmalıdır. İsteğe bağlı fatura/tahsis commission_percent değeri commissions.override ve oturum isteklerinde konsolda yeniden kimlik doğrulaması gerektirir. data.invoice_id ve links.checkout döndürür. Uyumlu ortak yöntem yoksa ayrıntılı hata döner; uyumsuz varlığa geçilmez.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu tam istekle birlikte sakla |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | invoices.write |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/marketplace/invoices" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: marketplace-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"project_id": "YOUR_PROJECT_ID",
"store_id": "YOUR_STORE_ID",
"amount": "300.00",
"currency": "USD",
"order_id": "cart-1042",
"allocations": [
{
"vendor_id": "VENDOR_A_UUID",
"gross_amount": "100.00"
},
{
"vendor_id": "VENDOR_B_UUID",
"gross_amount": "100.00"
},
{
"vendor_id": "VENDOR_C_UUID",
"gross_amount": "100.00"
}
]
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"project_id": "YOUR_PROJECT_ID",
"store_id": "YOUR_STORE_ID",
"amount": "300.00",
"currency": "USD",
"order_id": "cart-1042",
"allocations": [
{
"vendor_id": "VENDOR_A_UUID",
"gross_amount": "100.00"
},
{
"vendor_id": "VENDOR_B_UUID",
"gross_amount": "100.00"
},
{
"vendor_id": "VENDOR_C_UUID",
"gross_amount": "100.00"
}
]
}`;
const response = await fetch("https://api.example.com/v1/marketplace/invoices", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"project_id": "YOUR_PROJECT_ID",
"store_id": "YOUR_STORE_ID",
"amount": "300.00",
"currency": "USD",
"order_id": "cart-1042",
"allocations": [
{
"vendor_id": "VENDOR_A_UUID",
"gross_amount": "100.00"
},
{
"vendor_id": "VENDOR_B_UUID",
"gross_amount": "100.00"
},
{
"vendor_id": "VENDOR_C_UUID",
"gross_amount": "100.00"
}
]
}
JSON;
$ch = curl_init("https://api.example.com/v1/marketplace/invoices");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: marketplace-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"project_id": "YOUR_PROJECT_ID",
"store_id": "YOUR_STORE_ID",
"amount": "300.00",
"currency": "USD",
"order_id": "cart-1042",
"allocations": [
{
"vendor_id": "VENDOR_A_UUID",
"gross_amount": "100.00"
},
{
"vendor_id": "VENDOR_B_UUID",
"gross_amount": "100.00"
},
{
"vendor_id": "VENDOR_C_UUID",
"gross_amount": "100.00"
}
]
}""".encode("utf-8")
request = Request("https://api.example.com/v1/marketplace/invoices",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
amountstringzorunluİşaretsiz düz ondalık sayı dizesi; işaret veya üs yok, en fazla 48 tamsayı ve 30 ondalık basamak. Varsayılan olarak pozitif olmalıdır. Mağaza, Mağazalar → Fatura bölümünde sıfır tutarlı faturalara izin verebilir; sıfır toplamlar fon almadan, adres ayırmadan veya işlem ücreti olmadan tamamlanır.Ayrıntılar
İşaretsiz düz ondalık sayı dizesi; işaret veya üs yok, en fazla 48 tamsayı ve 30 ondalık basamak. Varsayılan olarak pozitif olmalıdır. Mağaza, Mağazalar → Fatura bölümünde sıfır tutarlı faturalara izin verebilir; sıfır toplamlar fon almadan, adres ayırmadan veya işlem ücreti olmadan tamamlanır.
currencystring | nullisteğe bağlıDesteklenen üç harfli itibari para birimi; büyük harfe normalleştirilir. Atlanırsa veya null ise mağazanın fatura para birimini devralır. Oluşturma ayrıca bağımsız olarak kullanılabilir faturalandırma dönüşüm kuru gerektirir.Ayrıntılar
Desteklenen üç harfli itibari para birimi; büyük harfe normalleştirilir. Atlanırsa veya null ise mağazanın fatura para birimini devralır. Oluşturma ayrıca bağımsız olarak kullanılabilir faturalandırma dönüşüm kuru gerektirir.
payment_methods[]object[] | nullisteğe bağlı
Bu fatura için mağazada etkin yöntemleri seç. Merchant 5.4.0+: bilinmeyen/etkin olmayan/kabul edilmeyen seçimler yok sayılır; hiçbiri eşleşmezse mağaza varsayılanları kullanılır. Atlanması/null da mağaza varsayılanını kullanır; [] geçersizdir. Yöntemi asla etkinleştirmez veya mağaza ayarını değiştirmez. Aşağıdaki seçim şemasına bak.Ayrıntılar
Bu fatura için mağazada etkin yöntemleri seç. Merchant 5.4.0+: bilinmeyen/etkin olmayan/kabul edilmeyen seçimler yok sayılır; hiçbiri eşleşmezse mağaza varsayılanları kullanılır. Atlanması/null da mağaza varsayılanını kullanır; [] geçersizdir. Yöntemi asla etkinleştirmez veya mağaza ayarını değiştirmez. Aşağıdaki seçim şemasına bak.
chain_slugstringzorunluchain_slug değerini Proje → Mağazalar → Ödeme yöntemleri bölümünden kopyala veya GET /v1/projects/{project_id}/stores/{store_id}/payment-assets yanıtından oku; ör. ethereum, base veya bitcoin. Zincir/ödeme altyapısı çifti yalnızca bir kez bulunabilir.Ayrıntılar
chain_slug değerini Proje → Mağazalar → Ödeme yöntemleri bölümünden kopyala veya GET /v1/projects/{project_id}/stores/{store_id}/payment-assets yanıtından oku; ör. ethereum, base veya bitcoin. Zincir/ödeme altyapısı çifti yalnızca bir kez bulunabilir.
asset_ids[]UUID[] | nullisteğe bağlıSözleşme adresleri veya fatura ödeme yöntemi kimlikleri değil, zincir üstü asset.id UUID'leri. Bunu VEYA asset_tickers kullan. Bu zincirde etkin kabul edilen tüm varlıklar için iki seçiciyi de atla. [] ve yinelenen/nil kimlikler geçersizdir. 5.4.0+'da bu mağazada bu zincir için etkin/kabul edilen olmayan kimlikler yok sayılır; tamamen eşleşmeyen seçim mağaza varsayılanını kullanır.Ayrıntılar
Sözleşme adresleri veya fatura ödeme yöntemi kimlikleri değil, zincir üstü asset.id UUID'leri. Bunu VEYA asset_tickers kullan. Bu zincirde etkin kabul edilen tüm varlıklar için iki seçiciyi de atla. [] ve yinelenen/nil kimlikler geçersizdir. 5.4.0+'da bu mağazada bu zincir için etkin/kabul edilen olmayan kimlikler yok sayılır; tamamen eşleşmeyen seçim mağaza varsayılanını kullanır.
asset_tickers[]string[] | nullisteğe bağlıMerchant 5.3.0+. chain_slug ve bu mağaza kapsamındaki BTC, USDC veya PEPE gibi semboller. 1–64 benzersiz sembol; kenar boşlukları temizlenir ve büyük/küçük harf duyarsızdır; 1–40 ASCII harf/rakam/nokta/alt çizgi/tire. Bunu VEYA asset_ids kullan. 5.4.0+'da bilinmeyen/etkin olmayan/kabul edilmeyen semboller yok sayılır. Belirsiz kabul edilen semboller yine hata verir: asset_ids kullan. Seçili etkin yöntemler geçerli cüzdan ve fiyatlandırma gerektirir; geçici zincir üstü tarayıcı kesintileri 6.0.6'dan itibaren oluşturmayı engellemez. Lightning isteğe bağlı olarak yalnızca BTC kabul eder.Ayrıntılar
Merchant 5.3.0+. chain_slug ve bu mağaza kapsamındaki BTC, USDC veya PEPE gibi semboller. 1–64 benzersiz sembol; kenar boşlukları temizlenir ve büyük/küçük harf duyarsızdır; 1–40 ASCII harf/rakam/nokta/alt çizgi/tire. Bunu VEYA asset_ids kullan. 5.4.0+'da bilinmeyen/etkin olmayan/kabul edilmeyen semboller yok sayılır. Belirsiz kabul edilen semboller yine hata verir: asset_ids kullan. Seçili etkin yöntemler geçerli cüzdan ve fiyatlandırma gerektirir; geçici zincir üstü tarayıcı kesintileri 6.0.6'dan itibaren oluşturmayı engellemez. Lightning isteğe bağlı olarak yalnızca BTC kabul eder.
payment_railonchain | lightningisteğe bağlıVarsayılan onchain. Bitcoin Lightning seçmek için asset_ids olmadan {chain_slug: bitcoin, payment_rail: lightning} kullan; asset_tickers isteğe bağlı [BTC] olabilir. Zincir üstü Bitcoin, Lightning'i içermez. Mağazanın Lightning bağlantısı zaten etkin ve hazır olmalıdır.Ayrıntılar
Varsayılan onchain. Bitcoin Lightning seçmek için asset_ids olmadan {chain_slug: bitcoin, payment_rail: lightning} kullan; asset_tickers isteğe bağlı [BTC] olabilir. Zincir üstü Bitcoin, Lightning'i içermez. Mağazanın Lightning bağlantısı zaten etkin ve hazır olmalıdır.
order_idstring | nullisteğe bağlıSatıcı sipariş referansı; kenar boşlukları temizlendikten sonra 1–128 karakter; kontrol karakterleri reddedilir.
emailstring | nullisteğe bağlıYalnızca satıcıya açık müşteri e-postası; en fazla 254 karakterli pratik ASCII adrese normalleştirilir. Atlanırsa veya null ise e-posta saklanmaz.
descriptionstring | nullisteğe bağlıMüşteriye görünen açıklama; 1–500 karakter; satır sonları ve sekmeler kabul edilir.
expires_in_secondsinteger | nullisteğe bağlıFatura teklif süresi 300 ile 86.400 saniye arası; atlanırsa veya null ise mağaza politikasını devralır.
exchange_rate_spread_percentdecimal string | nullisteğe bağlı0–100 arası, en fazla iki ondalık basamaklı teklif fiyat marjı. Atlanırsa veya null ise mağaza varsayılanını devralır; "0" bu fatura için kapatır. Yukarı yuvarlamadan önce uygulanır ve sonra kilitlenir. Faturanın itibari para tutarını veya işlem ücreti temelini değiştirmez.Ayrıntılar
0–100 arası, en fazla iki ondalık basamaklı teklif fiyat marjı. Atlanırsa veya null ise mağaza varsayılanını devralır; "0" bu fatura için kapatır. Yukarı yuvarlamadan önce uygulanır ve sonra kilitlenir. Faturanın itibari para tutarını veya işlem ücreti temelini değiştirmez.
underpayment_tolerance_percentdecimal string | nullisteğe bağlı0–99.99 arası, en fazla iki ondalık basamaklı kabul edilen eksik ödeme oranı. Atlanırsa veya null ise mağaza varsayılanını devralır.
ipn_urlstring | nullisteğe bağlıEn fazla 2.048 bayt, kimlik bilgisi veya fragment içermeyen herkese açık HTTPS geri çağrısı. Mağaza varsayılanını geçersiz kılar; null/atlanması varsayılanı devralır.
redirect_urlstring | nullisteğe bağlıÖdeme tamamlandıktan sonra kullanılan, en fazla 2.048 bayt ve gömülü kimlik bilgisi içermeyen HTTPS başarı URL'si. Atlanırsa veya null ise mağaza varsayılanını devralır; onu temizleyemez.
cancel_urlstring | nullisteğe bağlıÖdeme sayfası başarılı ödeme olmadan sona erdiğinde kullanılan HTTPS dönüş URL'si. Atlanırsa veya null ise mağaza varsayılanını devralır; onu temizleyemez.
redirect_automaticallyboolean | nullisteğe bağlıAtlanırsa veya null ise mağaza politikasını devralır. true, geçerli redirect_url gerektirir.
languagestring | nullisteğe bağlıMüşteri dili: en, de, es, pt-BR, it, ru, zh-CN, fr, ko veya ja. pt Brezilya Portekizcesi, zh Basitleştirilmiş Çince demektir. de-DE gibi desteklenen bölgesel etiketler listelenen dile normalleştirilir. Atlanırsa veya null ise mağaza dilini devralır. Konsol dili ayrıdır.Ayrıntılar
Müşteri dili: en, de, es, pt-BR, it, ru, zh-CN, fr, ko veya ja. pt Brezilya Portekizcesi, zh Basitleştirilmiş Çince demektir. de-DE gibi desteklenen bölgesel etiketler listelenen dile normalleştirilir. Atlanırsa veya null ise mağaza dilini devralır. Konsol dili ayrıdır.
checkout_appearanceobject | nullisteğe bağlı
Bu fatura için kısmi görünüm ayarları. Atlanması/null mağazanın güncel tasarımını izler. {} dahil bir nesne, çözümlenen tasarımı ve görselleri oluşturma anında sabitler. Aşağıdaki özel ayar şemasına bak; finansal ayar, HTML, CSS, JavaScript veya uzak görsel URL'si yok.Ayrıntılar
Bu fatura için kısmi görünüm ayarları. Atlanması/null mağazanın güncel tasarımını izler. {} dahil bir nesne, çözümlenen tasarımı ve görselleri oluşturma anında sabitler. Aşağıdaki özel ayar şemasına bak; finansal ayar, HTML, CSS, JavaScript veya uzak görsel URL'si yok.
inherit_default_storebooleanisteğe bağlıtrue, temel olarak projenin varsayılan mağaza tasarımını seçer; aksi halde hedef mağazanın geçerli tasarımı kullanılır. Özel ayarlar ardından uygulanıp bağımsız kaydedilir; çözümlenmiş fatura işareti false olur.Ayrıntılar
true, temel olarak projenin varsayılan mağaza tasarımını seçer; aksi halde hedef mağazanın geçerli tasarımı kullanılır. Özel ayarlar ardından uygulanıp bağımsız kaydedilir; çözümlenmiş fatura işareti false olur.
titlestringisteğe bağlıÖdeme sayfası başlığı; en fazla 120 karakter. Boşsa standart başlık kullanılır.
introstringisteğe bağlıDüz metin; her biri en fazla 2.000 karakter. Giriş her durumda üstte, Çıkış altta görünür. Satır sonları korunur; güvenli metin URL'leri bağlantıya dönüşür. Boş dize temizler. Eski customer_message, intro takma adı olarak kabul edilir; ikisini birlikte gönderme.Ayrıntılar
Düz metin; her biri en fazla 2.000 karakter. Giriş her durumda üstte, Çıkış altta görünür. Satır sonları korunur; güvenli metin URL'leri bağlantıya dönüşür. Boş dize temizler. Eski customer_message, intro takma adı olarak kabul edilir; ikisini birlikte gönderme.
outrostringisteğe bağlıDüz metin; her biri en fazla 2.000 karakter. Giriş her durumda üstte, Çıkış altta görünür. Satır sonları korunur; güvenli metin URL'leri bağlantıya dönüşür. Boş dize temizler. Eski customer_message, intro takma adı olarak kabul edilir; ikisini birlikte gönderme.Ayrıntılar
Düz metin; her biri en fazla 2.000 karakter. Giriş her durumda üstte, Çıkış altta görünür. Satır sonları korunur; güvenli metin URL'leri bağlantıya dönüşür. Boş dize temizler. Eski customer_message, intro takma adı olarak kabul edilir; ikisini birlikte gönderme.
intro_font_sizeintegeristeğe bağlıPiksel: 12, 14, 16, 18, 20 veya 24. Farklı devralınmadıkça varsayılan 16.
outro_font_sizeintegeristeğe bağlıPiksel: 12, 14, 16, 18, 20 veya 24. Farklı devralınmadıkça varsayılan 16.
accent_colorstringisteğe bağlı#RRGGBB. Otomatik renkler için arka plan, kart ve düğme boş olabilir. Metin kontrastı otomatiktir.
background_colorstringisteğe bağlı#RRGGBB. Otomatik renkler için arka plan, kart ve düğme boş olabilir. Metin kontrastı otomatiktir.
card_colorstringisteğe bağlı#RRGGBB. Otomatik renkler için arka plan, kart ve düğme boş olabilir. Metin kontrastı otomatiktir.
button_colorstringisteğe bağlı#RRGGBB. Otomatik renkler için arka plan, kart ve düğme boş olabilir. Metin kontrastı otomatiktir.
imagesobjectisteğe bağlı
Anahtarlar: logo_light, logo_dark, favicon. Atlanan anahtar temel görseli korur; null kaldırır. {store_id: UUID, kind?: logo_light|logo_dark|favicon} nesnesi AYNI projedeki o mağazanın geçerli yüklenmiş görselini kullanır. kind varsayılanı hedef anahtardır. Önce Mağaza → Ödeme sayfası bölümünde yükle; Mağaza API kimliğini Temel → API kimlikleri bölümünden kopyala. Eksik görseller veya farklı proje kimlikleri 400 döndürür. Harici URL veya görsel verisi kabul edilmez.Ayrıntılar
Anahtarlar: logo_light, logo_dark, favicon. Atlanan anahtar temel görseli korur; null kaldırır. {store_id: UUID, kind?: logo_light|logo_dark|favicon} nesnesi AYNI projedeki o mağazanın geçerli yüklenmiş görselini kullanır. kind varsayılanı hedef anahtardır. Önce Mağaza → Ödeme sayfası bölümünde yükle; Mağaza API kimliğini Temel → API kimlikleri bölümünden kopyala. Eksik görseller veya farklı proje kimlikleri 400 döndürür. Harici URL veya görsel verisi kabul edilmez.
logo_lightobject | nullisteğe bağlı
logo_darkobject | nullisteğe bağlı
show_order_idbooleanisteğe bağlıBaşlığın altında sipariş kimliği ayrıntılarını ve düz metin açıklamayı göster. details_expanded başlangıçta sipariş kimliği ayrıntılarını açar. Yalnızca görünümü etkiler; verileri gizlemez.
show_descriptionbooleanisteğe bağlıBaşlığın altında sipariş kimliği ayrıntılarını ve düz metin açıklamayı göster. details_expanded başlangıçta sipariş kimliği ayrıntılarını açar. Yalnızca görünümü etkiler; verileri gizlemez.
details_expandedbooleanisteğe bağlıBaşlığın altında sipariş kimliği ayrıntılarını ve düz metin açıklamayı göster. details_expanded başlangıçta sipariş kimliği ayrıntılarını açar. Yalnızca görünümü etkiler; verileri gizlemez.
show_project_namebooleanisteğe bağlıMerchant 5.6.0+: müşteri ödeme sayfası başlığındaki her adı göster veya gizle. İkisi de varsayılan true. Mağaza → Ödeme sayfası bölümünde de bulunur; diğer görünüm ayarları gibi devralınır ve fatura görüntüsüne kaydedilir. Yalnızca görünümü etkiler; verileri gizlemez.Ayrıntılar
Merchant 5.6.0+: müşteri ödeme sayfası başlığındaki her adı göster veya gizle. İkisi de varsayılan true. Mağaza → Ödeme sayfası bölümünde de bulunur; diğer görünüm ayarları gibi devralınır ve fatura görüntüsüne kaydedilir. Yalnızca görünümü etkiler; verileri gizlemez.
show_store_namebooleanisteğe bağlıMerchant 5.6.0+: müşteri ödeme sayfası başlığındaki her adı göster veya gizle. İkisi de varsayılan true. Mağaza → Ödeme sayfası bölümünde de bulunur; diğer görünüm ayarları gibi devralınır ve fatura görüntüsüne kaydedilir. Yalnızca görünümü etkiler; verileri gizlemez.Ayrıntılar
Merchant 5.6.0+: müşteri ödeme sayfası başlığındaki her adı göster veya gizle. İkisi de varsayılan true. Mağaza → Ödeme sayfası bölümünde de bulunur; diğer görünüm ayarları gibi devralınır ve fatura görüntüsüne kaydedilir. Yalnızca görünümü etkiler; verileri gizlemez.
featured_chains[]string[]isteğe bağlıSıralı zincir kısa adları; en fazla 60 benzersiz değer (küçük harf, rakam, tire; en fazla 64 karakter). [] temizler. Yalnızca kullanılabilir fatura yöntemleri yeniden sıralanır.Ayrıntılar
Sıralı zincir kısa adları; en fazla 60 benzersiz değer (küçük harf, rakam, tire; en fazla 64 karakter). [] temizler. Yalnızca kullanılabilir fatura yöntemleri yeniden sıralanır.
featured_asset_ids[]UUID[]isteğe bağlıEn fazla 100 benzersiz sıralı varlık kimliği; [] temizler. Varsayılan varlık null olabilir. Kimlikler payment-intent kimliklerinden değil, payment-assets'ten gelir. Bunlar yöntemleri asla etkinleştirmez; alınan ödemeler ve geçerli müşteri tercihleri önceliklidir.Ayrıntılar
En fazla 100 benzersiz sıralı varlık kimliği; [] temizler. Varsayılan varlık null olabilir. Kimlikler payment-intent kimliklerinden değil, payment-assets'ten gelir. Bunlar yöntemleri asla etkinleştirmez; alınan ödemeler ve geçerli müşteri tercihleri önceliklidir.
default_asset_idUUID|nullisteğe bağlıEn fazla 100 benzersiz sıralı varlık kimliği; [] temizler. Varsayılan varlık null olabilir. Kimlikler payment-intent kimliklerinden değil, payment-assets'ten gelir. Bunlar yöntemleri asla etkinleştirmez; alınan ödemeler ve geçerli müşteri tercihleri önceliklidir.Ayrıntılar
En fazla 100 benzersiz sıralı varlık kimliği; [] temizler. Varsayılan varlık null olabilir. Kimlikler payment-intent kimliklerinden değil, payment-assets'ten gelir. Bunlar yöntemleri asla etkinleştirmez; alınan ödemeler ve geçerli müşteri tercihleri önceliklidir.
messagesobjectisteğe bağlı
en, de, es, pt-BR, it, ru, zh-CN, fr, ko veya ja anahtarlı dil nesneleri; waiting, confirming, paid, underpaid, expired düz dizeleri içerir (her biri 500 karakter). Yalnızca gönderilen diller/durumlar değişir; {} tüm mesajları, {en:{}} İngilizceyi, boş durum dizesi o durumu temizler. Yedek dil İngilizcedir. Gerçek durumun yerini almaz.Ayrıntılar
en, de, es, pt-BR, it, ru, zh-CN, fr, ko veya ja anahtarlı dil nesneleri; waiting, confirming, paid, underpaid, expired düz dizeleri içerir (her biri 500 karakter). Yalnızca gönderilen diller/durumlar değişir; {} tüm mesajları, {en:{}} İngilizceyi, boş durum dizesi o durumu temizler. Yedek dil İngilizcedir. Gerçek durumun yerini almaz.
enobjectisteğe bağlı
deobjectisteğe bağlı
esobjectisteğe bağlı
pt-BRobjectisteğe bağlı
itobjectisteğe bağlı
ruobjectisteğe bağlı
zh-CNobjectisteğe bağlı
frobjectisteğe bağlı
koobjectisteğe bağlı
support_urlstringisteğe bağlıKimlik bilgisi içermeyen en fazla 2.048 karakterli HTTPS URL'leri. Boşsa temizler. Bağlantılar yeni pencerede açılır.
terms_urlstringisteğe bağlıKimlik bilgisi içermeyen en fazla 2.048 karakterli HTTPS URL'leri. Boşsa temizler. Bağlantılar yeni pencerede açılır.
privacy_urlstringisteğe bağlıKimlik bilgisi içermeyen en fazla 2.048 karakterli HTTPS URL'leri. Boşsa temizler. Bağlantılar yeni pencerede açılır.
return_button_textstringisteğe bağlıEtiket en fazla 60 karakter. Fatura davranışı için üst düzey redirect_url/cancel_url/redirect_automatically/language kullan.
show_return_buttonbooleanisteğe bağlıSon durumlar dahil ödeme sayfasında elle kullanılan Satıcıya dön/iptal düğmesini göster. Mağaza görünümünü devralmak için atla (varsayılan true); false gizler. Faturayı iptal etmez, JSON'daki URL'leri gizlemez veya otomatik başarı yönlendirmelerini kapatmaz. Gerekirse üst düzey redirect_automatically değerini ayrıca false yap. Merchant 8.1.4 veya yenisini gerektirir.Ayrıntılar
Son durumlar dahil ödeme sayfasında elle kullanılan Satıcıya dön/iptal düğmesini göster. Mağaza görünümünü devralmak için atla (varsayılan true); false gizler. Faturayı iptal etmez, JSON'daki URL'leri gizlemez veya otomatik başarı yönlendirmelerini kapatmaz. Gerekirse üst düzey redirect_automatically değerini ayrıca false yap. Merchant 8.1.4 veya yenisini gerektirir.
metadataobject | nullisteğe bağlı
Yalnızca satıcıya açık JSON nesnesi; atlanması veya null, {} olur; en fazla 4.096 kodlanmış bayt ve beş iç içe düzey. firstname, lastname, street, street2, zip, city, country, countryiso2, company ve vatid doğrulanır, normalleştirilir ve müşteri özeti alanlarına aktarılır.Ayrıntılar
Yalnızca satıcıya açık JSON nesnesi; atlanması veya null, {} olur; en fazla 4.096 kodlanmış bayt ve beş iç içe düzey. firstname, lastname, street, street2, zip, city, country, countryiso2, company ve vatid doğrulanır, normalleştirilir ve müşteri özeti alanlarına aktarılır.
allocations[]object[]
[{"vendor_id":"VENDOR_A_UUID","gross_amount":"100.00"},{"vendor_id":"VENDOR_B_UUID","gross_amount":"100.00"},{"vendor_id":"VENDOR_C_UUID","gross_amount":"100.00"}]Ayrıntılar
[{"vendor_id":"VENDOR_A_UUID","gross_amount":"100.00"},{"vendor_id":"VENDOR_B_UUID","gross_amount":"100.00"},{"vendor_id":"VENDOR_C_UUID","gross_amount":"100.00"}]
Yanıt 200 application/json
Örnek yanıt
{
"data": {
"invoice_id": "YOUR_INVOICE_ID",
"status": "new",
"marketplace": {
"state": "pending",
"allocations": []
}
},
"links": {
"checkout": "https://pay.example.com/invoice/YOUR_INVOICE_ID"
}
}Yanıt alanları
Kullanım notları
- invoices.write gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
GETFatura ve tahsisler/v1/marketplace/invoices/{invoice_id}Salt okunur
Normal fatura ayrıntılarına ek olarak pazaryeri durumu, revision, hold_reason, sabit tahsisler, politika görüntüsü, son 200 ödeme ve kısaltma işaretleriyle ilişkili son 100 satıcı ödemesi. Herkese açık ödeme sayfası satıcı verilerini göstermez.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | marketplace.read |
Sorgu parametreleri
pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
per_pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
qisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
statusisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
store_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
vendor_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
asset_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
fromisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
toisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID?project_id=YOUR_PROJECT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID?project_id=YOUR_PROJECT_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID?project_id=YOUR_PROJECT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID?project_id=YOUR_PROJECT_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- marketplace.read gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
GETFatura ödeme kanıtları/v1/marketplace/invoices/{invoice_id}/paymentsSalt okunur
page/per_page ile normal ödeme kanıtları. Gözlemler satıcı ödemesi değildir.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | marketplace.read |
Sorgu parametreleri
pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
per_pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
qisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
statusisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
store_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
vendor_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
asset_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
fromisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
toisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/payments?project_id=YOUR_PROJECT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/payments?project_id=YOUR_PROJECT_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/payments?project_id=YOUR_PROJECT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/payments?project_id=YOUR_PROJECT_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- marketplace.read gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
GETFatura tahsisleri/v1/marketplace/invoices/{invoice_id}/allocationsSalt okunur
Uygun tamamlanmadan sonra değiştirilemez pay/komisyon/hedef görüntüleri ve tam brüt, komisyon ve net atomik değerler.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | marketplace.read |
Sorgu parametreleri
pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
per_pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
qisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
statusisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
store_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
vendor_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
asset_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
fromisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
toisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/allocations?project_id=YOUR_PROJECT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/allocations?project_id=YOUR_PROJECT_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/allocations?project_id=YOUR_PROJECT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/allocations?project_id=YOUR_PROJECT_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- marketplace.read gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
POSTÖdenmemiş faturayı iptal et/v1/marketplace/invoices/{invoice_id}/cancelOkuma ve yazma
Yalnızca ödenmemiş new veya expired fatura. Geç tahsilatlar inceleme için bekletilir. Revizyon, Pazaryeri fatura revizyonudur.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu tam istekle birlikte sakla |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | invoices.write |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/cancel" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: marketplace-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"project_id": "YOUR_PROJECT_ID",
"revision": 1
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"project_id": "YOUR_PROJECT_ID",
"revision": 1
}`;
const response = await fetch("https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/cancel", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"project_id": "YOUR_PROJECT_ID",
"revision": 1
}
JSON;
$ch = curl_init("https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/cancel");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: marketplace-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"project_id": "YOUR_PROJECT_ID",
"revision": 1
}""".encode("utf-8")
request = Request("https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/cancel",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- invoices.write gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
POSTTahsisleri beklet/v1/marketplace/invoices/{invoice_id}/allocations/holdOkuma ve yazma
Yükümlülükleri silmeden imzalanmamış tahsisleri beklet. İmzalı veya belirsiz satıcı ödemeleri izlenmeye devam eder.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu tam istekle birlikte sakla |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | reconciliation.write |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/allocations/hold" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: marketplace-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"reason": "Verify customer request"
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"reason": "Verify customer request"
}`;
const response = await fetch("https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/allocations/hold", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"reason": "Verify customer request"
}
JSON;
$ch = curl_init("https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/allocations/hold");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: marketplace-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"reason": "Verify customer request"
}""".encode("utf-8")
request = Request("https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/allocations/hold",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- reconciliation.write gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
POSTTahsisleri incele ve serbest bırak/v1/marketplace/invoices/{invoice_id}/allocations/releaseOkuma ve yazma
Fon karşılığını/kesinliği yeniden kontrol et. İsteğe bağlı approved_amount_atomic, tahsis sabitlenmeden önce daha küçük ve karşılığı tam bölüşümü açıkça kabul eder; alınmış fonları asla uydurmaz.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu tam istekle birlikte sakla |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | reconciliation.write |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/allocations/release" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: marketplace-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"reason": "Verified payment evidence"
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"reason": "Verified payment evidence"
}`;
const response = await fetch("https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/allocations/release", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"reason": "Verified payment evidence"
}
JSON;
$ch = curl_init("https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/allocations/release");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: marketplace-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"reason": "Verified payment evidence"
}""".encode("utf-8")
request = Request("https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/allocations/release",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- reconciliation.write gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
POSTÖdenmemiş hedefi yeniden bağla/v1/marketplace/invoices/{invoice_id}/allocations/{allocation_id}/destinationOkuma ve yazma
Tahsis revizyonu gerekir. Yalnızca ayrılmamış/imzalanmamış iş ve ilk ağda aynı satıcı için ayrı onaylanmış sürüm. Denetlenir; imzalı iş değiştirilemez.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu tam istekle birlikte sakla |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | reconciliation.write |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/allocations/YOUR_ALLOCATION_ID/destination" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: marketplace-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"destination_id": "YOUR_DESTINATION_ID",
"reason": "Vendor verified replacement address"
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"destination_id": "YOUR_DESTINATION_ID",
"reason": "Vendor verified replacement address"
}`;
const response = await fetch("https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/allocations/YOUR_ALLOCATION_ID/destination", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"destination_id": "YOUR_DESTINATION_ID",
"reason": "Vendor verified replacement address"
}
JSON;
$ch = curl_init("https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/allocations/YOUR_ALLOCATION_ID/destination");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: marketplace-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"destination_id": "YOUR_DESTINATION_ID",
"reason": "Vendor verified replacement address"
}""".encode("utf-8")
request = Request("https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/allocations/YOUR_ALLOCATION_ID/destination",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- reconciliation.write gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
POSTTam iade hazırla/v1/marketplace/invoices/{invoice_id}/refundOkuma ve yazma
Alınan tutarın aynı varlıkla, ayrı onaylanacak tam iadesini hazırla. Satıcı ödemesinden önce ödenmemiş fonları ayır ve onayda komisyonu geri al. Tüm satıcı ödemelerinden sonra ayrı serbest birincil adres fonlarını kullan. Müşteri iade adresini asla gönderen adresinden çıkarma.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu tam istekle birlikte sakla |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | reconciliation.write |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/refund" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: marketplace-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"payment_method_id": "YOUR_PAYMENT_METHOD_ID",
"destination_address": "VERIFIED_CUSTOMER_REFUND_ADDRESS",
"reason": "Customer cancellation",
"maximum_network_fee_atomic": "10000",
"maximum_gas_funding_atomic": "0",
"fee_tier": "medium"
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"payment_method_id": "YOUR_PAYMENT_METHOD_ID",
"destination_address": "VERIFIED_CUSTOMER_REFUND_ADDRESS",
"reason": "Customer cancellation",
"maximum_network_fee_atomic": "10000",
"maximum_gas_funding_atomic": "0",
"fee_tier": "medium"
}`;
const response = await fetch("https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/refund", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"payment_method_id": "YOUR_PAYMENT_METHOD_ID",
"destination_address": "VERIFIED_CUSTOMER_REFUND_ADDRESS",
"reason": "Customer cancellation",
"maximum_network_fee_atomic": "10000",
"maximum_gas_funding_atomic": "0",
"fee_tier": "medium"
}
JSON;
$ch = curl_init("https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/refund");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: marketplace-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"payment_method_id": "YOUR_PAYMENT_METHOD_ID",
"destination_address": "VERIFIED_CUSTOMER_REFUND_ADDRESS",
"reason": "Customer cancellation",
"maximum_network_fee_atomic": "10000",
"maximum_gas_funding_atomic": "0",
"fee_tier": "medium"
}""".encode("utf-8")
request = Request("https://api.example.com/v1/marketplace/invoices/YOUR_INVOICE_ID/refund",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- reconciliation.write gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
GETÖdeme tahsislerini bul/v1/marketplace/allocationsSalt okunur
Sayfalanmış adaylar; status (available vb.), asset_id, vendor_id, store_id ve q (satıcı/sipariş/fatura) ile filtrele.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | marketplace.read |
Sorgu parametreleri
pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
per_pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
qisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
statusisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
store_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
vendor_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
asset_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
fromisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
toisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/marketplace/allocations?project_id=YOUR_PROJECT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/marketplace/allocations?project_id=YOUR_PROJECT_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/marketplace/allocations?project_id=YOUR_PROJECT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/marketplace/allocations?project_id=YOUR_PROJECT_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [],
"pagination": {
"page": 1,
"per_page": 25,
"total": 0,
"pages": 1
}
}Yanıt alanları
Kullanım notları
- marketplace.read gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
GETProje hesap defteri bakiyeleri/v1/marketplace/balancesSalt okunur
Bekletilen, kullanılabilir, ayrılmış, ödenmiş tutarlar, komisyon, iadeler ve ağ ücretleri dahil tam gruplanmış varlık/hesap toplamları. Harici dengeleme hesabı hariçtir.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | marketplace.read |
Sorgu parametreleri
pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
per_pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
qisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
statusisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
store_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
vendor_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
asset_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
fromisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
toisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/marketplace/balances?project_id=YOUR_PROJECT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/marketplace/balances?project_id=YOUR_PROJECT_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/marketplace/balances?project_id=YOUR_PROJECT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/marketplace/balances?project_id=YOUR_PROJECT_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- marketplace.read gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
GETDeğiştirilemez yevmiye/v1/marketplace/ledgerSalt okunur
Yalnızca eklenebilen sayfalanmış hareketler; q referans/hesap, asset_id ve vendor_id filtreleri. Tutarlar atomik dizeler kullanır; hiçbir kayıt düzenlenemez veya elle ödendi olarak işaretlenemez.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | marketplace.read |
Sorgu parametreleri
pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
per_pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
qisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
statusisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
store_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
vendor_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
asset_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
fromisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
toisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/marketplace/ledger?project_id=YOUR_PROJECT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/marketplace/ledger?project_id=YOUR_PROJECT_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/marketplace/ledger?project_id=YOUR_PROJECT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/marketplace/ledger?project_id=YOUR_PROJECT_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [],
"pagination": {
"page": 1,
"per_page": 25,
"total": 0,
"pages": 1
}
}Yanıt alanları
Kullanım notları
- marketplace.read gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
GETSatıcı ödemesi geçmişi/v1/marketplace/payoutsSalt okunur
Sayfalanmış üst kayıtlar; state, asset_id, vendor_id veya q kimlik/sembol ile filtrele. Ödendi, yalnızca ağa yayınlanmayı değil, bağımsız onayı ifade eder.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | marketplace.read |
Sorgu parametreleri
pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
per_pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
qisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
statusisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
store_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
vendor_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
asset_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
fromisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
toisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/marketplace/payouts?project_id=YOUR_PROJECT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/marketplace/payouts?project_id=YOUR_PROJECT_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/marketplace/payouts?project_id=YOUR_PROJECT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/marketplace/payouts?project_id=YOUR_PROJECT_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [],
"pagination": {
"page": 1,
"per_page": 25,
"total": 0,
"pages": 1
}
}Yanıt alanları
Kullanım notları
- marketplace.read gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
POSTTahsis planını önizle/v1/marketplace/payouts/previewOkuma ve yazma
Salt okunur muhasebe planı; fon ayırma veya harcama yetkisi vermez. Azami ücret tahmini gerçek ücret değil, kullanıcı sınırıdır. Hazırlık sonradan canlı kontroller yapar.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu tam istekle birlikte sakla |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | payouts.write |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/marketplace/payouts/preview" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: marketplace-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"project_id": "YOUR_PROJECT_ID",
"allocation_ids": [
"YOUR_ALLOCATION_ID"
],
"maximum_network_fee_atomic": "10000",
"maximum_gas_funding_atomic": "0",
"fee_tier": "medium"
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"project_id": "YOUR_PROJECT_ID",
"allocation_ids": [
"YOUR_ALLOCATION_ID"
],
"maximum_network_fee_atomic": "10000",
"maximum_gas_funding_atomic": "0",
"fee_tier": "medium"
}`;
const response = await fetch("https://api.example.com/v1/marketplace/payouts/preview", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"project_id": "YOUR_PROJECT_ID",
"allocation_ids": [
"YOUR_ALLOCATION_ID"
],
"maximum_network_fee_atomic": "10000",
"maximum_gas_funding_atomic": "0",
"fee_tier": "medium"
}
JSON;
$ch = curl_init("https://api.example.com/v1/marketplace/payouts/preview");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: marketplace-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"project_id": "YOUR_PROJECT_ID",
"allocation_ids": [
"YOUR_ALLOCATION_ID"
],
"maximum_network_fee_atomic": "10000",
"maximum_gas_funding_atomic": "0",
"fee_tier": "medium"
}""".encode("utf-8")
request = Request("https://api.example.com/v1/marketplace/payouts/preview",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- payouts.write gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
POSTSatıcı ödemesi hazırla/v1/marketplace/payoutsOkuma ve yazma
Tek varlık/cüzdanda kullanılabilir 1–100 tahsis kimliğini ayır. BTC, seçilen her faturanın tüm ödenmemiş paylarını tek çok çıktılı grupta gerektirir. Bütçeler yerel ücret varlığında atomik dizelerdir. awaiting_approval planı oluşturur; ağa yayınlamaz.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu tam istekle birlikte sakla |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | payouts.write |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/marketplace/payouts" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: marketplace-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"project_id": "YOUR_PROJECT_ID",
"allocation_ids": [
"YOUR_ALLOCATION_ID"
],
"maximum_network_fee_atomic": "10000",
"maximum_gas_funding_atomic": "0",
"fee_tier": "medium"
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"project_id": "YOUR_PROJECT_ID",
"allocation_ids": [
"YOUR_ALLOCATION_ID"
],
"maximum_network_fee_atomic": "10000",
"maximum_gas_funding_atomic": "0",
"fee_tier": "medium"
}`;
const response = await fetch("https://api.example.com/v1/marketplace/payouts", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"project_id": "YOUR_PROJECT_ID",
"allocation_ids": [
"YOUR_ALLOCATION_ID"
],
"maximum_network_fee_atomic": "10000",
"maximum_gas_funding_atomic": "0",
"fee_tier": "medium"
}
JSON;
$ch = curl_init("https://api.example.com/v1/marketplace/payouts");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: marketplace-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"project_id": "YOUR_PROJECT_ID",
"allocation_ids": [
"YOUR_ALLOCATION_ID"
],
"maximum_network_fee_atomic": "10000",
"maximum_gas_funding_atomic": "0",
"fee_tier": "medium"
}""".encode("utf-8")
request = Request("https://api.example.com/v1/marketplace/payouts",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"data": {
"id": "YOUR_PAYOUT_ID",
"state": "awaiting_approval",
"revision": 1,
"plan_hash": "RETAINED_PLAN_HASH",
"plan": {
"amount_atomic": "28800000",
"maximum_network_fee_atomic": "10000",
"maximum_gas_funding_atomic": "0",
"items": []
},
"transactions": []
}
}Yanıt alanları
Kullanım notları
- payouts.write gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
GETSatıcı ödemesi ayrıntıları/v1/marketplace/payouts/{payout_id}Salt okunur
Değiştirilemez plan/hash, revizyon, sona erme, alıcı öğeleri, korunan alt denemeler, ilerleme, tam ücretler ve gezgin bağlantıları. Asla özel anahtar veya imzalı bayt içermez.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | marketplace.read |
Sorgu parametreleri
pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
per_pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
qisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
statusisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
store_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
vendor_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
asset_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
fromisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
toisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/marketplace/payouts/YOUR_PAYOUT_ID?project_id=YOUR_PROJECT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/marketplace/payouts/YOUR_PAYOUT_ID?project_id=YOUR_PROJECT_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/marketplace/payouts/YOUR_PAYOUT_ID?project_id=YOUR_PROJECT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/marketplace/payouts/YOUR_PAYOUT_ID?project_id=YOUR_PROJECT_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": {
"id": "YOUR_PAYOUT_ID",
"state": "awaiting_approval",
"revision": 1,
"plan_hash": "RETAINED_PLAN_HASH",
"plan": {
"amount_atomic": "28800000",
"maximum_network_fee_atomic": "10000",
"maximum_gas_funding_atomic": "0",
"items": []
},
"transactions": []
}
}Yanıt alanları
Kullanım notları
- marketplace.read gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
POSTOnayla ve gönder/v1/marketplace/payouts/{payout_id}/approveOkuma ve yazma
Saklanan tam plana süresi içinde açıkça yetki ver. Sınırlandırılmış gas fonlaması ve satıcı işlemlerini arka planda kuyruğa al.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu tam istekle birlikte sakla |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | payouts.approve |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/marketplace/payouts/YOUR_PAYOUT_ID/approve" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: marketplace-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"expected_plan_hash": "COPY_EXACT_PLAN_HASH_FROM_PREPARE",
"confirm": true
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"expected_plan_hash": "COPY_EXACT_PLAN_HASH_FROM_PREPARE",
"confirm": true
}`;
const response = await fetch("https://api.example.com/v1/marketplace/payouts/YOUR_PAYOUT_ID/approve", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"expected_plan_hash": "COPY_EXACT_PLAN_HASH_FROM_PREPARE",
"confirm": true
}
JSON;
$ch = curl_init("https://api.example.com/v1/marketplace/payouts/YOUR_PAYOUT_ID/approve");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: marketplace-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"expected_plan_hash": "COPY_EXACT_PLAN_HASH_FROM_PREPARE",
"confirm": true
}""".encode("utf-8")
request = Request("https://api.example.com/v1/marketplace/payouts/YOUR_PAYOUT_ID/approve",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- payouts.approve gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
POSTSatıcı ödemesini incele ve devam ettir/v1/marketplace/payouts/{payout_id}/resumeOkuma ve yazma
Yalnızca needs_attention. Saklanan plan/hash'i yeniden kullan; onaylanmış alıcılara asla tekrar gönderilmez. Başarısız alt işlem değiştirilmeden önce iki bağımsız sağlayıcı, kanonik ve yeterince onaylanmış EVM revert'ini kanıtlamalıdır. Önceki ücretler onaylı bütçeden sayılmaya devam eder ve tüm hash'ler geçmişte kalır. Bilinmeyen/kısmi token teslimi payout_recovery_unverified döndürür; rezervasyonlar tutulur.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu tam istekle birlikte sakla |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | payouts.approve |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/marketplace/payouts/YOUR_PAYOUT_ID/resume" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: marketplace-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"expected_plan_hash": "COPY_EXACT_PLAN_HASH_FROM_PREPARE",
"confirm": true
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"expected_plan_hash": "COPY_EXACT_PLAN_HASH_FROM_PREPARE",
"confirm": true
}`;
const response = await fetch("https://api.example.com/v1/marketplace/payouts/YOUR_PAYOUT_ID/resume", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"expected_plan_hash": "COPY_EXACT_PLAN_HASH_FROM_PREPARE",
"confirm": true
}
JSON;
$ch = curl_init("https://api.example.com/v1/marketplace/payouts/YOUR_PAYOUT_ID/resume");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: marketplace-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"expected_plan_hash": "COPY_EXACT_PLAN_HASH_FROM_PREPARE",
"confirm": true
}""".encode("utf-8")
request = Request("https://api.example.com/v1/marketplace/payouts/YOUR_PAYOUT_ID/resume",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- payouts.approve gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
POSTİmzalanmamış işi iptal et/v1/marketplace/payouts/{payout_id}/cancelOkuma ve yazma
Yalnızca güvenle imzasız/iletilmemiş olduğu bilinen rezervasyonları serbest bırak. Onaylanmış alıcılar ve denetim kaydı kalır. İmzalı/belirsiz iş iptal edilemez. Açık kurtarma işlemiyle doğrulanmış revert, kalan imzasız işin iptalini artık engellemez.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu tam istekle birlikte sakla |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | payouts.write |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/marketplace/payouts/YOUR_PAYOUT_ID/cancel" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: marketplace-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"project_id": "YOUR_PROJECT_ID",
"revision": 1
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"project_id": "YOUR_PROJECT_ID",
"revision": 1
}`;
const response = await fetch("https://api.example.com/v1/marketplace/payouts/YOUR_PAYOUT_ID/cancel", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"project_id": "YOUR_PROJECT_ID",
"revision": 1
}
JSON;
$ch = curl_init("https://api.example.com/v1/marketplace/payouts/YOUR_PAYOUT_ID/cancel");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: marketplace-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"project_id": "YOUR_PROJECT_ID",
"revision": 1
}""".encode("utf-8")
request = Request("https://api.example.com/v1/marketplace/payouts/YOUR_PAYOUT_ID/cancel",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- payouts.write gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
GETOtomatik satıcı ödemesi politikaları/v1/marketplace/policiesSalt okunur
Hazırlık veya yetkilendirme ilgilenme gerektiriyorsa varlık başına politikaları, revision, next_attempt_at, last_checked_at ve güvenli last_error alanını oku.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | marketplace.read |
Sorgu parametreleri
pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
per_pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
qisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
statusisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
store_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
vendor_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
asset_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
fromisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
toisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/marketplace/policies?project_id=YOUR_PROJECT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/marketplace/policies?project_id=YOUR_PROJECT_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/marketplace/policies?project_id=YOUR_PROJECT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/marketplace/policies?project_id=YOUR_PROJECT_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": []
}Yanıt alanları
data[]arrayKullanım notları
- marketplace.read gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
POSTSatıcı ödemesi politikasını yetkilendir/v1/marketplace/policiesOkuma ve yazma
Tam atomik dizeler; minimum <= transfer <= günlük anapara, ücret/gas sınırları <= ilgili günlük bütçeleri. interval_seconds 60–604800; minimum_confirmations zincir alt sınırına tabi 1–100000. Revision 0 oluşturur. Etkin politikalar başka tıklama olmadan gönderim yapabilir; incelenene kadar false tut.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu tam istekle birlikte sakla |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | policies.write |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/marketplace/policies" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: marketplace-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"project_id": "YOUR_PROJECT_ID",
"asset_id": "YOUR_ASSET_ID",
"revision": 0,
"enabled": false,
"minimum_atomic": "100000",
"transfer_limit_atomic": "10000000",
"daily_limit_atomic": "30000000",
"fee_limit_atomic": "10000",
"daily_fee_limit_atomic": "30000",
"gas_limit_atomic": "0",
"daily_gas_limit_atomic": "0",
"interval_seconds": 3600,
"minimum_confirmations": 2
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"project_id": "YOUR_PROJECT_ID",
"asset_id": "YOUR_ASSET_ID",
"revision": 0,
"enabled": false,
"minimum_atomic": "100000",
"transfer_limit_atomic": "10000000",
"daily_limit_atomic": "30000000",
"fee_limit_atomic": "10000",
"daily_fee_limit_atomic": "30000",
"gas_limit_atomic": "0",
"daily_gas_limit_atomic": "0",
"interval_seconds": 3600,
"minimum_confirmations": 2
}`;
const response = await fetch("https://api.example.com/v1/marketplace/policies", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"project_id": "YOUR_PROJECT_ID",
"asset_id": "YOUR_ASSET_ID",
"revision": 0,
"enabled": false,
"minimum_atomic": "100000",
"transfer_limit_atomic": "10000000",
"daily_limit_atomic": "30000000",
"fee_limit_atomic": "10000",
"daily_fee_limit_atomic": "30000",
"gas_limit_atomic": "0",
"daily_gas_limit_atomic": "0",
"interval_seconds": 3600,
"minimum_confirmations": 2
}
JSON;
$ch = curl_init("https://api.example.com/v1/marketplace/policies");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: marketplace-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"project_id": "YOUR_PROJECT_ID",
"asset_id": "YOUR_ASSET_ID",
"revision": 0,
"enabled": false,
"minimum_atomic": "100000",
"transfer_limit_atomic": "10000000",
"daily_limit_atomic": "30000000",
"fee_limit_atomic": "10000",
"daily_fee_limit_atomic": "30000",
"gas_limit_atomic": "0",
"daily_gas_limit_atomic": "0",
"interval_seconds": 3600,
"minimum_confirmations": 2
}""".encode("utf-8")
request = Request("https://api.example.com/v1/marketplace/policies",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- policies.write gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
GETPazaryeri webhook'ları/v1/marketplace/webhooksSalt okunur
En fazla 20 uç nokta ve desteklenen event_types. Şifrelenmiş veya düz metin imzalama sırlarını asla döndürmez.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | marketplace.read |
Sorgu parametreleri
pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
per_pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
qisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
statusisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
store_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
vendor_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
asset_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
fromisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
toisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/marketplace/webhooks?project_id=YOUR_PROJECT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/marketplace/webhooks?project_id=YOUR_PROJECT_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/marketplace/webhooks?project_id=YOUR_PROJECT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/marketplace/webhooks?project_id=YOUR_PROJECT_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": {
"endpoints": [],
"event_types": [
"marketplace.invoice.created",
"marketplace.allocations.available",
"marketplace.allocations.held",
"marketplace.payout.approved",
"marketplace.payout.broadcast",
"marketplace.payout.confirmed",
"marketplace.payout.partial",
"marketplace.payout.failed",
"marketplace.payout.cancelled",
"marketplace.refund.prepared",
"marketplace.refund.confirmed"
]
}
}Yanıt alanları
Kullanım notları
- marketplace.read gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
POSTPazaryeri webhook'u oluştur/v1/marketplace/webhooksOkuma ve yazma
Yalnızca herkese açık HTTPS; kimlik bilgisi, özel hedef veya yönlendirme yok. Saklanan idempotent oluşturma yanıtı başına signing_secret bir kez döndürülür; güvenle sakla. Mağaza IPN sırrından ayrıdır.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu tam istekle birlikte sakla |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | webhooks.write |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/marketplace/webhooks" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: marketplace-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"project_id": "YOUR_PROJECT_ID",
"url": "https://shop.example.com/marketplace-events",
"enabled": true,
"events": [
"marketplace.payout.confirmed",
"marketplace.payout.failed"
]
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"project_id": "YOUR_PROJECT_ID",
"url": "https://shop.example.com/marketplace-events",
"enabled": true,
"events": [
"marketplace.payout.confirmed",
"marketplace.payout.failed"
]
}`;
const response = await fetch("https://api.example.com/v1/marketplace/webhooks", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"project_id": "YOUR_PROJECT_ID",
"url": "https://shop.example.com/marketplace-events",
"enabled": true,
"events": [
"marketplace.payout.confirmed",
"marketplace.payout.failed"
]
}
JSON;
$ch = curl_init("https://api.example.com/v1/marketplace/webhooks");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: marketplace-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"project_id": "YOUR_PROJECT_ID",
"url": "https://shop.example.com/marketplace-events",
"enabled": true,
"events": [
"marketplace.payout.confirmed",
"marketplace.payout.failed"
]
}""".encode("utf-8")
request = Request("https://api.example.com/v1/marketplace/webhooks",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- webhooks.write gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
POSTPazaryeri webhook'unu güncelle/v1/marketplace/webhooks/{webhook_id}/updateOkuma ve yazma
Değişiklikler eski gönderilmemiş teslimleri iptal eder. Sır değişmez; eski değiştirilemez yükler yeni URL'ye asla yönlendirilmez.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu tam istekle birlikte sakla |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | webhooks.write |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/marketplace/webhooks/YOUR_WEBHOOK_ID/update" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: marketplace-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"url": "https://shop.example.com/marketplace-events",
"enabled": true,
"events": [
"marketplace.payout.confirmed"
]
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"url": "https://shop.example.com/marketplace-events",
"enabled": true,
"events": [
"marketplace.payout.confirmed"
]
}`;
const response = await fetch("https://api.example.com/v1/marketplace/webhooks/YOUR_WEBHOOK_ID/update", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"url": "https://shop.example.com/marketplace-events",
"enabled": true,
"events": [
"marketplace.payout.confirmed"
]
}
JSON;
$ch = curl_init("https://api.example.com/v1/marketplace/webhooks/YOUR_WEBHOOK_ID/update");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: marketplace-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"project_id": "YOUR_PROJECT_ID",
"revision": 1,
"url": "https://shop.example.com/marketplace-events",
"enabled": true,
"events": [
"marketplace.payout.confirmed"
]
}""".encode("utf-8")
request = Request("https://api.example.com/v1/marketplace/webhooks/YOUR_WEBHOOK_ID/update",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- webhooks.write gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
POSTPazaryeri webhook'unu devre dışı bırak/v1/marketplace/webhooks/{webhook_id}/disableOkuma ve yazma
Yeni teslimleri durdur; saklanan olay geçmişi kalır.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu tam istekle birlikte sakla |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | webhooks.write |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/marketplace/webhooks/YOUR_WEBHOOK_ID/disable" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: marketplace-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"project_id": "YOUR_PROJECT_ID",
"revision": 1
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"project_id": "YOUR_PROJECT_ID",
"revision": 1
}`;
const response = await fetch("https://api.example.com/v1/marketplace/webhooks/YOUR_WEBHOOK_ID/disable", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"project_id": "YOUR_PROJECT_ID",
"revision": 1
}
JSON;
$ch = curl_init("https://api.example.com/v1/marketplace/webhooks/YOUR_WEBHOOK_ID/disable");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: marketplace-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"project_id": "YOUR_PROJECT_ID",
"revision": 1
}""".encode("utf-8")
request = Request("https://api.example.com/v1/marketplace/webhooks/YOUR_WEBHOOK_ID/disable",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- webhooks.write gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
GETPazaryeri olayları/v1/marketplace/eventsSalt okunur
Sayfalanmış değiştirilemez olay referansları. q tür/referans arar; status event_type değerini filtreler.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | marketplace.read |
Sorgu parametreleri
pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
per_pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
qisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
statusisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
store_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
vendor_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
asset_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
fromisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
toisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/marketplace/events?project_id=YOUR_PROJECT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/marketplace/events?project_id=YOUR_PROJECT_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/marketplace/events?project_id=YOUR_PROJECT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/marketplace/events?project_id=YOUR_PROJECT_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [],
"pagination": {
"page": 1,
"per_page": 25,
"total": 0,
"pages": 1
}
}Yanıt alanları
Kullanım notları
- marketplace.read gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
GETSaklanan olayı oku/v1/marketplace/events/{event_id}Salt okunur
Güncel bakiyelerden yeniden oluşturulan veri değil, değiştirilemez ilk olay yükünü döndürür.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | marketplace.read |
Sorgu parametreleri
pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
per_pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
qisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
statusisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
store_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
vendor_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
asset_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
fromisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
toisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/marketplace/events/YOUR_EVENT_ID?project_id=YOUR_PROJECT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/marketplace/events/YOUR_EVENT_ID?project_id=YOUR_PROJECT_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/marketplace/events/YOUR_EVENT_ID?project_id=YOUR_PROJECT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/marketplace/events/YOUR_EVENT_ID?project_id=YOUR_PROJECT_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": {
"event_id": "11111111-1111-4111-8111-111111111111",
"event_type": "marketplace.payout.confirmed",
"payload_version": 1,
"project_id": "YOUR_PROJECT_ID",
"occurred_at": "2026-10-06T12:00:00Z",
"data": {
"payout_id": "YOUR_PAYOUT_ID",
"asset_id": "YOUR_ASSET_ID",
"amount_atomic": "28800000",
"transactions": [
{
"transaction_id": "EXAMPLE_TRANSACTION_ID",
"explorer_url": "https://mempool.space/tx/EXAMPLE_TRANSACTION_ID"
}
]
}
}
}Yanıt alanları
Kullanım notları
- marketplace.read gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
GETPazaryeri teslim geçmişi/v1/marketplace/webhook-deliveriesSalt okunur
Sayfalanmış teslimler, olay türü, denemeler ve son sonuç. status için pending/sending/succeeded/failed/cancelled; q için olay türü filtresi.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | marketplace.read |
Sorgu parametreleri
pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
per_pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
qisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
statusisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
store_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
vendor_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
asset_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
fromisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
toisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/marketplace/webhook-deliveries?project_id=YOUR_PROJECT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/marketplace/webhook-deliveries?project_id=YOUR_PROJECT_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/marketplace/webhook-deliveries?project_id=YOUR_PROJECT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/marketplace/webhook-deliveries?project_id=YOUR_PROJECT_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [],
"pagination": {
"page": 1,
"per_page": 25,
"total": 0,
"pages": 1
}
}Yanıt alanları
Kullanım notları
- marketplace.read gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
GETTeslim ayrıntıları/v1/marketplace/webhook-deliveries/{delivery_id}Salt okunur
İlk URL, saklanan yük, HTTP sonucu ve güvenli hata; imzalama sırrı yok.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | marketplace.read |
Sorgu parametreleri
pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
per_pageisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
qisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
statusisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
store_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
vendor_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
asset_idisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
fromisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
toisteğe bağlıYalnızca bu kaynak için belgelenen filtreleri kullan. Sayfalanmış listeler varsayılan 25, en fazla 100 satırdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/marketplace/webhook-deliveries/YOUR_DELIVERY_ID?project_id=YOUR_PROJECT_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/marketplace/webhook-deliveries/YOUR_DELIVERY_ID?project_id=YOUR_PROJECT_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/marketplace/webhook-deliveries/YOUR_DELIVERY_ID?project_id=YOUR_PROJECT_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/marketplace/webhook-deliveries/YOUR_DELIVERY_ID?project_id=YOUR_PROJECT_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- marketplace.read gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
POSTAynı olayı yeniden teslim et/v1/marketplace/webhook-deliveries/{delivery_id}/resendOkuma ve yazma
Yalnızca tamamlanmış teslimler ve değişmemiş etkin uç nokta; en fazla 20 elle yeniden deneme. event_id yeniden kullanılır. Başarısız bildirim ikinci ödeme yetkisi asla vermez.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MARKETPLACE_API_TOKEN |
| Idempotency-Key | zorunlu | 16–128 harf, rakam, -, _ veya .; bu tam istekle birlikte sakla |
| Parametre | Tür / konum | Kural |
|---|---|---|
| permission | credential scope | webhooks.write |
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new operation.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/marketplace/webhook-deliveries/YOUR_DELIVERY_ID/resend" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: marketplace-request-1042' \
--header 'Content-Type: application/json' \
--data-raw '{
"project_id": "YOUR_PROJECT_ID",
"confirm": true
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new operation.
const body = `{
"project_id": "YOUR_PROJECT_ID",
"confirm": true
}`;
const response = await fetch("https://api.example.com/v1/marketplace/webhook-deliveries/YOUR_DELIVERY_ID/resend", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new operation.
$body = <<<'JSON'
{
"project_id": "YOUR_PROJECT_ID",
"confirm": true
}
JSON;
$ch = curl_init("https://api.example.com/v1/marketplace/webhook-deliveries/YOUR_DELIVERY_ID/resend");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: marketplace-request-1042", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new operation.
headers = {
"Idempotency-Key": "marketplace-request-1042",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"project_id": "YOUR_PROJECT_ID",
"confirm": true
}""".encode("utf-8")
request = Request("https://api.example.com/v1/marketplace/webhook-deliveries/YOUR_DELIVERY_ID/resend",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"data": {}
}Yanıt alanları
dataobjectKullanım notları
- webhooks.write gerektirir. Yanıt örnekleri seçili alanları gösterir; saklanan kanıtların tamamı için kaynağı GET ile al.
- Her POST kalıcı saklanan 16–128 karakterlik Idempotency-Key gerektirir (harf, rakam, -, _ veya .). Zaman aşımından sonra aynı anahtarı ve JSON talimatlarını yeniden kullan. Farklı talimatlar 409 döndürür. Tamamlanmış yanıtlar 30 gün tutulur; eski anahtarlar yeniden kullanılamayan iptal kayıtlarına dönüşür. Belirsiz sonucu aşmak için anahtarı asla değiştirme.
- Anahtarların proje listeleri, isteğe bağlı fatura mağazası kısıtlamaları, sona erme zamanı, IP izin listesi ve 1–600/dakika kotası (varsayılan 60) vardır. HTTP 429 Retry-After içerir. Mağazayla sınırlı anahtarlar satıcıları, proje bakiyelerini, hesap defterini, satıcı ödemelerini veya ayarları göremez. Harcama kimlik bilgilerini yalnızca güvenilir sunucularda tut; tarayıcılarda veya dağıtılan mobil uygulamalarda asla bulundurma.
Hatalar
GETÖdeme istisnalarını listele/v1/projects/{project_id}/reconciliationSalt okunur
Eksik, fazla, geç, zincir yeniden yapılanmasından etkilenen veya belirsiz ödemeler, başarısız teslimler ve devre dışı/süresi dolmuş yöntemler için tek sayfalanmış inceleme kuyruğu. Operatörün incelendi olarak işaretlediği vakalar yeni kanıt gelince yeniden açılır.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MERCHANT_API_TOKEN |
Yol parametreleri
Sorgu parametreleri
reasonstringunderpaid, overpaid, late, reorged, ambiguous, delivery_failed, disabled_method veya expired_method.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/projects/YOUR_PROJECT_ID/reconciliation?status=open&page=1" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/projects/YOUR_PROJECT_ID/reconciliation?status=open&page=1", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/projects/YOUR_PROJECT_ID/reconciliation?status=open&page=1");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/projects/YOUR_PROJECT_ID/reconciliation?status=open&page=1",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{"data":[],"pagination":{"page":1,"per_page":25,"total":0,"has_more":false},"counts":{"open":0,"resolved":0}}Yanıt alanları
data[]object[]her zaman
En son güncellenen vakalar önce gelir. Satıcı ayrıntı URL'lerinde dahili id değil, invoice_id kullan.
idUUIDher zamanDahili kayıt kimliği / müşteriye görünen fatura UUID'si. invoice_id geri çağrı yükleriyle eşleşir.
invoice_idUUIDher zamanDahili kayıt kimliği / müşteriye görünen fatura UUID'si. invoice_id geri çağrı yükleriyle eşleşir.
paginationobjecther zaman
page (1–40001), per_page (25), eşleşen toplam satır sayısı, has_more.
Kullanım notları
- Salt okunur, proje kapsamlı ve kimlik bilgisi kotasına tabidir. Finansal kararlar ve iadeler yalnızca konsolda kalır.
- Satırlar id (dahili UUID), invoice_id (herkese açık UUID, geri çağrılarla aynı), mağaza bilgisi, ilk itibari para tutarı/para birimi, invoice_status, vaka durumu, nedenler, revision ve updated_at içerir. Satıcı ayrıntısı uç noktasında invoice_id kullan.
- Otomatik tespit ilk fatura izleme aralığına uyar; Yeniden tara ödeme sayfasını etkinleştirmeden gözlemi bir saat uzatır. Tamamlanmış/iptal edilmiş yöntemler bu aralık içinde izlenmeye devam eder.
Hatalar
GETMutabakat kanıtlarını oku/v1/projects/{project_id}/reconciliation/{invoice_id}Salt okunur
Faturayı, vakayı, tam yöntem toplamlarını ve kullanılabilir iade tutarlarını, gözlenen işlemleri, teslim geçmişini, satıcı kararlarını ve bağlantılı iade transferlerini döndürür. İmzalama anahtarlarını veya geri çağrı sırlarını asla göstermez.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MERCHANT_API_TOKEN |
Yol parametreleri
Sorgu parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/projects/YOUR_PROJECT_ID/reconciliation/YOUR_PUBLIC_INVOICE_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/projects/YOUR_PROJECT_ID/reconciliation/YOUR_PUBLIC_INVOICE_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/projects/YOUR_PROJECT_ID/reconciliation/YOUR_PUBLIC_INVOICE_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/projects/YOUR_PROJECT_ID/reconciliation/YOUR_PUBLIC_INVOICE_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{"invoice":{"invoice_id":"YOUR_PUBLIC_INVOICE_ID","status":"processing"},"case":{"status":"open","reasons":["underpaid"],"revision":1},"methods":[],"history":[],"history_pagination":{"page":1,"per_page":25,"total":0},"refunds":[],"observations":[],"deliveries":[]}Yanıt alanları
invoiceobjecther zaman
Tam satıcı faturası: özet alanları, özel meta veriler ve payment_intents. data içine sarılmaz.
invoice_idUUIDher zamanSatıcı ayrıntısı ve ödeme sayfası yollarında kullanılan herkese açık fatura UUID'si.
emailstring | nullher zamanYalnızca satıcıya açık müşteri e-postası. Herkese açık ödeme sayfası asla döndürmez.
customer_namestring | nullher zamanÖzel firstname, lastname ve company meta verilerinden türetilen görünen ad.
customer_addressstring | nullher zamanÖzel company, street, street2, zip, city, country, countryiso2 ve vatid meta verilerinden türetilen tek satırlık satıcı adresi.
exchange_rate_spread_percentdecimal stringher zamanKilitlenmiş teklif fiyat marjı: oluşturmadaki özel değer veya atlandığında mağaza varsayılanı. Yukarı yuvarlamadan önce uygulanır; bu faturada asla değişmez.
underpayment_tolerance_percentdecimal stringher zamanFatura oluşturulurken görüntüsü alınmış, değiştirilemez kabul edilen eksik ödeme yüzdesi.
amount_statusamount statusher zamannone, partial, paid veya overpaid. Açıkça izin verilen sıfır tutarlı fatura none ile ve ödeme yöntemi olmadan tamamlanır.
monitoring_expires_atRFC 3339 timestampher zamanÖdeme yöntemleri genelinde yapılandırılmış en geç geç ödeme izleme bitişi.
ipn_urlstring | nullher zamanFaturaya özel geçerli IPN hedefi. Yalnızca satıcı yanıtında bulunur; herkese açık ödeme sayfasından çıkarılır.
cancel_urlstring | nullher zamanÖdeme sayfası başarılı ödeme olmadan sona erdiğinde kullanılan geçerli dönüş URL'si.
redirect_automaticallybooleanher zamanÖdeme sayfasının başarıdan sonra otomatik yönlenip yönlenmeyeceği.
metadataobjecther zamanSatıcı meta verileri. Herkese açık ödeme sayfası asla döndürmez. Konsol ödeme araçları payment_tool köken bilgisini ekler (id, kind, title, pricing, requested_amount, request_id); bu ödeme kanıtı değildir. Geri çağrıları doğrula ve invoice.settled için invoice_id başına bir kez siparişi yerine getir.Ayrıntılar
Satıcı meta verileri. Herkese açık ödeme sayfası asla döndürmez. Konsol ödeme araçları payment_tool köken bilgisini ekler (id, kind, title, pricing, requested_amount, request_id); bu ödeme kanıtı değildir. Geri çağrıları doğrula ve invoice.settled için invoice_id başına bir kez siparişi yerine getir.
payment_intents[]object[]her zaman
Teklif verilen ödeme yöntemleri ve izleme durumu.
payment_railonchain | lightningher zamanFatura aktarım türü. Zincir üstü Bitcoin ve Lightning aynı asset_id paylaşabilir; yalnızca sembol yerine isteğin id değerini ve bu alanı kullan. Bu, varlık kataloğundaki tarayıcı payment_rail alanından farklıdır.Ayrıntılar
Fatura aktarım türü. Zincir üstü Bitcoin ve Lightning aynı asset_id paylaşabilir; yalnızca sembol yerine isteğin id değerini ve bu alanı kullan. Bu, varlık kataloğundaki tarayıcı payment_rail alanından farklıdır.
bolt11string | nullher zamanLightning ödeme isteği; diğer durumlarda null. Bunu Lightning cüzdanıyla öde; ödeme hash'ine asla zincir üstü fon gönderme.
asset_decimalsintegerher zamanAtomik birim hassasiyeti. Lightning BTC, zincir üstü Bitcoin'in 8 basamağı yerine 11 (millisatoshi) kullanır. Teklifler tam satoshi'dir; tahsilatlar millisatoshi hassasiyetini korur.
quote_ratedecimal stringher zamanKilitlenmiş fiyat marjı dahil, bir fatura para birimi başına varlık birimi. Örneğin USD başına 1.02 USDC. Ters kur değildir.
quote_detailsobject | nullher zamanKilitlenmiş teklif kökeni: fiyat marjı öncesi reference_rate, unrounded_payment_amount, rounding_adjustment, pricing_provider, asset_provider, pricing_fetched_at ve asset_fetched_at. Eski faturalarda null; geçmiş değerler uydurulmaz.Ayrıntılar
Kilitlenmiş teklif kökeni: fiyat marjı öncesi reference_rate, unrounded_payment_amount, rounding_adjustment, pricing_provider, asset_provider, pricing_fetched_at ve asset_fetched_at. Eski faturalarda null; geçmiş değerler uydurulmaz.
expected_amountdecimal stringher zamanFiyat marjı ve yukarı yuvarlamadan sonra ödenecek tam kilitli varlık tutarı. 4.1.1'den itibaren tanınan ve doğrulanmış itibari para stablecoin'leri (USDC, USDT, DAI, USDS, EURC gibi) en fazla iki ondalık basamağa yukarı yuvarlanır; 1.321, 1.33 olur, asla 1.32 olmaz. Tolerans sıfır olsa bile beklenen tutar budur. Diğer varlıklar uyarlanabilir hassasiyetini korur. Mevcut faturalar asla yeniden fiyatlandırılmaz.Ayrıntılar
Fiyat marjı ve yukarı yuvarlamadan sonra ödenecek tam kilitli varlık tutarı. 4.1.1'den itibaren tanınan ve doğrulanmış itibari para stablecoin'leri (USDC, USDT, DAI, USDS, EURC gibi) en fazla iki ondalık basamağa yukarı yuvarlanır; 1.321, 1.33 olur, asla 1.32 olmaz. Tolerans sıfır olsa bile beklenen tutar budur. Diğer varlıklar uyarlanabilir hassasiyetini korur. Mevcut faturalar asla yeniden fiyatlandırılmaz.
minimum_payment_amountdecimal stringher zamanFatura toleransı uygulandıktan sonra ödendi olarak kabul edilen en küçük tutar.
destination_addressstringher zamanZincir üstü ödeme alma adresi veya Lightning için 64 karakterlik ödeme hash'i. Lightning ödemek için bolt11 kullan; hash'i Bitcoin adresi değildir.
destination_tagstring | nullher zamanÖdeme altyapısı gerektiriyorsa zorunlu herkese açık ödeme referansı: XRP destination tag, Stellar memo ID veya TON fatura açıklaması. Benzersiz adresli altyapılarda null.
caseobject | nullher zaman
Durum, nedenler, revizyon ve zaman damgalarıyla güncel vaka; istisna yoksa null. Dahili kanıtlar hariç tutulur.
methods[]object[]her zamanid, wallet_id, asset_id, symbol, chain, decimals, expected_atomic, received_atomic, confirmed_atomic, refundable_atomic, address, tag, monitor_error, last_checked_at, monitoring_expires_at ve spending_supported. Atomik tutarlar dizedir.Ayrıntılar
id, wallet_id, asset_id, symbol, chain, decimals, expected_atomic, received_atomic, confirmed_atomic, refundable_atomic, address, tag, monitor_error, last_checked_at, monitoring_expires_at ve spending_supported. Atomik tutarlar dizedir.
history[]object[]her zamanBu sayfanın en yeni 25 kararı: id, action, note, actor, result, created_at.
history_paginationobjecther zaman
page, per_page (25), total. Yalnızca karar geçmişi page ile sayfalanır.
refunds[]object[]her zamanEn yeni 100 iade: id, payment_intent_id, amount_atomic, destination, status, request, treasury_intent_id, transfer_status, created_at ve transactions (id/status). İade gönderimi yalnızca konsoldan yapılır.Ayrıntılar
En yeni 100 iade: id, payment_intent_id, amount_atomic, destination, status, request, treasury_intent_id, transfer_status, created_at ve transactions (id/status). İade gönderimi yalnızca konsoldan yapılır.
observations[]object[]her zamanEn yeni 100: payment_intent_id, transaction_id, event_index, amount, status, confirmations, observed_at, symbol, chain ve disabled_at_detection. Desteklendiğinde explorer_name/explorer_url eklenir.Ayrıntılar
En yeni 100: payment_intent_id, transaction_id, event_index, amount, status, confirmations, observed_at, symbol, chain ve disabled_at_detection. Desteklendiğinde explorer_name/explorer_url eklenir.
deliveries[]object[]her zamanEn yeni 50: id, kind, status, attempts, response_status, error, next_attempt_at, event_type ve created_at. Geri çağrı sırları yoktur.
Kullanım notları
- Fatura istisna üretmediyse case null'dur. En son 100 gözlem ve 50 teslim döndürülür; karar geçmişi sayfalanır.
- refundable_atomic en az bir ağ onayı gerektirir, mevcut iade rezervasyonlarını hariç tutar ve harcanabilir cüzdan fonu sözü değildir. Canlı teklif ayrıca cüzdan hazırlığını, kaynak bakiyelerini ve ücretleri doğrular.
- Ağa yayınlanmış iade, zincir uç noktasına iletildi demektir; müşterinin aldığının bağımsız olarak onaylandığı anlamına gelmez. Ücretler eklenir ve iade yapmak itibari para işlem ücretlerini otomatik olarak geri kredilendirmez.
- Konsol proje menüsü → İlgilenilmesi gerekenler; iptal, kabul, ret, yeniden açma, inceleme, notlar, Yeniden tara, teslimi yeniden deneme ve desteklenen zincirlerde iade sunar. Kararlar CSRF korumalı oturum, benzersiz request_id, güncel vaka revizyonu, zorunlu not ve açık onay kullanır; bearer token'ları bu değişiklikleri çağıramaz.
Hatalar
GETAPI hizmet keşfi/Herkese açık
v1 herkese açık API rolünü doğrulayan yönetilen API ana makinesi giriş yanıtı. Bu yanıtı satıcı Axum yönlendiricisi değil, yönetilen proxy üretir.
Kimlik doğrulama ve üst bilgiler
Herkese açık
İstek
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/"// Node.js 18+ · run on your server, never in browser code.
const response = await fetch("https://api.example.com/", {
method: "GET",
headers: {},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$ch = curl_init("https://api.example.com/");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => [],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
request = Request("https://api.example.com/",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"service": "Wholly Crypto API",
"status": "ready",
"version": "v1"
}Yanıt alanları
Kullanım notları
- Bearer token gerekmez.
- Bu tam kök yanıtını yalnızca yönetilen API ana makine adı garanti eder.
Hatalar
GETHizmet sağlığı/healthzHerkese açık
Uygulama erişilebilirliğini ve iki saniyelik veritabanı ping'ini kontrol eder. İzleme için kullan; fatura durumunun yerine koyma.
Kimlik doğrulama ve üst bilgiler
Herkese açık
İstek
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/healthz"// Node.js 18+ · run on your server, never in browser code.
const response = await fetch("https://api.example.com/healthz", {
method: "GET",
headers: {},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$ch = curl_init("https://api.example.com/healthz");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => [],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
request = Request("https://api.example.com/healthz",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 healthy; 503 database unavailable
Örnek yanıt
{
"status": "ok",
"database": "ok",
"version": "0.1.0"
}Yanıt alanları
Kullanım notları
- Bearer token gerekmez.
- version değeri API yol sürümü değil, çalışan paket sürümüdür.
Hatalar
GETProje ödeme varlıklarını listele/v1/projects/{project_id}/payment-assetsSalt okunur
Yerel varlıkları ve doğrulanmış token'ları proje politikası, zincir cüzdanı hazırlığı ve kurulu tarayıcı/bakiye yetenekleriyle listeler. scanner_ready canlı uç nokta yeter sayısı sonucu değil, adaptör derleme kontrolüdür. 6.0.6'dan itibaren fatura oluşturma tarayıcı kesintisinde yapılandırılmış yöntemleri korur. Ödeme alma doğrulaması yine yapılandırılmış sağlıklı, tam role uygun sağlayıcı eşiğini gerektirir (varsayılan 2, isteğe bağlı 1).
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MERCHANT_API_TOKEN |
| Accept | önerilen | application/json |
Yol parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/projects/YOUR_PROJECT_ID/payment-assets" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Accept: application/json'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/projects/YOUR_PROJECT_ID/payment-assets", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`,
"Accept": "application/json"
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/projects/YOUR_PROJECT_ID/payment-assets");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Accept: application/json"],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {
"Accept": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/projects/YOUR_PROJECT_ID/payment-assets",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [
{
"asset": {
"id": "10000000-0000-4000-8000-000000000003",
"asset_key": "eip155:1/slip44:60",
"chain_slug": "ethereum",
"network": "mainnet",
"caip_network_id": "eip155:1",
"caip_asset_id": "eip155:1/slip44:60",
"asset_kind": "native",
"payment_rail": "evm-native",
"symbol": "ETH",
"name": "Ethereum",
"decimals": 18,
"contract_address": null,
"coingecko_id": "ethereum",
"icon_path": "/assets/coingecko/ethereum.png",
"token_standard": null,
"metadata_verified_at": null,
"payment_supported": true,
"scanner_ready": true,
"balance_ready": true,
"default_finality_mode": "confirmations",
"default_required_confirmations": 12,
"default_monitoring_minutes": 60
},
"policy": {
"enabled": true,
"finality_mode": "confirmations",
"required_confirmations": 12,
"monitoring_minutes": 60,
"late_monitoring_days": 30
},
"wallet": null,
"wallet_readiness": "wallet_missing",
"receive_readiness": { "ready": false, "invoice_creatable": false, "checked_at": "2026-09-16T09:00:00Z", "issues": [{ "chain_slug": "ethereum", "asset_id": "10000000-0000-4000-8000-000000000003", "asset_ticker": "ETH", "reason_code": "wallet_missing", "message": "ethereum / ETH: Create a project wallet for this chain.", "action": "wallets" }] }
}
]
}Yanıt alanları
data[]object[]
assetobjecther zaman
Kalıcı yerel varlık veya doğrulanmış token varlığı.
asset_kindnative | tokenher zamanÖdeme tamamlanmasında zincir para biriminin mi, doğrulanmış sözleşme/mint'in mi kullanıldığı.
payment_railstringher zamanÇalışma zamanı ödeme altyapısı: utxo, evm-native, solana-native, account-native, privacy-native veya token-transfer.
contract_addressstring | nullher zamanToken'lar için kanonik ERC-20 sözleşmesi veya SPL mint'i; yerel varlıklarda null.
coingecko_idstring | nullher zamanKeşif/fiyatlandırma kimliği. Özel sözleşmelerde null; sembollerinden piyasa fiyatı çıkarma. CoinGecko meta verileri tek başına token'ı seçilebilir yapmaz.
custom_tokenbooleanher zamanProje kapsamlı sabit USD veya seçili DEX havuzu fiyatlandırması olan, zincir üstünde doğrulanmış özel sözleşme.
token_standarderc20 | spl-token | nullher zamanDoğrulanmış çalışma zamanı token standardı; yerel varlıklarda null.
metadata_verified_attimestamp | nullher zamanÖdeme varlığına dönüştürülen token'ların zincir üstü meta veri doğrulama zamanı.
payment_supportedbooleanher zamanDerleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.Ayrıntılar
Derleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.
scanner_readybooleanher zamanDerleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.Ayrıntılar
Derleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.
balance_readybooleanher zamanDerleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.Ayrıntılar
Derleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.
default_finality_modeconfirmations | finalizedher zamanYeni proje politikasının devraldığı varsayılan kesinlik modeli.
policyobject | nullher zaman
Proje etkinleştirme/kesinlik politikası; yapılandırılmadıysa null. custom_price_mode (fixed/dex), custom_price_usd (sabit ondalık sayı dizesi veya null), custom_dex_pair (seçilen havuz veya null) ve custom_dex (dex_id, quote_symbol, güncel price_usd veya null, liquidity_usd, fetched_at, last_error) içerir. Özel fiyatlandırma bu projedeki mağazalar tarafından paylaşılır.Ayrıntılar
Proje etkinleştirme/kesinlik politikası; yapılandırılmadıysa null. custom_price_mode (fixed/dex), custom_price_usd (sabit ondalık sayı dizesi veya null), custom_dex_pair (seçilen havuz veya null) ve custom_dex (dex_id, quote_symbol, güncel price_usd veya null, liquidity_usd, fetched_at, last_error) içerir. Özel fiyatlandırma bu projedeki mağazalar tarafından paylaşılır.
enabledbooleanzorunluVarlığı proje için etkinleştirir veya devre dışı bırakır. Herhangi bir token'dan önce yerel zincir etkin olmalıdır.
finality_modeconfirmations | finalizedzorunluVarlık ödeme altyapısının desteklediği kesinlik politikası. finalized, required_confirmations=1 gerektirir.
required_confirmationsintegerzorunluBitcoin ve EVM altyapıları sıfır kabul eder; diğer onay altyapıları en az bir, yalnızca finalized altyapıları tam bir gerektirir. Her transferin işlem yeniden oynatma aralığında kalması için EVM altyapıları 0–48 ile sınırlıdır.Ayrıntılar
Bitcoin ve EVM altyapıları sıfır kabul eder; diğer onay altyapıları en az bir, yalnızca finalized altyapıları tam bir gerektirir. Her transferin işlem yeniden oynatma aralığında kalması için EVM altyapıları 0–48 ile sınırlıdır.
walletobject | nullher zaman
Zincirin saklama hizmeti olmayan proje cüzdanı. Token'lar zincirlerinin yerel cüzdanını paylaşır.
public_keystring | nullher zamanHerkese açık cüzdan kimliği; kurtarma ifadesi veya özel anahtar açığa çıkarılmaz.
primary_addressstring | nullher zamanHerkese açık cüzdan kimliği; kurtarma ifadesi veya özel anahtar açığa çıkarılmaz.
backup_confirmed_attimestamp | nullher zamanOperatör kurtarma yedeğini onayladıktan sonra null değildir.
activation_requiredbooleanher zamanXRP ve Stellar ortak hesapları, operatör gösterilen adrese fon gönderene ve yapılandırılmış tarayıcı sağlayıcıları tam olarak o hesabı doğrulayana kadar kullanılamaz. Kalıcı kanıtın süresi dolmaz; canlı tarayıcı sağlığı fatura oluşturma için değil, ödeme doğrulaması için ayrı kontrol edilir.Ayrıntılar
XRP ve Stellar ortak hesapları, operatör gösterilen adrese fon gönderene ve yapılandırılmış tarayıcı sağlayıcıları tam olarak o hesabı doğrulayana kadar kullanılamaz. Kalıcı kanıtın süresi dolmaz; canlı tarayıcı sağlığı fatura oluşturma için değil, ödeme doğrulaması için ayrı kontrol edilir.
activation_verified_attimestamp|nullher zamanXRP ve Stellar ortak hesapları, operatör gösterilen adrese fon gönderene ve yapılandırılmış tarayıcı sağlayıcıları tam olarak o hesabı doğrulayana kadar kullanılamaz. Kalıcı kanıtın süresi dolmaz; canlı tarayıcı sağlığı fatura oluşturma için değil, ödeme doğrulaması için ayrı kontrol edilir.Ayrıntılar
XRP ve Stellar ortak hesapları, operatör gösterilen adrese fon gönderene ve yapılandırılmış tarayıcı sağlayıcıları tam olarak o hesabı doğrulayana kadar kullanılamaz. Kalıcı kanıtın süresi dolmaz; canlı tarayıcı sağlığı fatura oluşturma için değil, ödeme doğrulaması için ayrı kontrol edilir.
receive_readinessobject | null5.5.0+
Cüzdan listelerine dahildir: proje ödeme alma kurulumu ve zincir tarayıcısı ön koşulları. Bakiyelerden, token gas'ından ve gönderime hazır olma durumundan ayrıdır. Diğer cüzdan yanıtlarında null kalabilir.Ayrıntılar
Cüzdan listelerine dahildir: proje ödeme alma kurulumu ve zincir tarayıcısı ön koşulları. Bakiyelerden, token gas'ından ve gönderime hazır olma durumundan ayrıdır. Diğer cüzdan yanıtlarında null kalabilir.
readybooleanher zamanÖdeme alma kurulum kontrolleri geçti. Harcamaya hazır olmayı, gas'ı, bakiye yenilemeyi veya garantili gelecek teklifi açıklamaz.
invoice_creatableboolean6.0.6+Yapılandırma geçici tarayıcı uyarılarına rağmen fatura yöntemine izin verir. Para birimi fiyatlandırması oluşturma sırasında kontrol edilir. Bu ödeme doğrulaması değildir: invoice_creatable true iken ready false olabilir. Eksik cüzdanlar, devre dışı politika ve desteklenmeyen adaptörler yine güvenli biçimde başarısız olur.Ayrıntılar
Yapılandırma geçici tarayıcı uyarılarına rağmen fatura yöntemine izin verir. Para birimi fiyatlandırması oluşturma sırasında kontrol edilir. Bu ödeme doğrulaması değildir: invoice_creatable true iken ready false olabilir. Eksik cüzdanlar, devre dışı politika ve desteklenmeyen adaptörler yine güvenli biçimde başarısız olur.
issues[]object[]her zaman
Hazırsa boş; aksi halde ödeme alma uyarısı veya yapılandırma engeli. Geçici tarayıcı uyarılarını fatura kurulum hatalarından ayırmak için invoice_creatable kontrol et.Ayrıntılar
Hazırsa boş; aksi halde ödeme alma uyarısı veya yapılandırma engeli. Geçici tarayıcı uyarılarını fatura kurulum hatalarından ayırmak için invoice_creatable kontrol et.
chain_slugstringbiliniyorsaEtkilenen zinciri ve varlığı tanımlar. Lightning asset_id içermeyebilir.
asset_tickerstringbiliniyorsaEtkilenen zinciri ve varlığı tanımlar. Lightning asset_id içermeyebilir.
reason_codestringher zamanscanner_provider_quorum, scanner_not_checked, scanner_unavailable, wallet_missing, wallet_disabled, wallet_backup_required, wallet_key_unavailable, wallet_activation_required, monero_binding_unavailable, rate_unavailable, custom_rate_unavailable, lightning_unavailable, project_disabled, store_disabled, chain_disabled, asset_disabled veya asset_not_accepted.Ayrıntılar
scanner_provider_quorum, scanner_not_checked, scanner_unavailable, wallet_missing, wallet_disabled, wallet_backup_required, wallet_key_unavailable, wallet_activation_required, monero_binding_unavailable, rate_unavailable, custom_rate_unavailable, lightning_unavailable, project_disabled, store_disabled, chain_disabled, asset_disabled veya asset_not_accepted.
messagestringvarsaSatıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.Ayrıntılar
Satıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.
actionstringvarsaSatıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.Ayrıntılar
Satıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.
required_endpoint_rolestring | nullzincir üstüTercih edilen tarayıcı API rolü (eski alan). Tam uyumluluk listesi için accepted_endpoint_roles kullan. Temel düğüm sağlığı ödeme geçmişi desteğini kanıtlamaz.Ayrıntılar
Tercih edilen tarayıcı API rolü (eski alan). Tam uyumluluk listesi için accepted_endpoint_roles kullan. Temel düğüm sağlığı ödeme geçmişi desteğini kanıtlamaz.
accepted_endpoint_roles[]string[] | nullzincir üstüUyumlu API biçimleri; uç nokta geçmişi veya kapasitesi kanıtı değildir. Ham node-rpc, BTC/BCH/LTC/DOGE/DASH ve şeffaf ZEC (tam çözümlenmiş bloklar, 1–48 onay), solidified yerel TRX, algod üzerinden yerel ALGO, Octez üzerinden XTZ, SCALE meta verileriyle kesinleşmiş Asset Hub DOT ve fatura memo ID'siyle Stellar RPC üzerinden yerel XLM destekler. Budanmış veya eksik geçmiş uygun değildir. Bu ham adaptörler token altyapısı eklemez. İndeksli API'ler alternatif olmaya devam eder; aşağıdaki altyapı tablosuna bak. Karma ham/indeksli kaynaklar sınırlı aralıkları bağımsız doğrular; varsayılan, tek operatörün takma adları değil, iki bağımsız sağlayıcıdır. Temel düğüm yüksekliği, ORDnet zincir bilgisi ve EVM dışı altyapı için EVM rölesi ödeme alma kanıtı değildir. Monero yine projeye bağlı, yalnızca görüntüleme yetkili wallet-RPC gerektirir.Ayrıntılar
Uyumlu API biçimleri; uç nokta geçmişi veya kapasitesi kanıtı değildir. Ham node-rpc, BTC/BCH/LTC/DOGE/DASH ve şeffaf ZEC (tam çözümlenmiş bloklar, 1–48 onay), solidified yerel TRX, algod üzerinden yerel ALGO, Octez üzerinden XTZ, SCALE meta verileriyle kesinleşmiş Asset Hub DOT ve fatura memo ID'siyle Stellar RPC üzerinden yerel XLM destekler. Budanmış veya eksik geçmiş uygun değildir. Bu ham adaptörler token altyapısı eklemez. İndeksli API'ler alternatif olmaya devam eder; aşağıdaki altyapı tablosuna bak. Karma ham/indeksli kaynaklar sınırlı aralıkları bağımsız doğrular; varsayılan, tek operatörün takma adları değil, iki bağımsız sağlayıcıdır. Temel düğüm yüksekliği, ORDnet zincir bilgisi ve EVM dışı altyapı için EVM rölesi ödeme alma kanıtı değildir. Monero yine projeye bağlı, yalnızca görüntüleme yetkili wallet-RPC gerektirir.
healthy_endpointsintegerzincir üstüSağlıklı eşleşen uç noktalar; bağımsız sağlayıcı sayısı değildir.
usable_independent_providersintegerzincir üstüEn fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.Ayrıntılar
En fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.
required_independent_providersintegerzincir üstüEn fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.Ayrıntılar
En fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.
last_checked_attimestamp | nullzincir üstüDeğerlendirme zamanından ayrı, son eşleşen uç nokta sağlık kontrolü.
monero_wallet_rpcMoneroWalletRpcBinding | nullher zamanMonero için hassas bilgileri ayıklanmış harici, yalnızca görüntüleme yetkili wallet-RPC bağlantı durumu. Uç nokta, kimlik doğrulama modu, account-0 birincil adresi, teknik kanıt işaretleri/yükseklikleri ve operatör beyanı zaman damgaları içerir; kimlik bilgileri, cüzdan anahtarları ve cüzdan dosyaları asla serileştirilmez.Ayrıntılar
Monero için hassas bilgileri ayıklanmış harici, yalnızca görüntüleme yetkili wallet-RPC bağlantı durumu. Uç nokta, kimlik doğrulama modu, account-0 birincil adresi, teknik kanıt işaretleri/yükseklikleri ve operatör beyanı zaman damgaları içerir; kimlik bilgileri, cüzdan anahtarları ve cüzdan dosyaları asla serileştirilmez.
balances[]object[]her zaman
30 yerel zincir altyapısının her biri ve doğrulanmış ERC-20 ile SPL varlıkları için önbellekteki bakiyeler. Monero için yapılandırılmış harici, yalnızca görüntüleme yetkili wallet-RPC gerekir.Ayrıntılar
30 yerel zincir altyapısının her biri ve doğrulanmış ERC-20 ile SPL varlıkları için önbellekteki bakiyeler. Monero için yapılandırılmış harici, yalnızca görüntüleme yetkili wallet-RPC gerekir.
project_enabledbooleanher zamanBu varlığın şu anda projenin varlık politikasıyla etkin olup olmadığı.
active_store_countintegerher zamanŞu anda bu varlığı seçen etkin mağaza sayısı. Bu, kabul durumunun görünümüdür; salt okunur bakiye takibi bağımsız kalır.
active_store_ids[]UUID[]her zamanBu projede varlığı şu anda kabul eden etkin mağazalar. Başka API isteği olmadan tam yerel mağaza filtrelemesi sağlar.
tracking_activebooleanher zamanBu okunabilir cüzdan ve kayıtlı aynı zincir varlığının arka plan bakiye yenilemesine uygun olup olmadığı. Proje ve ödeme yöntemi kabul anahtarları salt okunur takibi duraklatmaz.Ayrıntılar
Bu okunabilir cüzdan ve kayıtlı aynı zincir varlığının arka plan bakiye yenilemesine uygun olup olmadığı. Proje ve ödeme yöntemi kabul anahtarları salt okunur takibi duraklatmaz.
balancedecimal string|nullher zamanCüzdanın birincil adresi ve oluşturulmuş fatura adresleri genelindeki tam gösterim ve atomik bakiye. Tam değer bulunamıyorsa null.
balance_atomicinteger string|nullher zamanCüzdanın birincil adresi ve oluşturulmuş fatura adresleri genelindeki tam gösterim ve atomik bakiye. Tam değer bulunamıyorsa null.
price_usddecimal string | nullher zamanDeğerleme için kullanılan bilgi amaçlı önbellek USD birim fiyatı.
statuspending | refreshing | fresh | stale | errorher zamanÖnbellek tarama durumu. refreshing tamamlanmış bakiyeyi koruyabilir: yaşı için checked_at kullan. Pending tamamlanmış görüntü yok demektir. Bu durumların hiçbiri transferin beklediğini veya faturanın tamamlandığını kanıtlamaz.Ayrıntılar
Önbellek tarama durumu. refreshing tamamlanmış bakiyeyi koruyabilir: yaşı için checked_at kullan. Pending tamamlanmış görüntü yok demektir. Bu durumların hiçbiri transferin beklediğini veya faturanın tamamlandığını kanıtlamaz.
total_value_usddecimal string | nullher zamanGüncel USD fiyatı bulunan bakiyelerin bilgi amaçlı toplamı.
balance_statuspending | refreshing | fresh | stale | error | unknownher zamanBirleştirilmiş önbellek güncelliği; unknown temkinli yedek değerdir ve bu durumların hiçbiri fatura ödemesinin tamamlandığını kanıtlamaz.
balance_checked_attimestamp | nullher zamanToplamın temsil ettiği en eski ilgili başarılı bakiye kontrolü.
recent_payments[]object[]her zaman
Tam olarak bu cüzdana atfedilen, en yeni en fazla üç geçerli detected, confirming veya final gözlem.
statusdetected | confirming | finalher zamanGüncel geçerli gözlem durumu. Reorged, replaced ve invalid gözlemler hariç tutulur.
wallet_readinessreadiness enumher zamanunsupported, project_disabled, project_asset_disabled, store_disabled, store_asset_disabled, wallet_missing, wallet_pending, wallet_disabled, wallet_error, backup_required, account_activation_required, external_wallet_rpc_required veya ready.Ayrıntılar
unsupported, project_disabled, project_asset_disabled, store_disabled, store_asset_disabled, wallet_missing, wallet_pending, wallet_disabled, wallet_error, backup_required, account_activation_required, external_wallet_rpc_required veya ready.
receive_readinessobject | null5.5.0+
Ortak proje ödeme alma kurulumu değerlendirmesi. Bakiye güncelliğinden ve gönderim gas'ından ayrı cüzdan ve bağımsız tarayıcı sağlayıcısı kontrollerini içerir. Proje politikası yoksa null. Fatura para birimi/kurları fatura oluştururken kontrol edilir.Ayrıntılar
Ortak proje ödeme alma kurulumu değerlendirmesi. Bakiye güncelliğinden ve gönderim gas'ından ayrı cüzdan ve bağımsız tarayıcı sağlayıcısı kontrollerini içerir. Proje politikası yoksa null. Fatura para birimi/kurları fatura oluştururken kontrol edilir.
readybooleanher zamanÖdeme alma kurulum kontrolleri geçti. Harcamaya hazır olmayı, gas'ı, bakiye yenilemeyi veya garantili gelecek teklifi açıklamaz.
invoice_creatableboolean6.0.6+Yapılandırma geçici tarayıcı uyarılarına rağmen fatura yöntemine izin verir. Para birimi fiyatlandırması oluşturma sırasında kontrol edilir. Bu ödeme doğrulaması değildir: invoice_creatable true iken ready false olabilir. Eksik cüzdanlar, devre dışı politika ve desteklenmeyen adaptörler yine güvenli biçimde başarısız olur.Ayrıntılar
Yapılandırma geçici tarayıcı uyarılarına rağmen fatura yöntemine izin verir. Para birimi fiyatlandırması oluşturma sırasında kontrol edilir. Bu ödeme doğrulaması değildir: invoice_creatable true iken ready false olabilir. Eksik cüzdanlar, devre dışı politika ve desteklenmeyen adaptörler yine güvenli biçimde başarısız olur.
issues[]object[]her zaman
Hazırsa boş; aksi halde ödeme alma uyarısı veya yapılandırma engeli. Geçici tarayıcı uyarılarını fatura kurulum hatalarından ayırmak için invoice_creatable kontrol et.Ayrıntılar
Hazırsa boş; aksi halde ödeme alma uyarısı veya yapılandırma engeli. Geçici tarayıcı uyarılarını fatura kurulum hatalarından ayırmak için invoice_creatable kontrol et.
chain_slugstringbiliniyorsaEtkilenen zinciri ve varlığı tanımlar. Lightning asset_id içermeyebilir.
asset_tickerstringbiliniyorsaEtkilenen zinciri ve varlığı tanımlar. Lightning asset_id içermeyebilir.
reason_codestringher zamanscanner_provider_quorum, scanner_not_checked, scanner_unavailable, wallet_missing, wallet_disabled, wallet_backup_required, wallet_key_unavailable, wallet_activation_required, monero_binding_unavailable, rate_unavailable, custom_rate_unavailable, lightning_unavailable, project_disabled, store_disabled, chain_disabled, asset_disabled veya asset_not_accepted.Ayrıntılar
scanner_provider_quorum, scanner_not_checked, scanner_unavailable, wallet_missing, wallet_disabled, wallet_backup_required, wallet_key_unavailable, wallet_activation_required, monero_binding_unavailable, rate_unavailable, custom_rate_unavailable, lightning_unavailable, project_disabled, store_disabled, chain_disabled, asset_disabled veya asset_not_accepted.
messagestringvarsaSatıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.Ayrıntılar
Satıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.
actionstringvarsaSatıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.Ayrıntılar
Satıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.
required_endpoint_rolestring | nullzincir üstüTercih edilen tarayıcı API rolü (eski alan). Tam uyumluluk listesi için accepted_endpoint_roles kullan. Temel düğüm sağlığı ödeme geçmişi desteğini kanıtlamaz.Ayrıntılar
Tercih edilen tarayıcı API rolü (eski alan). Tam uyumluluk listesi için accepted_endpoint_roles kullan. Temel düğüm sağlığı ödeme geçmişi desteğini kanıtlamaz.
accepted_endpoint_roles[]string[] | nullzincir üstüUyumlu API biçimleri; uç nokta geçmişi veya kapasitesi kanıtı değildir. Ham node-rpc, BTC/BCH/LTC/DOGE/DASH ve şeffaf ZEC (tam çözümlenmiş bloklar, 1–48 onay), solidified yerel TRX, algod üzerinden yerel ALGO, Octez üzerinden XTZ, SCALE meta verileriyle kesinleşmiş Asset Hub DOT ve fatura memo ID'siyle Stellar RPC üzerinden yerel XLM destekler. Budanmış veya eksik geçmiş uygun değildir. Bu ham adaptörler token altyapısı eklemez. İndeksli API'ler alternatif olmaya devam eder; aşağıdaki altyapı tablosuna bak. Karma ham/indeksli kaynaklar sınırlı aralıkları bağımsız doğrular; varsayılan, tek operatörün takma adları değil, iki bağımsız sağlayıcıdır. Temel düğüm yüksekliği, ORDnet zincir bilgisi ve EVM dışı altyapı için EVM rölesi ödeme alma kanıtı değildir. Monero yine projeye bağlı, yalnızca görüntüleme yetkili wallet-RPC gerektirir.Ayrıntılar
Uyumlu API biçimleri; uç nokta geçmişi veya kapasitesi kanıtı değildir. Ham node-rpc, BTC/BCH/LTC/DOGE/DASH ve şeffaf ZEC (tam çözümlenmiş bloklar, 1–48 onay), solidified yerel TRX, algod üzerinden yerel ALGO, Octez üzerinden XTZ, SCALE meta verileriyle kesinleşmiş Asset Hub DOT ve fatura memo ID'siyle Stellar RPC üzerinden yerel XLM destekler. Budanmış veya eksik geçmiş uygun değildir. Bu ham adaptörler token altyapısı eklemez. İndeksli API'ler alternatif olmaya devam eder; aşağıdaki altyapı tablosuna bak. Karma ham/indeksli kaynaklar sınırlı aralıkları bağımsız doğrular; varsayılan, tek operatörün takma adları değil, iki bağımsız sağlayıcıdır. Temel düğüm yüksekliği, ORDnet zincir bilgisi ve EVM dışı altyapı için EVM rölesi ödeme alma kanıtı değildir. Monero yine projeye bağlı, yalnızca görüntüleme yetkili wallet-RPC gerektirir.
healthy_endpointsintegerzincir üstüSağlıklı eşleşen uç noktalar; bağımsız sağlayıcı sayısı değildir.
usable_independent_providersintegerzincir üstüEn fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.Ayrıntılar
En fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.
required_independent_providersintegerzincir üstüEn fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.Ayrıntılar
En fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.
last_checked_attimestamp | nullzincir üstüDeğerlendirme zamanından ayrı, son eşleşen uç nokta sağlık kontrolü.
Kullanım notları
- Token küresel katalogda listelense bile scanner_ready veya payment_supported false olduğunda seçilemez kalabilir.
- Operatör yetenek matrisi tarayıcının tam uç nokta rolünü de gerektirir; uyumsuz API sunan sağlıklı uç nokta sayılmaz.
- Token'lar yerel zincirlerinin proje cüzdanını paylaşır; yeni kurtarma ifadesi oluşturmaz.
- Gömülü cüzdan özetleri yalnızca hazırlık içindir ve bakiyeleri boş bırakır; zenginleştirilmiş bakiyeler için GET /v1/projects/{project_id}/wallets kullan.
Hatalar
PUTProje varlık politikasını güncelle/v1/projects/{project_id}/payment-assets/{asset_id}Okuma ve yazma
Tek bir kalıcı varlığın proje politikasını oluşturur veya değiştirir ve yenilenmiş proje varlık listesini döndürür. Yerel zinciri kapatmak yerel varlığı ve token'larını yeni faturalar için kullanılamaz yapar; ancak sonra devam edilebilsin diye token politikalarını, cüzdanları ve mağaza seçimlerini korur.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MERCHANT_API_TOKEN |
| Content-Type | zorunlu | application/json |
| Accept | önerilen | application/json |
Yol parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request PUT \
--url "https://api.example.com/v1/projects/YOUR_PROJECT_ID/payment-assets/YOUR_ASSET_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Content-Type: application/json' \
--data-raw '{
"enabled": true,
"finality_mode": "confirmations",
"required_confirmations": 2,
"monitoring_minutes": 60,
"late_monitoring_days": 30
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const body = `{
"enabled": true,
"finality_mode": "confirmations",
"required_confirmations": 2,
"monitoring_minutes": 60,
"late_monitoring_days": 30
}`;
const response = await fetch("https://api.example.com/v1/projects/YOUR_PROJECT_ID/payment-assets/YOUR_ASSET_ID", {
method: "PUT",
headers: {
"Authorization": `Bearer ${token}`,
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$body = <<<'JSON'
{
"enabled": true,
"finality_mode": "confirmations",
"required_confirmations": 2,
"monitoring_minutes": 60,
"late_monitoring_days": 30
}
JSON;
$ch = curl_init("https://api.example.com/v1/projects/YOUR_PROJECT_ID/payment-assets/YOUR_ASSET_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"enabled": true,
"finality_mode": "confirmations",
"required_confirmations": 2,
"monitoring_minutes": 60,
"late_monitoring_days": 30
}""".encode("utf-8")
request = Request("https://api.example.com/v1/projects/YOUR_PROJECT_ID/payment-assets/YOUR_ASSET_ID",
method="PUT", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
enabledbooleanzorunluVarlığı proje için etkinleştirir veya devre dışı bırakır. Herhangi bir token'dan önce yerel zincir etkin olmalıdır.
finality_modeconfirmations | finalizedzorunluVarlık ödeme altyapısının desteklediği kesinlik politikası. finalized, required_confirmations=1 gerektirir.
required_confirmationsintegerzorunluBitcoin ve EVM altyapıları sıfır kabul eder; diğer onay altyapıları en az bir, yalnızca finalized altyapıları tam bir gerektirir. Her transferin işlem yeniden oynatma aralığında kalması için EVM altyapıları 0–48 ile sınırlıdır.Ayrıntılar
Bitcoin ve EVM altyapıları sıfır kabul eder; diğer onay altyapıları en az bir, yalnızca finalized altyapıları tam bir gerektirir. Her transferin işlem yeniden oynatma aralığında kalması için EVM altyapıları 0–48 ile sınırlıdır.
Yanıt 200 application/json
Örnek yanıt
{
"data": [
{ "asset": { "id": "ASSET_UUID", "symbol": "USDC", "asset_kind": "token", "scanner_ready": true }, "policy": { "enabled": true, "finality_mode": "confirmations", "required_confirmations": 2, "monitoring_minutes": 60, "late_monitoring_days": 30 }, "wallet_readiness": "ready" }
]
}Yanıt alanları
data[]object[]
assetobjecther zaman
Kalıcı yerel varlık veya doğrulanmış token varlığı.
asset_kindnative | tokenher zamanÖdeme tamamlanmasında zincir para biriminin mi, doğrulanmış sözleşme/mint'in mi kullanıldığı.
payment_railstringher zamanÇalışma zamanı ödeme altyapısı: utxo, evm-native, solana-native, account-native, privacy-native veya token-transfer.
contract_addressstring | nullher zamanToken'lar için kanonik ERC-20 sözleşmesi veya SPL mint'i; yerel varlıklarda null.
coingecko_idstring | nullher zamanKeşif/fiyatlandırma kimliği. Özel sözleşmelerde null; sembollerinden piyasa fiyatı çıkarma. CoinGecko meta verileri tek başına token'ı seçilebilir yapmaz.
custom_tokenbooleanher zamanProje kapsamlı sabit USD veya seçili DEX havuzu fiyatlandırması olan, zincir üstünde doğrulanmış özel sözleşme.
token_standarderc20 | spl-token | nullher zamanDoğrulanmış çalışma zamanı token standardı; yerel varlıklarda null.
metadata_verified_attimestamp | nullher zamanÖdeme varlığına dönüştürülen token'ların zincir üstü meta veri doğrulama zamanı.
payment_supportedbooleanher zamanDerleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.Ayrıntılar
Derleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.
scanner_readybooleanher zamanDerleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.Ayrıntılar
Derleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.
balance_readybooleanher zamanDerleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.Ayrıntılar
Derleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.
default_finality_modeconfirmations | finalizedher zamanYeni proje politikasının devraldığı varsayılan kesinlik modeli.
policyobject | nullher zaman
Proje etkinleştirme/kesinlik politikası; yapılandırılmadıysa null. custom_price_mode (fixed/dex), custom_price_usd (sabit ondalık sayı dizesi veya null), custom_dex_pair (seçilen havuz veya null) ve custom_dex (dex_id, quote_symbol, güncel price_usd veya null, liquidity_usd, fetched_at, last_error) içerir. Özel fiyatlandırma bu projedeki mağazalar tarafından paylaşılır.Ayrıntılar
Proje etkinleştirme/kesinlik politikası; yapılandırılmadıysa null. custom_price_mode (fixed/dex), custom_price_usd (sabit ondalık sayı dizesi veya null), custom_dex_pair (seçilen havuz veya null) ve custom_dex (dex_id, quote_symbol, güncel price_usd veya null, liquidity_usd, fetched_at, last_error) içerir. Özel fiyatlandırma bu projedeki mağazalar tarafından paylaşılır.
enabledbooleanzorunluVarlığı proje için etkinleştirir veya devre dışı bırakır. Herhangi bir token'dan önce yerel zincir etkin olmalıdır.
finality_modeconfirmations | finalizedzorunluVarlık ödeme altyapısının desteklediği kesinlik politikası. finalized, required_confirmations=1 gerektirir.
required_confirmationsintegerzorunluBitcoin ve EVM altyapıları sıfır kabul eder; diğer onay altyapıları en az bir, yalnızca finalized altyapıları tam bir gerektirir. Her transferin işlem yeniden oynatma aralığında kalması için EVM altyapıları 0–48 ile sınırlıdır.Ayrıntılar
Bitcoin ve EVM altyapıları sıfır kabul eder; diğer onay altyapıları en az bir, yalnızca finalized altyapıları tam bir gerektirir. Her transferin işlem yeniden oynatma aralığında kalması için EVM altyapıları 0–48 ile sınırlıdır.
walletobject | nullher zaman
Zincirin saklama hizmeti olmayan proje cüzdanı. Token'lar zincirlerinin yerel cüzdanını paylaşır.
public_keystring | nullher zamanHerkese açık cüzdan kimliği; kurtarma ifadesi veya özel anahtar açığa çıkarılmaz.
primary_addressstring | nullher zamanHerkese açık cüzdan kimliği; kurtarma ifadesi veya özel anahtar açığa çıkarılmaz.
backup_confirmed_attimestamp | nullher zamanOperatör kurtarma yedeğini onayladıktan sonra null değildir.
activation_requiredbooleanher zamanXRP ve Stellar ortak hesapları, operatör gösterilen adrese fon gönderene ve yapılandırılmış tarayıcı sağlayıcıları tam olarak o hesabı doğrulayana kadar kullanılamaz. Kalıcı kanıtın süresi dolmaz; canlı tarayıcı sağlığı fatura oluşturma için değil, ödeme doğrulaması için ayrı kontrol edilir.Ayrıntılar
XRP ve Stellar ortak hesapları, operatör gösterilen adrese fon gönderene ve yapılandırılmış tarayıcı sağlayıcıları tam olarak o hesabı doğrulayana kadar kullanılamaz. Kalıcı kanıtın süresi dolmaz; canlı tarayıcı sağlığı fatura oluşturma için değil, ödeme doğrulaması için ayrı kontrol edilir.
activation_verified_attimestamp|nullher zamanXRP ve Stellar ortak hesapları, operatör gösterilen adrese fon gönderene ve yapılandırılmış tarayıcı sağlayıcıları tam olarak o hesabı doğrulayana kadar kullanılamaz. Kalıcı kanıtın süresi dolmaz; canlı tarayıcı sağlığı fatura oluşturma için değil, ödeme doğrulaması için ayrı kontrol edilir.Ayrıntılar
XRP ve Stellar ortak hesapları, operatör gösterilen adrese fon gönderene ve yapılandırılmış tarayıcı sağlayıcıları tam olarak o hesabı doğrulayana kadar kullanılamaz. Kalıcı kanıtın süresi dolmaz; canlı tarayıcı sağlığı fatura oluşturma için değil, ödeme doğrulaması için ayrı kontrol edilir.
receive_readinessobject | null5.5.0+
Cüzdan listelerine dahildir: proje ödeme alma kurulumu ve zincir tarayıcısı ön koşulları. Bakiyelerden, token gas'ından ve gönderime hazır olma durumundan ayrıdır. Diğer cüzdan yanıtlarında null kalabilir.Ayrıntılar
Cüzdan listelerine dahildir: proje ödeme alma kurulumu ve zincir tarayıcısı ön koşulları. Bakiyelerden, token gas'ından ve gönderime hazır olma durumundan ayrıdır. Diğer cüzdan yanıtlarında null kalabilir.
readybooleanher zamanÖdeme alma kurulum kontrolleri geçti. Harcamaya hazır olmayı, gas'ı, bakiye yenilemeyi veya garantili gelecek teklifi açıklamaz.
invoice_creatableboolean6.0.6+Yapılandırma geçici tarayıcı uyarılarına rağmen fatura yöntemine izin verir. Para birimi fiyatlandırması oluşturma sırasında kontrol edilir. Bu ödeme doğrulaması değildir: invoice_creatable true iken ready false olabilir. Eksik cüzdanlar, devre dışı politika ve desteklenmeyen adaptörler yine güvenli biçimde başarısız olur.Ayrıntılar
Yapılandırma geçici tarayıcı uyarılarına rağmen fatura yöntemine izin verir. Para birimi fiyatlandırması oluşturma sırasında kontrol edilir. Bu ödeme doğrulaması değildir: invoice_creatable true iken ready false olabilir. Eksik cüzdanlar, devre dışı politika ve desteklenmeyen adaptörler yine güvenli biçimde başarısız olur.
issues[]object[]her zaman
Hazırsa boş; aksi halde ödeme alma uyarısı veya yapılandırma engeli. Geçici tarayıcı uyarılarını fatura kurulum hatalarından ayırmak için invoice_creatable kontrol et.Ayrıntılar
Hazırsa boş; aksi halde ödeme alma uyarısı veya yapılandırma engeli. Geçici tarayıcı uyarılarını fatura kurulum hatalarından ayırmak için invoice_creatable kontrol et.
chain_slugstringbiliniyorsaEtkilenen zinciri ve varlığı tanımlar. Lightning asset_id içermeyebilir.
asset_tickerstringbiliniyorsaEtkilenen zinciri ve varlığı tanımlar. Lightning asset_id içermeyebilir.
reason_codestringher zamanscanner_provider_quorum, scanner_not_checked, scanner_unavailable, wallet_missing, wallet_disabled, wallet_backup_required, wallet_key_unavailable, wallet_activation_required, monero_binding_unavailable, rate_unavailable, custom_rate_unavailable, lightning_unavailable, project_disabled, store_disabled, chain_disabled, asset_disabled veya asset_not_accepted.Ayrıntılar
scanner_provider_quorum, scanner_not_checked, scanner_unavailable, wallet_missing, wallet_disabled, wallet_backup_required, wallet_key_unavailable, wallet_activation_required, monero_binding_unavailable, rate_unavailable, custom_rate_unavailable, lightning_unavailable, project_disabled, store_disabled, chain_disabled, asset_disabled veya asset_not_accepted.
messagestringvarsaSatıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.Ayrıntılar
Satıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.
actionstringvarsaSatıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.Ayrıntılar
Satıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.
required_endpoint_rolestring | nullzincir üstüTercih edilen tarayıcı API rolü (eski alan). Tam uyumluluk listesi için accepted_endpoint_roles kullan. Temel düğüm sağlığı ödeme geçmişi desteğini kanıtlamaz.Ayrıntılar
Tercih edilen tarayıcı API rolü (eski alan). Tam uyumluluk listesi için accepted_endpoint_roles kullan. Temel düğüm sağlığı ödeme geçmişi desteğini kanıtlamaz.
accepted_endpoint_roles[]string[] | nullzincir üstüUyumlu API biçimleri; uç nokta geçmişi veya kapasitesi kanıtı değildir. Ham node-rpc, BTC/BCH/LTC/DOGE/DASH ve şeffaf ZEC (tam çözümlenmiş bloklar, 1–48 onay), solidified yerel TRX, algod üzerinden yerel ALGO, Octez üzerinden XTZ, SCALE meta verileriyle kesinleşmiş Asset Hub DOT ve fatura memo ID'siyle Stellar RPC üzerinden yerel XLM destekler. Budanmış veya eksik geçmiş uygun değildir. Bu ham adaptörler token altyapısı eklemez. İndeksli API'ler alternatif olmaya devam eder; aşağıdaki altyapı tablosuna bak. Karma ham/indeksli kaynaklar sınırlı aralıkları bağımsız doğrular; varsayılan, tek operatörün takma adları değil, iki bağımsız sağlayıcıdır. Temel düğüm yüksekliği, ORDnet zincir bilgisi ve EVM dışı altyapı için EVM rölesi ödeme alma kanıtı değildir. Monero yine projeye bağlı, yalnızca görüntüleme yetkili wallet-RPC gerektirir.Ayrıntılar
Uyumlu API biçimleri; uç nokta geçmişi veya kapasitesi kanıtı değildir. Ham node-rpc, BTC/BCH/LTC/DOGE/DASH ve şeffaf ZEC (tam çözümlenmiş bloklar, 1–48 onay), solidified yerel TRX, algod üzerinden yerel ALGO, Octez üzerinden XTZ, SCALE meta verileriyle kesinleşmiş Asset Hub DOT ve fatura memo ID'siyle Stellar RPC üzerinden yerel XLM destekler. Budanmış veya eksik geçmiş uygun değildir. Bu ham adaptörler token altyapısı eklemez. İndeksli API'ler alternatif olmaya devam eder; aşağıdaki altyapı tablosuna bak. Karma ham/indeksli kaynaklar sınırlı aralıkları bağımsız doğrular; varsayılan, tek operatörün takma adları değil, iki bağımsız sağlayıcıdır. Temel düğüm yüksekliği, ORDnet zincir bilgisi ve EVM dışı altyapı için EVM rölesi ödeme alma kanıtı değildir. Monero yine projeye bağlı, yalnızca görüntüleme yetkili wallet-RPC gerektirir.
healthy_endpointsintegerzincir üstüSağlıklı eşleşen uç noktalar; bağımsız sağlayıcı sayısı değildir.
usable_independent_providersintegerzincir üstüEn fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.Ayrıntılar
En fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.
required_independent_providersintegerzincir üstüEn fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.Ayrıntılar
En fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.
last_checked_attimestamp | nullzincir üstüDeğerlendirme zamanından ayrı, son eşleşen uç nokta sağlık kontrolü.
monero_wallet_rpcMoneroWalletRpcBinding | nullher zamanMonero için hassas bilgileri ayıklanmış harici, yalnızca görüntüleme yetkili wallet-RPC bağlantı durumu. Uç nokta, kimlik doğrulama modu, account-0 birincil adresi, teknik kanıt işaretleri/yükseklikleri ve operatör beyanı zaman damgaları içerir; kimlik bilgileri, cüzdan anahtarları ve cüzdan dosyaları asla serileştirilmez.Ayrıntılar
Monero için hassas bilgileri ayıklanmış harici, yalnızca görüntüleme yetkili wallet-RPC bağlantı durumu. Uç nokta, kimlik doğrulama modu, account-0 birincil adresi, teknik kanıt işaretleri/yükseklikleri ve operatör beyanı zaman damgaları içerir; kimlik bilgileri, cüzdan anahtarları ve cüzdan dosyaları asla serileştirilmez.
balances[]object[]her zaman
30 yerel zincir altyapısının her biri ve doğrulanmış ERC-20 ile SPL varlıkları için önbellekteki bakiyeler. Monero için yapılandırılmış harici, yalnızca görüntüleme yetkili wallet-RPC gerekir.Ayrıntılar
30 yerel zincir altyapısının her biri ve doğrulanmış ERC-20 ile SPL varlıkları için önbellekteki bakiyeler. Monero için yapılandırılmış harici, yalnızca görüntüleme yetkili wallet-RPC gerekir.
project_enabledbooleanher zamanBu varlığın şu anda projenin varlık politikasıyla etkin olup olmadığı.
active_store_countintegerher zamanŞu anda bu varlığı seçen etkin mağaza sayısı. Bu, kabul durumunun görünümüdür; salt okunur bakiye takibi bağımsız kalır.
active_store_ids[]UUID[]her zamanBu projede varlığı şu anda kabul eden etkin mağazalar. Başka API isteği olmadan tam yerel mağaza filtrelemesi sağlar.
tracking_activebooleanher zamanBu okunabilir cüzdan ve kayıtlı aynı zincir varlığının arka plan bakiye yenilemesine uygun olup olmadığı. Proje ve ödeme yöntemi kabul anahtarları salt okunur takibi duraklatmaz.Ayrıntılar
Bu okunabilir cüzdan ve kayıtlı aynı zincir varlığının arka plan bakiye yenilemesine uygun olup olmadığı. Proje ve ödeme yöntemi kabul anahtarları salt okunur takibi duraklatmaz.
balancedecimal string|nullher zamanCüzdanın birincil adresi ve oluşturulmuş fatura adresleri genelindeki tam gösterim ve atomik bakiye. Tam değer bulunamıyorsa null.
balance_atomicinteger string|nullher zamanCüzdanın birincil adresi ve oluşturulmuş fatura adresleri genelindeki tam gösterim ve atomik bakiye. Tam değer bulunamıyorsa null.
price_usddecimal string | nullher zamanDeğerleme için kullanılan bilgi amaçlı önbellek USD birim fiyatı.
statuspending | refreshing | fresh | stale | errorher zamanÖnbellek tarama durumu. refreshing tamamlanmış bakiyeyi koruyabilir: yaşı için checked_at kullan. Pending tamamlanmış görüntü yok demektir. Bu durumların hiçbiri transferin beklediğini veya faturanın tamamlandığını kanıtlamaz.Ayrıntılar
Önbellek tarama durumu. refreshing tamamlanmış bakiyeyi koruyabilir: yaşı için checked_at kullan. Pending tamamlanmış görüntü yok demektir. Bu durumların hiçbiri transferin beklediğini veya faturanın tamamlandığını kanıtlamaz.
total_value_usddecimal string | nullher zamanGüncel USD fiyatı bulunan bakiyelerin bilgi amaçlı toplamı.
balance_statuspending | refreshing | fresh | stale | error | unknownher zamanBirleştirilmiş önbellek güncelliği; unknown temkinli yedek değerdir ve bu durumların hiçbiri fatura ödemesinin tamamlandığını kanıtlamaz.
balance_checked_attimestamp | nullher zamanToplamın temsil ettiği en eski ilgili başarılı bakiye kontrolü.
recent_payments[]object[]her zaman
Tam olarak bu cüzdana atfedilen, en yeni en fazla üç geçerli detected, confirming veya final gözlem.
statusdetected | confirming | finalher zamanGüncel geçerli gözlem durumu. Reorged, replaced ve invalid gözlemler hariç tutulur.
wallet_readinessreadiness enumher zamanunsupported, project_disabled, project_asset_disabled, store_disabled, store_asset_disabled, wallet_missing, wallet_pending, wallet_disabled, wallet_error, backup_required, account_activation_required, external_wallet_rpc_required veya ready.Ayrıntılar
unsupported, project_disabled, project_asset_disabled, store_disabled, store_asset_disabled, wallet_missing, wallet_pending, wallet_disabled, wallet_error, backup_required, account_activation_required, external_wallet_rpc_required veya ready.
receive_readinessobject | null5.5.0+
Ortak proje ödeme alma kurulumu değerlendirmesi. Bakiye güncelliğinden ve gönderim gas'ından ayrı cüzdan ve bağımsız tarayıcı sağlayıcısı kontrollerini içerir. Proje politikası yoksa null. Fatura para birimi/kurları fatura oluştururken kontrol edilir.Ayrıntılar
Ortak proje ödeme alma kurulumu değerlendirmesi. Bakiye güncelliğinden ve gönderim gas'ından ayrı cüzdan ve bağımsız tarayıcı sağlayıcısı kontrollerini içerir. Proje politikası yoksa null. Fatura para birimi/kurları fatura oluştururken kontrol edilir.
readybooleanher zamanÖdeme alma kurulum kontrolleri geçti. Harcamaya hazır olmayı, gas'ı, bakiye yenilemeyi veya garantili gelecek teklifi açıklamaz.
invoice_creatableboolean6.0.6+Yapılandırma geçici tarayıcı uyarılarına rağmen fatura yöntemine izin verir. Para birimi fiyatlandırması oluşturma sırasında kontrol edilir. Bu ödeme doğrulaması değildir: invoice_creatable true iken ready false olabilir. Eksik cüzdanlar, devre dışı politika ve desteklenmeyen adaptörler yine güvenli biçimde başarısız olur.Ayrıntılar
Yapılandırma geçici tarayıcı uyarılarına rağmen fatura yöntemine izin verir. Para birimi fiyatlandırması oluşturma sırasında kontrol edilir. Bu ödeme doğrulaması değildir: invoice_creatable true iken ready false olabilir. Eksik cüzdanlar, devre dışı politika ve desteklenmeyen adaptörler yine güvenli biçimde başarısız olur.
issues[]object[]her zaman
Hazırsa boş; aksi halde ödeme alma uyarısı veya yapılandırma engeli. Geçici tarayıcı uyarılarını fatura kurulum hatalarından ayırmak için invoice_creatable kontrol et.Ayrıntılar
Hazırsa boş; aksi halde ödeme alma uyarısı veya yapılandırma engeli. Geçici tarayıcı uyarılarını fatura kurulum hatalarından ayırmak için invoice_creatable kontrol et.
chain_slugstringbiliniyorsaEtkilenen zinciri ve varlığı tanımlar. Lightning asset_id içermeyebilir.
asset_tickerstringbiliniyorsaEtkilenen zinciri ve varlığı tanımlar. Lightning asset_id içermeyebilir.
reason_codestringher zamanscanner_provider_quorum, scanner_not_checked, scanner_unavailable, wallet_missing, wallet_disabled, wallet_backup_required, wallet_key_unavailable, wallet_activation_required, monero_binding_unavailable, rate_unavailable, custom_rate_unavailable, lightning_unavailable, project_disabled, store_disabled, chain_disabled, asset_disabled veya asset_not_accepted.Ayrıntılar
scanner_provider_quorum, scanner_not_checked, scanner_unavailable, wallet_missing, wallet_disabled, wallet_backup_required, wallet_key_unavailable, wallet_activation_required, monero_binding_unavailable, rate_unavailable, custom_rate_unavailable, lightning_unavailable, project_disabled, store_disabled, chain_disabled, asset_disabled veya asset_not_accepted.
messagestringvarsaSatıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.Ayrıntılar
Satıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.
actionstringvarsaSatıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.Ayrıntılar
Satıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.
required_endpoint_rolestring | nullzincir üstüTercih edilen tarayıcı API rolü (eski alan). Tam uyumluluk listesi için accepted_endpoint_roles kullan. Temel düğüm sağlığı ödeme geçmişi desteğini kanıtlamaz.Ayrıntılar
Tercih edilen tarayıcı API rolü (eski alan). Tam uyumluluk listesi için accepted_endpoint_roles kullan. Temel düğüm sağlığı ödeme geçmişi desteğini kanıtlamaz.
accepted_endpoint_roles[]string[] | nullzincir üstüUyumlu API biçimleri; uç nokta geçmişi veya kapasitesi kanıtı değildir. Ham node-rpc, BTC/BCH/LTC/DOGE/DASH ve şeffaf ZEC (tam çözümlenmiş bloklar, 1–48 onay), solidified yerel TRX, algod üzerinden yerel ALGO, Octez üzerinden XTZ, SCALE meta verileriyle kesinleşmiş Asset Hub DOT ve fatura memo ID'siyle Stellar RPC üzerinden yerel XLM destekler. Budanmış veya eksik geçmiş uygun değildir. Bu ham adaptörler token altyapısı eklemez. İndeksli API'ler alternatif olmaya devam eder; aşağıdaki altyapı tablosuna bak. Karma ham/indeksli kaynaklar sınırlı aralıkları bağımsız doğrular; varsayılan, tek operatörün takma adları değil, iki bağımsız sağlayıcıdır. Temel düğüm yüksekliği, ORDnet zincir bilgisi ve EVM dışı altyapı için EVM rölesi ödeme alma kanıtı değildir. Monero yine projeye bağlı, yalnızca görüntüleme yetkili wallet-RPC gerektirir.Ayrıntılar
Uyumlu API biçimleri; uç nokta geçmişi veya kapasitesi kanıtı değildir. Ham node-rpc, BTC/BCH/LTC/DOGE/DASH ve şeffaf ZEC (tam çözümlenmiş bloklar, 1–48 onay), solidified yerel TRX, algod üzerinden yerel ALGO, Octez üzerinden XTZ, SCALE meta verileriyle kesinleşmiş Asset Hub DOT ve fatura memo ID'siyle Stellar RPC üzerinden yerel XLM destekler. Budanmış veya eksik geçmiş uygun değildir. Bu ham adaptörler token altyapısı eklemez. İndeksli API'ler alternatif olmaya devam eder; aşağıdaki altyapı tablosuna bak. Karma ham/indeksli kaynaklar sınırlı aralıkları bağımsız doğrular; varsayılan, tek operatörün takma adları değil, iki bağımsız sağlayıcıdır. Temel düğüm yüksekliği, ORDnet zincir bilgisi ve EVM dışı altyapı için EVM rölesi ödeme alma kanıtı değildir. Monero yine projeye bağlı, yalnızca görüntüleme yetkili wallet-RPC gerektirir.
healthy_endpointsintegerzincir üstüSağlıklı eşleşen uç noktalar; bağımsız sağlayıcı sayısı değildir.
usable_independent_providersintegerzincir üstüEn fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.Ayrıntılar
En fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.
required_independent_providersintegerzincir üstüEn fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.Ayrıntılar
En fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.
last_checked_attimestamp | nullzincir üstüDeğerlendirme zamanından ayrı, son eşleşen uç nokta sağlık kontrolü.
Kullanım notları
- Gövde politikanın tamamını değiştirir ve bilinmeyen alanları reddeder.
- Projede etkinleştirmek tek başına varlığı herhangi bir mağaza için seçmez.
Hatalar
GETÖdeme token'ı adaylarına göz at/v1/projects/{project_id}/payment-token-candidatesSalt okunur
Yalnızca token fatura tarayıcısı ve bakiye adaptörü uygulanmış zincirlerde yerel önbellekteki CoinGecko sözleşme eşlemelerini arar. Sonuçlar güvenilir ödeme varlıkları değil, keşif adaylarıdır.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MERCHANT_API_TOKEN |
| Accept | önerilen | application/json |
Yol parametreleri
Sorgu parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/projects/YOUR_PROJECT_ID/payment-token-candidates?chain_slug=ethereum&q=USDC&limit=50" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/projects/YOUR_PROJECT_ID/payment-token-candidates?chain_slug=ethereum&q=USDC&limit=50", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/projects/YOUR_PROJECT_ID/payment-token-candidates?chain_slug=ethereum&q=USDC&limit=50");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/projects/YOUR_PROJECT_ID/payment-token-candidates?chain_slug=ethereum&q=USDC&limit=50",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [
{
"coingecko_id": "usd-coin",
"chain_slug": "ethereum",
"symbol": "USDC",
"name": "USDC",
"contract_address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"market_cap_rank": 7,
"icon_path": "/assets/coingecko/usd-coin.png",
"current_price_usd": "1.0001",
"token_standard": "erc20",
"scanner_ready": true,
"registered_asset_id": null,
"project_enabled": false
}
]
}Yanıt alanları
data[]object[]
contract_addressstringher zamanEşleşen sözleşme veya mint; kayıttan önce zincir üstünde doğrulanır.
market_cap_rankinteger | nullher zamanKeşif sırası; güven veya ödemeye hazır olma sinyali değildir.
scanner_readybooleanher zamanYalnızca bu derlemede uygulanmış token altyapısındaki adaylar için true.
registered_asset_idUUID | nullher zamanDaha önce ödeme varlığına dönüştürüldüyse mevcut kalıcı varlık.
Kullanım notları
- Desteklenen token adaptörleri: Ethereum, Base, BNB Chain, HyperEVM, Avalanche, Polygon, Arbitrum ve Optimism üzerinde ERC-20; Solana üzerinde SPL.
- Desteklenmeyen katalog zincirleri seçilebilir görünmek yerine reddedilir.
- CoinGecko sırası, simgesi ve fiyatı bilgi amaçlı keşif verisidir.
Hatalar
POSTToken doğrula ve kaydet/v1/projects/{project_id}/payment-token-assetsOkuma ve yazma
Yalnızca yapılandırılmış düğümler zincir kimliğini, sözleşme/mint kimliğini, ondalık basamakları ve kullanılabilir bakiye sorgusunu doğruladıktan sonra mevcut adayı kalıcı ödeme kaydına alır. Kayıt, CoinGecko meta verilerine tek başına asla güvenmez ve her projede en fazla 20 kayıtlı token varlığı olabilir.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MERCHANT_API_TOKEN |
| Content-Type | zorunlu | application/json |
| Accept | önerilen | application/json |
Yol parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/projects/YOUR_PROJECT_ID/payment-token-assets" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Content-Type: application/json' \
--data-raw '{
"chain_slug": "ethereum",
"coingecko_id": "usd-coin",
"enabled": true
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const body = `{
"chain_slug": "ethereum",
"coingecko_id": "usd-coin",
"enabled": true
}`;
const response = await fetch("https://api.example.com/v1/projects/YOUR_PROJECT_ID/payment-token-assets", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$body = <<<'JSON'
{
"chain_slug": "ethereum",
"coingecko_id": "usd-coin",
"enabled": true
}
JSON;
$ch = curl_init("https://api.example.com/v1/projects/YOUR_PROJECT_ID/payment-token-assets");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"chain_slug": "ethereum",
"coingecko_id": "usd-coin",
"enabled": true
}""".encode("utf-8")
request = Request("https://api.example.com/v1/projects/YOUR_PROJECT_ID/payment-token-assets",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
chain_slugstringzorunluethereum, base, bnb-chain, hyperliquid, avalanche, polygon, arbitrum, optimism veya solana.
coingecko_idstringzorunluToken aramasının döndürdüğü tam aday kimliği. _ veya -6 gibi baştaki alt çizgi veya tireleri koru. Bu kimliği token adından veya sembolünden türetme.Ayrıntılar
Token aramasının döndürdüğü tam aday kimliği. _ veya -6 gibi baştaki alt çizgi veya tireleri koru. Bu kimliği token adından veya sembolünden türetme.
Yanıt 201 application/json
Örnek yanıt
{
"data": {
"asset_id": "44444444-4444-4444-8444-444444444444",
"chain_slug": "ethereum",
"coingecko_id": "usd-coin",
"contract_address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"token_standard": "erc20",
"symbol": "USDC",
"name": "USDC",
"decimals": 6,
"enabled": true,
"metadata_verified_at": "2026-08-31T18:00:00Z"
}
}Yanıt alanları
dataobject
Kullanım notları
- Token'larını kaydetmeden önce zincirin yerel proje varlığını etkinleştir.
- Proje en fazla 20 token varlığı kaydedebilir; bu sınırın üzerindeki yeni aday token_chain_not_ready (409) döndürür. Zaten kayıtlı varlığı kullanmak başka yuva tüketmez.
- Düğüm doğrulaması katalog okumasından uzun sürebilir; açık istemci zaman aşımı kullan.
- Kayıttan sonra varlığı sunması gereken her mağaza için seç.
Hatalar
GETÖzel token DEX havuzlarını bul/v1/projects/{project_id}/payment-token-dex-poolsSalt okunur
DEX Screener üzerinden tam zincir ve temel token sözleşmesine göre likidite sıralı en fazla 12 uygun havuz bul. Bu işlem token kaydetmez veya etkinleştirmez.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MERCHANT_API_TOKEN |
Yol parametreleri
Sorgu parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/projects/YOUR_PROJECT_ID/payment-token-dex-pools?chain_slug=ethereum&contract_address=YOUR_TOKEN_CONTRACT" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/projects/YOUR_PROJECT_ID/payment-token-dex-pools?chain_slug=ethereum&contract_address=YOUR_TOKEN_CONTRACT", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/projects/YOUR_PROJECT_ID/payment-token-dex-pools?chain_slug=ethereum&contract_address=YOUR_TOKEN_CONTRACT");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/projects/YOUR_PROJECT_ID/payment-token-dex-pools?chain_slug=ethereum&contract_address=YOUR_TOKEN_CONTRACT",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{"data":[{"pair_address":"0x2222222222222222222222222222222222222222","dex_id":"uniswap","quote_symbol":"WETH","price_usd":"0.25","liquidity_usd":"250000.00","fetched_at":"2026-09-09T12:00:00Z","url":"https://dexscreener.com/ethereum/0x2222222222222222222222222222222222222222"}]}Yanıt alanları
data[]object[]
pair_addressstringher zamanTam havuz tanımlayıcısı, borsa kimliği (ör. uniswap/pancakeswap) ve yalnızca görüntüleme için eş token sembolü.
dex_idstringher zamanTam havuz tanımlayıcısı, borsa kimliği (ör. uniswap/pancakeswap) ve yalnızca görüntüleme için eş token sembolü.
quote_symbolstringher zamanTam havuz tanımlayıcısı, borsa kimliği (ör. uniswap/pancakeswap) ve yalnızca görüntüleme için eş token sembolü.
price_usddecimal stringher zamanİstenen temel token'ın USD fiyatı ve toplam havuz likiditesi. En az 10.000 $ likidite ve son bir saat içinde işlem gereklidir.
liquidity_usddecimal stringher zamanİstenen temel token'ın USD fiyatı ve toplam havuz likiditesi. En az 10.000 $ likidite ve son bir saat içinde işlem gereklidir.
fetched_atRFC 3339 timestampher zamanZincir üstü işlem zaman damgası değil, sunucunun sağlayıcı gözlemini aldığı zaman.
Kullanım notları
- Boş data dizisi uygun havuz bulunmadığını gösterir. Yalnızca istenen tam sözleşmenin temel token olduğu havuzlar döndürülür; karşı varlığın USD fiyatı asla varsayılmaz.
- DEX'te listelenmek güvenlik denetimi değildir. Asgari likidite ve yakın tarihli etkinlik kullanılamayan teklifleri azaltır, ancak piyasa manipülasyonunu önlemez.
- Mevcut zincir tarayıcısının token desteklediği yerlerde Uniswap, PancakeSwap ve diğer indekslenmiş DEX'ler desteklenir. API erişimi proje kapsamlı ve istek sınırlı kalır. Sağlayıcı çağrıları da sıraya alınır ve hızla sınırlandırılır.
Hatalar
POSTÖzel token ekle veya yeniden fiyatlandır/v1/projects/{project_id}/payment-token-assets/customOkuma ve yazma
Özel sözleşmeyi yapılandırılmış zincir düğümleriyle doğrular ve CoinGecko listesi gerektirmeden kaydeder. Sabit USD fiyatı veya seçilen otomatik DEX havuzu sembole ya da başka projelere değil, bu projeye aittir. Aynı kimliği tekrarlamak mevcut etkin/devre dışı politikayı değiştirmeden proje fiyatını günceller.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MERCHANT_API_TOKEN |
| Content-Type | zorunlu | application/json |
Yol parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/projects/YOUR_PROJECT_ID/payment-token-assets/custom" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Content-Type: application/json' \
--data-raw '{
"chain_slug": "ethereum",
"contract_address": "YOUR_VERIFIED_TOKEN_CONTRACT",
"name": "Example token",
"symbol": "EXAMPLE",
"price_usd": "0.25"
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const body = `{
"chain_slug": "ethereum",
"contract_address": "YOUR_VERIFIED_TOKEN_CONTRACT",
"name": "Example token",
"symbol": "EXAMPLE",
"price_usd": "0.25"
}`;
const response = await fetch("https://api.example.com/v1/projects/YOUR_PROJECT_ID/payment-token-assets/custom", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$body = <<<'JSON'
{
"chain_slug": "ethereum",
"contract_address": "YOUR_VERIFIED_TOKEN_CONTRACT",
"name": "Example token",
"symbol": "EXAMPLE",
"price_usd": "0.25"
}
JSON;
$ch = curl_init("https://api.example.com/v1/projects/YOUR_PROJECT_ID/payment-token-assets/custom");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"chain_slug": "ethereum",
"contract_address": "YOUR_VERIFIED_TOKEN_CONTRACT",
"name": "Example token",
"symbol": "EXAMPLE",
"price_usd": "0.25"
}""".encode("utf-8")
request = Request("https://api.example.com/v1/projects/YOUR_PROJECT_ID/payment-token-assets/custom",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
chain_slugstringzorunluethereum, base, bnb-chain, hyperliquid, avalanche, polygon, arbitrum, optimism veya solana. Bu sözleşme için sabittir.
contract_addressstringzorunluERC-20 sözleşmesi (0x ve 40 onaltılık karakter) veya klasik SPL mint'i. Düğümler ağ kimliğini ve tam ondalık basamak sayısını doğrular; çağıranın verdiği ondalık basamak ve RPC URL'leri reddedilir.Ayrıntılar
ERC-20 sözleşmesi (0x ve 40 onaltılık karakter) veya klasik SPL mint'i. Düğümler ağ kimliğini ve tam ondalık basamak sayısını doğrular; çağıranın verdiği ondalık basamak ve RPC URL'leri reddedilir.
namestringzorunluGörünen ad (1–80 karakter) ve sembol (1–16 harf/rakam/nokta/alt çizgi/tire; ilk karakter harf veya rakam). Bu uç nokta mevcut kimlikleri yeniden adlandıramaz.Ayrıntılar
Görünen ad (1–80 karakter) ve sembol (1–16 harf/rakam/nokta/alt çizgi/tire; ilk karakter harf veya rakam). Bu uç nokta mevcut kimlikleri yeniden adlandıramaz.
symbolstringzorunluGörünen ad (1–80 karakter) ve sembol (1–16 harf/rakam/nokta/alt çizgi/tire; ilk karakter harf veya rakam). Bu uç nokta mevcut kimlikleri yeniden adlandıramaz.Ayrıntılar
Görünen ad (1–80 karakter) ve sembol (1–16 harf/rakam/nokta/alt çizgi/tire; ilk karakter harf veya rakam). Bu uç nokta mevcut kimlikleri yeniden adlandıramaz.
price_modefixed | dexisteğe bağlıGeriye uyumluluk için varsayılan fixed. DEX, tam zincir ve sözleşme için keşfedilmiş belirli havuzu kullanır.
price_usddecimal stringfixed moduBİR token'ın sabit USD değeri; pozitif, en fazla 30 ondalık basamak, üst sınır 1000000000000000000000000. Üs veya kayan nokta yok. dex modunda atla.
dex_pair_addressstringdex modupayment-token-dex-pools kaynağından havuz adresi. dex modunda zorunlu; fixed modunda atla. Sunucu her kayıtta havuz kimliğini, fiyatı, likiditeyi ve etkinliği yeniden kontrol eder.Ayrıntılar
payment-token-dex-pools kaynağından havuz adresi. dex modunda zorunlu; fixed modunda atla. Sunucu her kayıtta havuz kimliğini, fiyatı, likiditeyi ve etkinliği yeniden kontrol eder.
Yanıt 200 application/json
Örnek yanıt
{"data":{"asset_id":"44444444-4444-4444-8444-444444444444"}}Yanıt alanları
Kullanım notları
- Kayıttan sonra mağazanın payment-assets uç noktasında asset_id seç; kayıt tek başına mağaza yöntemini asla etkinleştirmez.
- Özel ve katalog token'ları projenin 20 token sınırını paylaşır. Aynı sözleşme farklı zincirlerde farklı ödeme varlığıdır.
- Mevcut katalog sözleşmeleri 409 döndürür: otomatik piyasa kurlarını korumak için katalog kaydı kullan. Özel sembol aynı adlı token'ın fiyatını asla almaz.
- Sabit fiyatlar operatör tahminidir. Otomatik DEX fiyatları, manipülasyona dayanıklı oracle değil, DEX Screener üzerinden seçilen havuzun spot gözlemleridir. Güncel itibari para kurlarıyla mağaza fiyat marjı ve yukarı yuvarlama yine uygulanır. Önceden düzenlenmiş teklifler değişmez.
- DEX modu için önce havuz keşfet, ardından price_usd atlayarak price_mode: dex ve dex_pair_address gönder. Ortak arka plan görevi seçilen havuzları her dakika yeniler. Başarısız kontroller veya beş dakikadan eski fiyatlar token'ı yeni tekliflerden çıkarır; sessizce sabit fiyat veya sembol bazlı yedek fiyata geçilmez.
- Yalnızca standart ERC-20 ve klasik SPL token'ları kabul edilir. Token-2022/uzantıları ve yalnızca yerel coin destekleyen zincirler reddedilir. Teknik doğrulama, ihraççı/sözleşme güvenlik denetimi değildir; transfer ücreti alan, rebasing yapan veya kara liste kullanan token'lar uyumsuz davranabilir.
- En az 60 saniyelik istemci zaman aşımı kullan. Doğrulama sınırlıdır ve yedek düğümleri deneyebilir. Geçersiz girdi 400; başarısız zincir/sözleşme kontrolleri 422; kimlik çakışmaları veya sınırlar 409 döndürür.
Hatalar
GETMağaza ödeme yöntemlerini listele/v1/projects/{project_id}/stores/{store_id}/payment-assetsSalt okunur
Zincir üstü varlıkları data içinde, ayrı Lightning hazırlığını lightning içinde listeler. Zincir üstü yöntemler hazır zincir cüzdanları gerektirir. Lightning, zincir üstü Bitcoin cüzdanından bağımsız olarak mağazada seçilen doğrulanmış harici ödeme alma bağlantısını kullanır.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MERCHANT_API_TOKEN |
| Accept | önerilen | application/json |
Yol parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/payment-assets" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/payment-assets", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/payment-assets");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/payment-assets",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [
{ "asset": { "id": "ASSET_UUID", "chain_slug": "ethereum", "symbol": "USDC", "asset_kind": "token", "token_standard": "erc20", "scanner_ready": true }, "project_policy": { "enabled": true, "required_confirmations": 12 }, "selected": true, "display_order": 0, "confirmation_policy": { "finality_mode": "confirmations", "project_required_confirmations": 12, "override_required_confirmations": 3, "effective_required_confirmations": 3, "editable": true, "minimum_required_confirmations": 0, "maximum_required_confirmations": 48 }, "wallet": { "id": "WALLET_UUID", "status": "active" }, "wallet_readiness": "ready" }
],
"lightning": { "payment_rail": "lightning", "symbol": "BTC", "asset_decimals": 11, "enabled": true, "ready": true }
}Yanıt alanları
data[]object[]
assetobjecther zaman
Projenin görebildiği yerel veya doğrulanmış token varlığı.
asset_kindnative | tokenher zamanÖdeme tamamlanmasında zincir para biriminin mi, doğrulanmış sözleşme/mint'in mi kullanıldığı.
payment_railstringher zamanÇalışma zamanı ödeme altyapısı: utxo, evm-native, solana-native, account-native, privacy-native veya token-transfer.
contract_addressstring | nullher zamanToken'lar için kanonik ERC-20 sözleşmesi veya SPL mint'i; yerel varlıklarda null.
coingecko_idstring | nullher zamanKeşif/fiyatlandırma kimliği. Özel sözleşmelerde null; sembollerinden piyasa fiyatı çıkarma. CoinGecko meta verileri tek başına token'ı seçilebilir yapmaz.
custom_tokenbooleanher zamanProje kapsamlı sabit USD veya seçili DEX havuzu fiyatlandırması olan, zincir üstünde doğrulanmış özel sözleşme.
token_standarderc20 | spl-token | nullher zamanDoğrulanmış çalışma zamanı token standardı; yerel varlıklarda null.
metadata_verified_attimestamp | nullher zamanÖdeme varlığına dönüştürülen token'ların zincir üstü meta veri doğrulama zamanı.
payment_supportedbooleanher zamanDerleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.Ayrıntılar
Derleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.
scanner_readybooleanher zamanDerleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.Ayrıntılar
Derleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.
balance_readybooleanher zamanDerleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.Ayrıntılar
Derleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.
default_finality_modeconfirmations | finalizedher zamanYeni proje politikasının devraldığı varsayılan kesinlik modeli.
project_policyobject | nullher zaman
Üst proje politikası.
enabledbooleanzorunluVarlığı proje için etkinleştirir veya devre dışı bırakır. Herhangi bir token'dan önce yerel zincir etkin olmalıdır.
finality_modeconfirmations | finalizedzorunluVarlık ödeme altyapısının desteklediği kesinlik politikası. finalized, required_confirmations=1 gerektirir.
required_confirmationsintegerzorunluBitcoin ve EVM altyapıları sıfır kabul eder; diğer onay altyapıları en az bir, yalnızca finalized altyapıları tam bir gerektirir. Her transferin işlem yeniden oynatma aralığında kalması için EVM altyapıları 0–48 ile sınırlıdır.Ayrıntılar
Bitcoin ve EVM altyapıları sıfır kabul eder; diğer onay altyapıları en az bir, yalnızca finalized altyapıları tam bir gerektirir. Her transferin işlem yeniden oynatma aralığında kalması için EVM altyapıları 0–48 ile sınırlıdır.
selectedbooleanher zamanBu yöntemin mağazanın kayıtlı istenen yapılandırmasına dahil olup olmadığı. Proje politikası, cüzdan, kurulu adaptör ve fiyatlandırma geçerliyse sunulur. Geçici tarayıcı kesintileri yöntemi yeni faturalardan çıkarmaz.Ayrıntılar
Bu yöntemin mağazanın kayıtlı istenen yapılandırmasına dahil olup olmadığı. Proje politikası, cüzdan, kurulu adaptör ve fiyatlandırma geçerliyse sunulur. Geçici tarayıcı kesintileri yöntemi yeni faturalardan çıkarmaz.
confirmation_policyobject | nullher zaman
Projede yapılandırılan varlık için geçerli mağaza politikası. Proje politikası yoksa null.
finality_modeconfirmations | finalizedher zamanÖdeme tamamlanmasının ayarlanabilir blok sayısına mı, ağ kesinliğine mi dayandığı.
project_required_confirmationsintegerher zamanMağazaya özel değer yoksa sonraki faturaların kullanacağı güncel proje varsayılanı.
override_required_confirmationsinteger | nullher zamanMağazaya özel sayı veya proje varsayılanını devralmak için null.
effective_required_confirmationsintegerher zamanBu mağaza ve varlık için yeni faturaların kaydedeceği sayı.
minimum_required_confirmationsintegerher zamanDahil, zincire uygun alt sınır; 0 yalnızca tespit anında kabulü destekleyen altyapılarda sunulur.
walletobject | nullher zaman
Yerel ve token varlıklarının paylaştığı zincir cüzdanı.
public_keystring | nullher zamanHerkese açık cüzdan kimliği; kurtarma ifadesi veya özel anahtar açığa çıkarılmaz.
primary_addressstring | nullher zamanHerkese açık cüzdan kimliği; kurtarma ifadesi veya özel anahtar açığa çıkarılmaz.
backup_confirmed_attimestamp | nullher zamanOperatör kurtarma yedeğini onayladıktan sonra null değildir.
activation_requiredbooleanher zamanXRP ve Stellar ortak hesapları, operatör gösterilen adrese fon gönderene ve yapılandırılmış tarayıcı sağlayıcıları tam olarak o hesabı doğrulayana kadar kullanılamaz. Kalıcı kanıtın süresi dolmaz; canlı tarayıcı sağlığı fatura oluşturma için değil, ödeme doğrulaması için ayrı kontrol edilir.Ayrıntılar
XRP ve Stellar ortak hesapları, operatör gösterilen adrese fon gönderene ve yapılandırılmış tarayıcı sağlayıcıları tam olarak o hesabı doğrulayana kadar kullanılamaz. Kalıcı kanıtın süresi dolmaz; canlı tarayıcı sağlığı fatura oluşturma için değil, ödeme doğrulaması için ayrı kontrol edilir.
activation_verified_attimestamp|nullher zamanXRP ve Stellar ortak hesapları, operatör gösterilen adrese fon gönderene ve yapılandırılmış tarayıcı sağlayıcıları tam olarak o hesabı doğrulayana kadar kullanılamaz. Kalıcı kanıtın süresi dolmaz; canlı tarayıcı sağlığı fatura oluşturma için değil, ödeme doğrulaması için ayrı kontrol edilir.Ayrıntılar
XRP ve Stellar ortak hesapları, operatör gösterilen adrese fon gönderene ve yapılandırılmış tarayıcı sağlayıcıları tam olarak o hesabı doğrulayana kadar kullanılamaz. Kalıcı kanıtın süresi dolmaz; canlı tarayıcı sağlığı fatura oluşturma için değil, ödeme doğrulaması için ayrı kontrol edilir.
receive_readinessobject | null5.5.0+
Cüzdan listelerine dahildir: proje ödeme alma kurulumu ve zincir tarayıcısı ön koşulları. Bakiyelerden, token gas'ından ve gönderime hazır olma durumundan ayrıdır. Diğer cüzdan yanıtlarında null kalabilir.Ayrıntılar
Cüzdan listelerine dahildir: proje ödeme alma kurulumu ve zincir tarayıcısı ön koşulları. Bakiyelerden, token gas'ından ve gönderime hazır olma durumundan ayrıdır. Diğer cüzdan yanıtlarında null kalabilir.
readybooleanher zamanÖdeme alma kurulum kontrolleri geçti. Harcamaya hazır olmayı, gas'ı, bakiye yenilemeyi veya garantili gelecek teklifi açıklamaz.
invoice_creatableboolean6.0.6+Yapılandırma geçici tarayıcı uyarılarına rağmen fatura yöntemine izin verir. Para birimi fiyatlandırması oluşturma sırasında kontrol edilir. Bu ödeme doğrulaması değildir: invoice_creatable true iken ready false olabilir. Eksik cüzdanlar, devre dışı politika ve desteklenmeyen adaptörler yine güvenli biçimde başarısız olur.Ayrıntılar
Yapılandırma geçici tarayıcı uyarılarına rağmen fatura yöntemine izin verir. Para birimi fiyatlandırması oluşturma sırasında kontrol edilir. Bu ödeme doğrulaması değildir: invoice_creatable true iken ready false olabilir. Eksik cüzdanlar, devre dışı politika ve desteklenmeyen adaptörler yine güvenli biçimde başarısız olur.
issues[]object[]her zaman
Hazırsa boş; aksi halde ödeme alma uyarısı veya yapılandırma engeli. Geçici tarayıcı uyarılarını fatura kurulum hatalarından ayırmak için invoice_creatable kontrol et.Ayrıntılar
Hazırsa boş; aksi halde ödeme alma uyarısı veya yapılandırma engeli. Geçici tarayıcı uyarılarını fatura kurulum hatalarından ayırmak için invoice_creatable kontrol et.
chain_slugstringbiliniyorsaEtkilenen zinciri ve varlığı tanımlar. Lightning asset_id içermeyebilir.
asset_tickerstringbiliniyorsaEtkilenen zinciri ve varlığı tanımlar. Lightning asset_id içermeyebilir.
reason_codestringher zamanscanner_provider_quorum, scanner_not_checked, scanner_unavailable, wallet_missing, wallet_disabled, wallet_backup_required, wallet_key_unavailable, wallet_activation_required, monero_binding_unavailable, rate_unavailable, custom_rate_unavailable, lightning_unavailable, project_disabled, store_disabled, chain_disabled, asset_disabled veya asset_not_accepted.Ayrıntılar
scanner_provider_quorum, scanner_not_checked, scanner_unavailable, wallet_missing, wallet_disabled, wallet_backup_required, wallet_key_unavailable, wallet_activation_required, monero_binding_unavailable, rate_unavailable, custom_rate_unavailable, lightning_unavailable, project_disabled, store_disabled, chain_disabled, asset_disabled veya asset_not_accepted.
messagestringvarsaSatıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.Ayrıntılar
Satıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.
actionstringvarsaSatıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.Ayrıntılar
Satıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.
required_endpoint_rolestring | nullzincir üstüTercih edilen tarayıcı API rolü (eski alan). Tam uyumluluk listesi için accepted_endpoint_roles kullan. Temel düğüm sağlığı ödeme geçmişi desteğini kanıtlamaz.Ayrıntılar
Tercih edilen tarayıcı API rolü (eski alan). Tam uyumluluk listesi için accepted_endpoint_roles kullan. Temel düğüm sağlığı ödeme geçmişi desteğini kanıtlamaz.
accepted_endpoint_roles[]string[] | nullzincir üstüUyumlu API biçimleri; uç nokta geçmişi veya kapasitesi kanıtı değildir. Ham node-rpc, BTC/BCH/LTC/DOGE/DASH ve şeffaf ZEC (tam çözümlenmiş bloklar, 1–48 onay), solidified yerel TRX, algod üzerinden yerel ALGO, Octez üzerinden XTZ, SCALE meta verileriyle kesinleşmiş Asset Hub DOT ve fatura memo ID'siyle Stellar RPC üzerinden yerel XLM destekler. Budanmış veya eksik geçmiş uygun değildir. Bu ham adaptörler token altyapısı eklemez. İndeksli API'ler alternatif olmaya devam eder; aşağıdaki altyapı tablosuna bak. Karma ham/indeksli kaynaklar sınırlı aralıkları bağımsız doğrular; varsayılan, tek operatörün takma adları değil, iki bağımsız sağlayıcıdır. Temel düğüm yüksekliği, ORDnet zincir bilgisi ve EVM dışı altyapı için EVM rölesi ödeme alma kanıtı değildir. Monero yine projeye bağlı, yalnızca görüntüleme yetkili wallet-RPC gerektirir.Ayrıntılar
Uyumlu API biçimleri; uç nokta geçmişi veya kapasitesi kanıtı değildir. Ham node-rpc, BTC/BCH/LTC/DOGE/DASH ve şeffaf ZEC (tam çözümlenmiş bloklar, 1–48 onay), solidified yerel TRX, algod üzerinden yerel ALGO, Octez üzerinden XTZ, SCALE meta verileriyle kesinleşmiş Asset Hub DOT ve fatura memo ID'siyle Stellar RPC üzerinden yerel XLM destekler. Budanmış veya eksik geçmiş uygun değildir. Bu ham adaptörler token altyapısı eklemez. İndeksli API'ler alternatif olmaya devam eder; aşağıdaki altyapı tablosuna bak. Karma ham/indeksli kaynaklar sınırlı aralıkları bağımsız doğrular; varsayılan, tek operatörün takma adları değil, iki bağımsız sağlayıcıdır. Temel düğüm yüksekliği, ORDnet zincir bilgisi ve EVM dışı altyapı için EVM rölesi ödeme alma kanıtı değildir. Monero yine projeye bağlı, yalnızca görüntüleme yetkili wallet-RPC gerektirir.
healthy_endpointsintegerzincir üstüSağlıklı eşleşen uç noktalar; bağımsız sağlayıcı sayısı değildir.
usable_independent_providersintegerzincir üstüEn fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.Ayrıntılar
En fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.
required_independent_providersintegerzincir üstüEn fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.Ayrıntılar
En fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.
last_checked_attimestamp | nullzincir üstüDeğerlendirme zamanından ayrı, son eşleşen uç nokta sağlık kontrolü.
monero_wallet_rpcMoneroWalletRpcBinding | nullher zamanMonero için hassas bilgileri ayıklanmış harici, yalnızca görüntüleme yetkili wallet-RPC bağlantı durumu. Uç nokta, kimlik doğrulama modu, account-0 birincil adresi, teknik kanıt işaretleri/yükseklikleri ve operatör beyanı zaman damgaları içerir; kimlik bilgileri, cüzdan anahtarları ve cüzdan dosyaları asla serileştirilmez.Ayrıntılar
Monero için hassas bilgileri ayıklanmış harici, yalnızca görüntüleme yetkili wallet-RPC bağlantı durumu. Uç nokta, kimlik doğrulama modu, account-0 birincil adresi, teknik kanıt işaretleri/yükseklikleri ve operatör beyanı zaman damgaları içerir; kimlik bilgileri, cüzdan anahtarları ve cüzdan dosyaları asla serileştirilmez.
balances[]object[]her zaman
30 yerel zincir altyapısının her biri ve doğrulanmış ERC-20 ile SPL varlıkları için önbellekteki bakiyeler. Monero için yapılandırılmış harici, yalnızca görüntüleme yetkili wallet-RPC gerekir.Ayrıntılar
30 yerel zincir altyapısının her biri ve doğrulanmış ERC-20 ile SPL varlıkları için önbellekteki bakiyeler. Monero için yapılandırılmış harici, yalnızca görüntüleme yetkili wallet-RPC gerekir.
project_enabledbooleanher zamanBu varlığın şu anda projenin varlık politikasıyla etkin olup olmadığı.
active_store_countintegerher zamanŞu anda bu varlığı seçen etkin mağaza sayısı. Bu, kabul durumunun görünümüdür; salt okunur bakiye takibi bağımsız kalır.
active_store_ids[]UUID[]her zamanBu projede varlığı şu anda kabul eden etkin mağazalar. Başka API isteği olmadan tam yerel mağaza filtrelemesi sağlar.
tracking_activebooleanher zamanBu okunabilir cüzdan ve kayıtlı aynı zincir varlığının arka plan bakiye yenilemesine uygun olup olmadığı. Proje ve ödeme yöntemi kabul anahtarları salt okunur takibi duraklatmaz.Ayrıntılar
Bu okunabilir cüzdan ve kayıtlı aynı zincir varlığının arka plan bakiye yenilemesine uygun olup olmadığı. Proje ve ödeme yöntemi kabul anahtarları salt okunur takibi duraklatmaz.
balancedecimal string|nullher zamanCüzdanın birincil adresi ve oluşturulmuş fatura adresleri genelindeki tam gösterim ve atomik bakiye. Tam değer bulunamıyorsa null.
balance_atomicinteger string|nullher zamanCüzdanın birincil adresi ve oluşturulmuş fatura adresleri genelindeki tam gösterim ve atomik bakiye. Tam değer bulunamıyorsa null.
price_usddecimal string | nullher zamanDeğerleme için kullanılan bilgi amaçlı önbellek USD birim fiyatı.
statuspending | refreshing | fresh | stale | errorher zamanÖnbellek tarama durumu. refreshing tamamlanmış bakiyeyi koruyabilir: yaşı için checked_at kullan. Pending tamamlanmış görüntü yok demektir. Bu durumların hiçbiri transferin beklediğini veya faturanın tamamlandığını kanıtlamaz.Ayrıntılar
Önbellek tarama durumu. refreshing tamamlanmış bakiyeyi koruyabilir: yaşı için checked_at kullan. Pending tamamlanmış görüntü yok demektir. Bu durumların hiçbiri transferin beklediğini veya faturanın tamamlandığını kanıtlamaz.
total_value_usddecimal string | nullher zamanGüncel USD fiyatı bulunan bakiyelerin bilgi amaçlı toplamı.
balance_statuspending | refreshing | fresh | stale | error | unknownher zamanBirleştirilmiş önbellek güncelliği; unknown temkinli yedek değerdir ve bu durumların hiçbiri fatura ödemesinin tamamlandığını kanıtlamaz.
balance_checked_attimestamp | nullher zamanToplamın temsil ettiği en eski ilgili başarılı bakiye kontrolü.
recent_payments[]object[]her zaman
Tam olarak bu cüzdana atfedilen, en yeni en fazla üç geçerli detected, confirming veya final gözlem.
statusdetected | confirming | finalher zamanGüncel geçerli gözlem durumu. Reorged, replaced ve invalid gözlemler hariç tutulur.
wallet_readinessreadiness enumher zamanYalnızca cüzdan/politika durumu; tarayıcı ön koşulları için receive_readiness kullan.
receive_readinessobject | null5.5.0+
Ortak ödeme alma kurulumu ve mağaza kabulü. Önbellek gözlemlerini kullanır; rezervasyon veya garanti değildir. Oluşturma gereksinimleri ve gerçek fatura kurunu yeniden kontrol eder.Ayrıntılar
Ortak ödeme alma kurulumu ve mağaza kabulü. Önbellek gözlemlerini kullanır; rezervasyon veya garanti değildir. Oluşturma gereksinimleri ve gerçek fatura kurunu yeniden kontrol eder.
readybooleanher zamanÖdeme alma kurulum kontrolleri geçti. Harcamaya hazır olmayı, gas'ı, bakiye yenilemeyi veya garantili gelecek teklifi açıklamaz.
invoice_creatableboolean6.0.6+Yapılandırma geçici tarayıcı uyarılarına rağmen fatura yöntemine izin verir. Para birimi fiyatlandırması oluşturma sırasında kontrol edilir. Bu ödeme doğrulaması değildir: invoice_creatable true iken ready false olabilir. Eksik cüzdanlar, devre dışı politika ve desteklenmeyen adaptörler yine güvenli biçimde başarısız olur.Ayrıntılar
Yapılandırma geçici tarayıcı uyarılarına rağmen fatura yöntemine izin verir. Para birimi fiyatlandırması oluşturma sırasında kontrol edilir. Bu ödeme doğrulaması değildir: invoice_creatable true iken ready false olabilir. Eksik cüzdanlar, devre dışı politika ve desteklenmeyen adaptörler yine güvenli biçimde başarısız olur.
issues[]object[]her zaman
Hazırsa boş; aksi halde ödeme alma uyarısı veya yapılandırma engeli. Geçici tarayıcı uyarılarını fatura kurulum hatalarından ayırmak için invoice_creatable kontrol et.Ayrıntılar
Hazırsa boş; aksi halde ödeme alma uyarısı veya yapılandırma engeli. Geçici tarayıcı uyarılarını fatura kurulum hatalarından ayırmak için invoice_creatable kontrol et.
chain_slugstringbiliniyorsaEtkilenen zinciri ve varlığı tanımlar. Lightning asset_id içermeyebilir.
asset_tickerstringbiliniyorsaEtkilenen zinciri ve varlığı tanımlar. Lightning asset_id içermeyebilir.
reason_codestringher zamanscanner_provider_quorum, scanner_not_checked, scanner_unavailable, wallet_missing, wallet_disabled, wallet_backup_required, wallet_key_unavailable, wallet_activation_required, monero_binding_unavailable, rate_unavailable, custom_rate_unavailable, lightning_unavailable, project_disabled, store_disabled, chain_disabled, asset_disabled veya asset_not_accepted.Ayrıntılar
scanner_provider_quorum, scanner_not_checked, scanner_unavailable, wallet_missing, wallet_disabled, wallet_backup_required, wallet_key_unavailable, wallet_activation_required, monero_binding_unavailable, rate_unavailable, custom_rate_unavailable, lightning_unavailable, project_disabled, store_disabled, chain_disabled, asset_disabled veya asset_not_accepted.
messagestringvarsaSatıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.Ayrıntılar
Satıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.
actionstringvarsaSatıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.Ayrıntılar
Satıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.
required_endpoint_rolestring | nullzincir üstüTercih edilen tarayıcı API rolü (eski alan). Tam uyumluluk listesi için accepted_endpoint_roles kullan. Temel düğüm sağlığı ödeme geçmişi desteğini kanıtlamaz.Ayrıntılar
Tercih edilen tarayıcı API rolü (eski alan). Tam uyumluluk listesi için accepted_endpoint_roles kullan. Temel düğüm sağlığı ödeme geçmişi desteğini kanıtlamaz.
accepted_endpoint_roles[]string[] | nullzincir üstüUyumlu API biçimleri; uç nokta geçmişi veya kapasitesi kanıtı değildir. Ham node-rpc, BTC/BCH/LTC/DOGE/DASH ve şeffaf ZEC (tam çözümlenmiş bloklar, 1–48 onay), solidified yerel TRX, algod üzerinden yerel ALGO, Octez üzerinden XTZ, SCALE meta verileriyle kesinleşmiş Asset Hub DOT ve fatura memo ID'siyle Stellar RPC üzerinden yerel XLM destekler. Budanmış veya eksik geçmiş uygun değildir. Bu ham adaptörler token altyapısı eklemez. İndeksli API'ler alternatif olmaya devam eder; aşağıdaki altyapı tablosuna bak. Karma ham/indeksli kaynaklar sınırlı aralıkları bağımsız doğrular; varsayılan, tek operatörün takma adları değil, iki bağımsız sağlayıcıdır. Temel düğüm yüksekliği, ORDnet zincir bilgisi ve EVM dışı altyapı için EVM rölesi ödeme alma kanıtı değildir. Monero yine projeye bağlı, yalnızca görüntüleme yetkili wallet-RPC gerektirir.Ayrıntılar
Uyumlu API biçimleri; uç nokta geçmişi veya kapasitesi kanıtı değildir. Ham node-rpc, BTC/BCH/LTC/DOGE/DASH ve şeffaf ZEC (tam çözümlenmiş bloklar, 1–48 onay), solidified yerel TRX, algod üzerinden yerel ALGO, Octez üzerinden XTZ, SCALE meta verileriyle kesinleşmiş Asset Hub DOT ve fatura memo ID'siyle Stellar RPC üzerinden yerel XLM destekler. Budanmış veya eksik geçmiş uygun değildir. Bu ham adaptörler token altyapısı eklemez. İndeksli API'ler alternatif olmaya devam eder; aşağıdaki altyapı tablosuna bak. Karma ham/indeksli kaynaklar sınırlı aralıkları bağımsız doğrular; varsayılan, tek operatörün takma adları değil, iki bağımsız sağlayıcıdır. Temel düğüm yüksekliği, ORDnet zincir bilgisi ve EVM dışı altyapı için EVM rölesi ödeme alma kanıtı değildir. Monero yine projeye bağlı, yalnızca görüntüleme yetkili wallet-RPC gerektirir.
healthy_endpointsintegerzincir üstüSağlıklı eşleşen uç noktalar; bağımsız sağlayıcı sayısı değildir.
usable_independent_providersintegerzincir üstüEn fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.Ayrıntılar
En fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.
required_independent_providersintegerzincir üstüEn fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.Ayrıntılar
En fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.
last_checked_attimestamp | nullzincir üstüDeğerlendirme zamanından ayrı, son eşleşen uç nokta sağlık kontrolü.
Kullanım notları
- selected zincir üstü yapılandırmadır; wallet_readiness onun güncel uygunluk kontrolüdür.
- lightning yanıt üyesi payment_rail: lightning, symbol: BTC, asset_decimals: 11, enabled ve ready içerir. Düğüm kimlik bilgilerini asla içermez. Bu yöntemi mağaza konsolunda yapılandır; assets dizisini güncellemek Lightning'i değiştirmez.
- confirmation_policy yalnızca zincir üstü yöntemlere uygulanır. Lightning blok onayı olmadan tamamlanır ve kısmi ödeme toleransı olmadan tam BOLT11 tutarını gerektirir.
- Aynı zincirdeki yerel coin ve token yöntemleri o zincir cüzdanı için aynı fatura hedefini kullanır.
- Gömülü cüzdan özetleri yalnızca hazırlık içindir ve bakiyeleri boş bırakır; güncel değerler için özel proje cüzdanları rotasını kullan.
Hatalar
PUTMağaza ödeme yöntemlerini değiştir/v1/projects/{project_id}/stores/{store_id}/payment-assetsOkuma ve yazma
Mağazanın sıralı varlık alt kümesinin tamamını atomik olarak değiştirir ve yenilenmiş listeyi döndürür. Atlanan varlıkların seçimi kaldırılır.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MERCHANT_API_TOKEN |
| Content-Type | zorunlu | application/json |
| Accept | önerilen | application/json |
Yol parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request PUT \
--url "https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/payment-assets" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Content-Type: application/json' \
--data-raw '{
"assets": [
{
"asset_id": "YOUR_ASSET_ID",
"display_order": 0
}
]
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const body = `{
"assets": [
{
"asset_id": "YOUR_ASSET_ID",
"display_order": 0
}
]
}`;
const response = await fetch("https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/payment-assets", {
method: "PUT",
headers: {
"Authorization": `Bearer ${token}`,
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$body = <<<'JSON'
{
"assets": [
{
"asset_id": "YOUR_ASSET_ID",
"display_order": 0
}
]
}
JSON;
$ch = curl_init("https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/payment-assets");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"assets": [
{
"asset_id": "YOUR_ASSET_ID",
"display_order": 0
}
]
}""".encode("utf-8")
request = Request("https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/payment-assets",
method="PUT", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"data": [
{ "asset": { "id": "44444444-4444-4444-8444-444444444444", "symbol": "USDC" }, "selected": true, "display_order": 0, "confirmation_policy": { "finality_mode": "confirmations", "project_required_confirmations": 12, "override_required_confirmations": null, "effective_required_confirmations": 12, "editable": true, "minimum_required_confirmations": 0, "maximum_required_confirmations": 48 }, "wallet_readiness": "ready" }
]
}Yanıt alanları
data[]object[]
assetobjecther zaman
Projenin görebildiği yerel veya doğrulanmış token varlığı.
asset_kindnative | tokenher zamanÖdeme tamamlanmasında zincir para biriminin mi, doğrulanmış sözleşme/mint'in mi kullanıldığı.
payment_railstringher zamanÇalışma zamanı ödeme altyapısı: utxo, evm-native, solana-native, account-native, privacy-native veya token-transfer.
contract_addressstring | nullher zamanToken'lar için kanonik ERC-20 sözleşmesi veya SPL mint'i; yerel varlıklarda null.
coingecko_idstring | nullher zamanKeşif/fiyatlandırma kimliği. Özel sözleşmelerde null; sembollerinden piyasa fiyatı çıkarma. CoinGecko meta verileri tek başına token'ı seçilebilir yapmaz.
custom_tokenbooleanher zamanProje kapsamlı sabit USD veya seçili DEX havuzu fiyatlandırması olan, zincir üstünde doğrulanmış özel sözleşme.
token_standarderc20 | spl-token | nullher zamanDoğrulanmış çalışma zamanı token standardı; yerel varlıklarda null.
metadata_verified_attimestamp | nullher zamanÖdeme varlığına dönüştürülen token'ların zincir üstü meta veri doğrulama zamanı.
payment_supportedbooleanher zamanDerleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.Ayrıntılar
Derleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.
scanner_readybooleanher zamanDerleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.Ayrıntılar
Derleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.
balance_readybooleanher zamanDerleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.Ayrıntılar
Derleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.
default_finality_modeconfirmations | finalizedher zamanYeni proje politikasının devraldığı varsayılan kesinlik modeli.
project_policyobject | nullher zaman
Üst proje politikası.
enabledbooleanzorunluVarlığı proje için etkinleştirir veya devre dışı bırakır. Herhangi bir token'dan önce yerel zincir etkin olmalıdır.
finality_modeconfirmations | finalizedzorunluVarlık ödeme altyapısının desteklediği kesinlik politikası. finalized, required_confirmations=1 gerektirir.
required_confirmationsintegerzorunluBitcoin ve EVM altyapıları sıfır kabul eder; diğer onay altyapıları en az bir, yalnızca finalized altyapıları tam bir gerektirir. Her transferin işlem yeniden oynatma aralığında kalması için EVM altyapıları 0–48 ile sınırlıdır.Ayrıntılar
Bitcoin ve EVM altyapıları sıfır kabul eder; diğer onay altyapıları en az bir, yalnızca finalized altyapıları tam bir gerektirir. Her transferin işlem yeniden oynatma aralığında kalması için EVM altyapıları 0–48 ile sınırlıdır.
selectedbooleanher zamanBu yöntemin mağazanın kayıtlı istenen yapılandırmasına dahil olup olmadığı. Proje politikası, cüzdan, kurulu adaptör ve fiyatlandırma geçerliyse sunulur. Geçici tarayıcı kesintileri yöntemi yeni faturalardan çıkarmaz.Ayrıntılar
Bu yöntemin mağazanın kayıtlı istenen yapılandırmasına dahil olup olmadığı. Proje politikası, cüzdan, kurulu adaptör ve fiyatlandırma geçerliyse sunulur. Geçici tarayıcı kesintileri yöntemi yeni faturalardan çıkarmaz.
confirmation_policyobject | nullher zaman
Projede yapılandırılan varlık için geçerli mağaza politikası. Proje politikası yoksa null.
finality_modeconfirmations | finalizedher zamanÖdeme tamamlanmasının ayarlanabilir blok sayısına mı, ağ kesinliğine mi dayandığı.
project_required_confirmationsintegerher zamanMağazaya özel değer yoksa sonraki faturaların kullanacağı güncel proje varsayılanı.
override_required_confirmationsinteger | nullher zamanMağazaya özel sayı veya proje varsayılanını devralmak için null.
effective_required_confirmationsintegerher zamanBu mağaza ve varlık için yeni faturaların kaydedeceği sayı.
minimum_required_confirmationsintegerher zamanDahil, zincire uygun alt sınır; 0 yalnızca tespit anında kabulü destekleyen altyapılarda sunulur.
walletobject | nullher zaman
Yerel ve token varlıklarının paylaştığı zincir cüzdanı.
public_keystring | nullher zamanHerkese açık cüzdan kimliği; kurtarma ifadesi veya özel anahtar açığa çıkarılmaz.
primary_addressstring | nullher zamanHerkese açık cüzdan kimliği; kurtarma ifadesi veya özel anahtar açığa çıkarılmaz.
backup_confirmed_attimestamp | nullher zamanOperatör kurtarma yedeğini onayladıktan sonra null değildir.
activation_requiredbooleanher zamanXRP ve Stellar ortak hesapları, operatör gösterilen adrese fon gönderene ve yapılandırılmış tarayıcı sağlayıcıları tam olarak o hesabı doğrulayana kadar kullanılamaz. Kalıcı kanıtın süresi dolmaz; canlı tarayıcı sağlığı fatura oluşturma için değil, ödeme doğrulaması için ayrı kontrol edilir.Ayrıntılar
XRP ve Stellar ortak hesapları, operatör gösterilen adrese fon gönderene ve yapılandırılmış tarayıcı sağlayıcıları tam olarak o hesabı doğrulayana kadar kullanılamaz. Kalıcı kanıtın süresi dolmaz; canlı tarayıcı sağlığı fatura oluşturma için değil, ödeme doğrulaması için ayrı kontrol edilir.
activation_verified_attimestamp|nullher zamanXRP ve Stellar ortak hesapları, operatör gösterilen adrese fon gönderene ve yapılandırılmış tarayıcı sağlayıcıları tam olarak o hesabı doğrulayana kadar kullanılamaz. Kalıcı kanıtın süresi dolmaz; canlı tarayıcı sağlığı fatura oluşturma için değil, ödeme doğrulaması için ayrı kontrol edilir.Ayrıntılar
XRP ve Stellar ortak hesapları, operatör gösterilen adrese fon gönderene ve yapılandırılmış tarayıcı sağlayıcıları tam olarak o hesabı doğrulayana kadar kullanılamaz. Kalıcı kanıtın süresi dolmaz; canlı tarayıcı sağlığı fatura oluşturma için değil, ödeme doğrulaması için ayrı kontrol edilir.
receive_readinessobject | null5.5.0+
Cüzdan listelerine dahildir: proje ödeme alma kurulumu ve zincir tarayıcısı ön koşulları. Bakiyelerden, token gas'ından ve gönderime hazır olma durumundan ayrıdır. Diğer cüzdan yanıtlarında null kalabilir.Ayrıntılar
Cüzdan listelerine dahildir: proje ödeme alma kurulumu ve zincir tarayıcısı ön koşulları. Bakiyelerden, token gas'ından ve gönderime hazır olma durumundan ayrıdır. Diğer cüzdan yanıtlarında null kalabilir.
readybooleanher zamanÖdeme alma kurulum kontrolleri geçti. Harcamaya hazır olmayı, gas'ı, bakiye yenilemeyi veya garantili gelecek teklifi açıklamaz.
invoice_creatableboolean6.0.6+Yapılandırma geçici tarayıcı uyarılarına rağmen fatura yöntemine izin verir. Para birimi fiyatlandırması oluşturma sırasında kontrol edilir. Bu ödeme doğrulaması değildir: invoice_creatable true iken ready false olabilir. Eksik cüzdanlar, devre dışı politika ve desteklenmeyen adaptörler yine güvenli biçimde başarısız olur.Ayrıntılar
Yapılandırma geçici tarayıcı uyarılarına rağmen fatura yöntemine izin verir. Para birimi fiyatlandırması oluşturma sırasında kontrol edilir. Bu ödeme doğrulaması değildir: invoice_creatable true iken ready false olabilir. Eksik cüzdanlar, devre dışı politika ve desteklenmeyen adaptörler yine güvenli biçimde başarısız olur.
issues[]object[]her zaman
Hazırsa boş; aksi halde ödeme alma uyarısı veya yapılandırma engeli. Geçici tarayıcı uyarılarını fatura kurulum hatalarından ayırmak için invoice_creatable kontrol et.Ayrıntılar
Hazırsa boş; aksi halde ödeme alma uyarısı veya yapılandırma engeli. Geçici tarayıcı uyarılarını fatura kurulum hatalarından ayırmak için invoice_creatable kontrol et.
chain_slugstringbiliniyorsaEtkilenen zinciri ve varlığı tanımlar. Lightning asset_id içermeyebilir.
asset_tickerstringbiliniyorsaEtkilenen zinciri ve varlığı tanımlar. Lightning asset_id içermeyebilir.
reason_codestringher zamanscanner_provider_quorum, scanner_not_checked, scanner_unavailable, wallet_missing, wallet_disabled, wallet_backup_required, wallet_key_unavailable, wallet_activation_required, monero_binding_unavailable, rate_unavailable, custom_rate_unavailable, lightning_unavailable, project_disabled, store_disabled, chain_disabled, asset_disabled veya asset_not_accepted.Ayrıntılar
scanner_provider_quorum, scanner_not_checked, scanner_unavailable, wallet_missing, wallet_disabled, wallet_backup_required, wallet_key_unavailable, wallet_activation_required, monero_binding_unavailable, rate_unavailable, custom_rate_unavailable, lightning_unavailable, project_disabled, store_disabled, chain_disabled, asset_disabled veya asset_not_accepted.
messagestringvarsaSatıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.Ayrıntılar
Satıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.
actionstringvarsaSatıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.Ayrıntılar
Satıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.
required_endpoint_rolestring | nullzincir üstüTercih edilen tarayıcı API rolü (eski alan). Tam uyumluluk listesi için accepted_endpoint_roles kullan. Temel düğüm sağlığı ödeme geçmişi desteğini kanıtlamaz.Ayrıntılar
Tercih edilen tarayıcı API rolü (eski alan). Tam uyumluluk listesi için accepted_endpoint_roles kullan. Temel düğüm sağlığı ödeme geçmişi desteğini kanıtlamaz.
accepted_endpoint_roles[]string[] | nullzincir üstüUyumlu API biçimleri; uç nokta geçmişi veya kapasitesi kanıtı değildir. Ham node-rpc, BTC/BCH/LTC/DOGE/DASH ve şeffaf ZEC (tam çözümlenmiş bloklar, 1–48 onay), solidified yerel TRX, algod üzerinden yerel ALGO, Octez üzerinden XTZ, SCALE meta verileriyle kesinleşmiş Asset Hub DOT ve fatura memo ID'siyle Stellar RPC üzerinden yerel XLM destekler. Budanmış veya eksik geçmiş uygun değildir. Bu ham adaptörler token altyapısı eklemez. İndeksli API'ler alternatif olmaya devam eder; aşağıdaki altyapı tablosuna bak. Karma ham/indeksli kaynaklar sınırlı aralıkları bağımsız doğrular; varsayılan, tek operatörün takma adları değil, iki bağımsız sağlayıcıdır. Temel düğüm yüksekliği, ORDnet zincir bilgisi ve EVM dışı altyapı için EVM rölesi ödeme alma kanıtı değildir. Monero yine projeye bağlı, yalnızca görüntüleme yetkili wallet-RPC gerektirir.Ayrıntılar
Uyumlu API biçimleri; uç nokta geçmişi veya kapasitesi kanıtı değildir. Ham node-rpc, BTC/BCH/LTC/DOGE/DASH ve şeffaf ZEC (tam çözümlenmiş bloklar, 1–48 onay), solidified yerel TRX, algod üzerinden yerel ALGO, Octez üzerinden XTZ, SCALE meta verileriyle kesinleşmiş Asset Hub DOT ve fatura memo ID'siyle Stellar RPC üzerinden yerel XLM destekler. Budanmış veya eksik geçmiş uygun değildir. Bu ham adaptörler token altyapısı eklemez. İndeksli API'ler alternatif olmaya devam eder; aşağıdaki altyapı tablosuna bak. Karma ham/indeksli kaynaklar sınırlı aralıkları bağımsız doğrular; varsayılan, tek operatörün takma adları değil, iki bağımsız sağlayıcıdır. Temel düğüm yüksekliği, ORDnet zincir bilgisi ve EVM dışı altyapı için EVM rölesi ödeme alma kanıtı değildir. Monero yine projeye bağlı, yalnızca görüntüleme yetkili wallet-RPC gerektirir.
healthy_endpointsintegerzincir üstüSağlıklı eşleşen uç noktalar; bağımsız sağlayıcı sayısı değildir.
usable_independent_providersintegerzincir üstüEn fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.Ayrıntılar
En fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.
required_independent_providersintegerzincir üstüEn fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.Ayrıntılar
En fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.
last_checked_attimestamp | nullzincir üstüDeğerlendirme zamanından ayrı, son eşleşen uç nokta sağlık kontrolü.
monero_wallet_rpcMoneroWalletRpcBinding | nullher zamanMonero için hassas bilgileri ayıklanmış harici, yalnızca görüntüleme yetkili wallet-RPC bağlantı durumu. Uç nokta, kimlik doğrulama modu, account-0 birincil adresi, teknik kanıt işaretleri/yükseklikleri ve operatör beyanı zaman damgaları içerir; kimlik bilgileri, cüzdan anahtarları ve cüzdan dosyaları asla serileştirilmez.Ayrıntılar
Monero için hassas bilgileri ayıklanmış harici, yalnızca görüntüleme yetkili wallet-RPC bağlantı durumu. Uç nokta, kimlik doğrulama modu, account-0 birincil adresi, teknik kanıt işaretleri/yükseklikleri ve operatör beyanı zaman damgaları içerir; kimlik bilgileri, cüzdan anahtarları ve cüzdan dosyaları asla serileştirilmez.
balances[]object[]her zaman
30 yerel zincir altyapısının her biri ve doğrulanmış ERC-20 ile SPL varlıkları için önbellekteki bakiyeler. Monero için yapılandırılmış harici, yalnızca görüntüleme yetkili wallet-RPC gerekir.Ayrıntılar
30 yerel zincir altyapısının her biri ve doğrulanmış ERC-20 ile SPL varlıkları için önbellekteki bakiyeler. Monero için yapılandırılmış harici, yalnızca görüntüleme yetkili wallet-RPC gerekir.
project_enabledbooleanher zamanBu varlığın şu anda projenin varlık politikasıyla etkin olup olmadığı.
active_store_countintegerher zamanŞu anda bu varlığı seçen etkin mağaza sayısı. Bu, kabul durumunun görünümüdür; salt okunur bakiye takibi bağımsız kalır.
active_store_ids[]UUID[]her zamanBu projede varlığı şu anda kabul eden etkin mağazalar. Başka API isteği olmadan tam yerel mağaza filtrelemesi sağlar.
tracking_activebooleanher zamanBu okunabilir cüzdan ve kayıtlı aynı zincir varlığının arka plan bakiye yenilemesine uygun olup olmadığı. Proje ve ödeme yöntemi kabul anahtarları salt okunur takibi duraklatmaz.Ayrıntılar
Bu okunabilir cüzdan ve kayıtlı aynı zincir varlığının arka plan bakiye yenilemesine uygun olup olmadığı. Proje ve ödeme yöntemi kabul anahtarları salt okunur takibi duraklatmaz.
balancedecimal string|nullher zamanCüzdanın birincil adresi ve oluşturulmuş fatura adresleri genelindeki tam gösterim ve atomik bakiye. Tam değer bulunamıyorsa null.
balance_atomicinteger string|nullher zamanCüzdanın birincil adresi ve oluşturulmuş fatura adresleri genelindeki tam gösterim ve atomik bakiye. Tam değer bulunamıyorsa null.
price_usddecimal string | nullher zamanDeğerleme için kullanılan bilgi amaçlı önbellek USD birim fiyatı.
statuspending | refreshing | fresh | stale | errorher zamanÖnbellek tarama durumu. refreshing tamamlanmış bakiyeyi koruyabilir: yaşı için checked_at kullan. Pending tamamlanmış görüntü yok demektir. Bu durumların hiçbiri transferin beklediğini veya faturanın tamamlandığını kanıtlamaz.Ayrıntılar
Önbellek tarama durumu. refreshing tamamlanmış bakiyeyi koruyabilir: yaşı için checked_at kullan. Pending tamamlanmış görüntü yok demektir. Bu durumların hiçbiri transferin beklediğini veya faturanın tamamlandığını kanıtlamaz.
total_value_usddecimal string | nullher zamanGüncel USD fiyatı bulunan bakiyelerin bilgi amaçlı toplamı.
balance_statuspending | refreshing | fresh | stale | error | unknownher zamanBirleştirilmiş önbellek güncelliği; unknown temkinli yedek değerdir ve bu durumların hiçbiri fatura ödemesinin tamamlandığını kanıtlamaz.
balance_checked_attimestamp | nullher zamanToplamın temsil ettiği en eski ilgili başarılı bakiye kontrolü.
recent_payments[]object[]her zaman
Tam olarak bu cüzdana atfedilen, en yeni en fazla üç geçerli detected, confirming veya final gözlem.
statusdetected | confirming | finalher zamanGüncel geçerli gözlem durumu. Reorged, replaced ve invalid gözlemler hariç tutulur.
wallet_readinessreadiness enumher zamanYalnızca cüzdan/politika durumu; tarayıcı ön koşulları için receive_readiness kullan.
receive_readinessobject | null5.5.0+
Ortak ödeme alma kurulumu ve mağaza kabulü. Önbellek gözlemlerini kullanır; rezervasyon veya garanti değildir. Oluşturma gereksinimleri ve gerçek fatura kurunu yeniden kontrol eder.Ayrıntılar
Ortak ödeme alma kurulumu ve mağaza kabulü. Önbellek gözlemlerini kullanır; rezervasyon veya garanti değildir. Oluşturma gereksinimleri ve gerçek fatura kurunu yeniden kontrol eder.
readybooleanher zamanÖdeme alma kurulum kontrolleri geçti. Harcamaya hazır olmayı, gas'ı, bakiye yenilemeyi veya garantili gelecek teklifi açıklamaz.
invoice_creatableboolean6.0.6+Yapılandırma geçici tarayıcı uyarılarına rağmen fatura yöntemine izin verir. Para birimi fiyatlandırması oluşturma sırasında kontrol edilir. Bu ödeme doğrulaması değildir: invoice_creatable true iken ready false olabilir. Eksik cüzdanlar, devre dışı politika ve desteklenmeyen adaptörler yine güvenli biçimde başarısız olur.Ayrıntılar
Yapılandırma geçici tarayıcı uyarılarına rağmen fatura yöntemine izin verir. Para birimi fiyatlandırması oluşturma sırasında kontrol edilir. Bu ödeme doğrulaması değildir: invoice_creatable true iken ready false olabilir. Eksik cüzdanlar, devre dışı politika ve desteklenmeyen adaptörler yine güvenli biçimde başarısız olur.
issues[]object[]her zaman
Hazırsa boş; aksi halde ödeme alma uyarısı veya yapılandırma engeli. Geçici tarayıcı uyarılarını fatura kurulum hatalarından ayırmak için invoice_creatable kontrol et.Ayrıntılar
Hazırsa boş; aksi halde ödeme alma uyarısı veya yapılandırma engeli. Geçici tarayıcı uyarılarını fatura kurulum hatalarından ayırmak için invoice_creatable kontrol et.
chain_slugstringbiliniyorsaEtkilenen zinciri ve varlığı tanımlar. Lightning asset_id içermeyebilir.
asset_tickerstringbiliniyorsaEtkilenen zinciri ve varlığı tanımlar. Lightning asset_id içermeyebilir.
reason_codestringher zamanscanner_provider_quorum, scanner_not_checked, scanner_unavailable, wallet_missing, wallet_disabled, wallet_backup_required, wallet_key_unavailable, wallet_activation_required, monero_binding_unavailable, rate_unavailable, custom_rate_unavailable, lightning_unavailable, project_disabled, store_disabled, chain_disabled, asset_disabled veya asset_not_accepted.Ayrıntılar
scanner_provider_quorum, scanner_not_checked, scanner_unavailable, wallet_missing, wallet_disabled, wallet_backup_required, wallet_key_unavailable, wallet_activation_required, monero_binding_unavailable, rate_unavailable, custom_rate_unavailable, lightning_unavailable, project_disabled, store_disabled, chain_disabled, asset_disabled veya asset_not_accepted.
messagestringvarsaSatıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.Ayrıntılar
Satıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.
actionstringvarsaSatıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.Ayrıntılar
Satıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.
required_endpoint_rolestring | nullzincir üstüTercih edilen tarayıcı API rolü (eski alan). Tam uyumluluk listesi için accepted_endpoint_roles kullan. Temel düğüm sağlığı ödeme geçmişi desteğini kanıtlamaz.Ayrıntılar
Tercih edilen tarayıcı API rolü (eski alan). Tam uyumluluk listesi için accepted_endpoint_roles kullan. Temel düğüm sağlığı ödeme geçmişi desteğini kanıtlamaz.
accepted_endpoint_roles[]string[] | nullzincir üstüUyumlu API biçimleri; uç nokta geçmişi veya kapasitesi kanıtı değildir. Ham node-rpc, BTC/BCH/LTC/DOGE/DASH ve şeffaf ZEC (tam çözümlenmiş bloklar, 1–48 onay), solidified yerel TRX, algod üzerinden yerel ALGO, Octez üzerinden XTZ, SCALE meta verileriyle kesinleşmiş Asset Hub DOT ve fatura memo ID'siyle Stellar RPC üzerinden yerel XLM destekler. Budanmış veya eksik geçmiş uygun değildir. Bu ham adaptörler token altyapısı eklemez. İndeksli API'ler alternatif olmaya devam eder; aşağıdaki altyapı tablosuna bak. Karma ham/indeksli kaynaklar sınırlı aralıkları bağımsız doğrular; varsayılan, tek operatörün takma adları değil, iki bağımsız sağlayıcıdır. Temel düğüm yüksekliği, ORDnet zincir bilgisi ve EVM dışı altyapı için EVM rölesi ödeme alma kanıtı değildir. Monero yine projeye bağlı, yalnızca görüntüleme yetkili wallet-RPC gerektirir.Ayrıntılar
Uyumlu API biçimleri; uç nokta geçmişi veya kapasitesi kanıtı değildir. Ham node-rpc, BTC/BCH/LTC/DOGE/DASH ve şeffaf ZEC (tam çözümlenmiş bloklar, 1–48 onay), solidified yerel TRX, algod üzerinden yerel ALGO, Octez üzerinden XTZ, SCALE meta verileriyle kesinleşmiş Asset Hub DOT ve fatura memo ID'siyle Stellar RPC üzerinden yerel XLM destekler. Budanmış veya eksik geçmiş uygun değildir. Bu ham adaptörler token altyapısı eklemez. İndeksli API'ler alternatif olmaya devam eder; aşağıdaki altyapı tablosuna bak. Karma ham/indeksli kaynaklar sınırlı aralıkları bağımsız doğrular; varsayılan, tek operatörün takma adları değil, iki bağımsız sağlayıcıdır. Temel düğüm yüksekliği, ORDnet zincir bilgisi ve EVM dışı altyapı için EVM rölesi ödeme alma kanıtı değildir. Monero yine projeye bağlı, yalnızca görüntüleme yetkili wallet-RPC gerektirir.
healthy_endpointsintegerzincir üstüSağlıklı eşleşen uç noktalar; bağımsız sağlayıcı sayısı değildir.
usable_independent_providersintegerzincir üstüEn fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.Ayrıntılar
En fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.
required_independent_providersintegerzincir üstüEn fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.Ayrıntılar
En fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.
last_checked_attimestamp | nullzincir üstüDeğerlendirme zamanından ayrı, son eşleşen uç nokta sağlık kontrolü.
Kullanım notları
- Dizi en fazla 64 benzersiz varlık ve görüntüleme sırası kabul eder.
- Seçimler kaydedilen istenen yapılandırmadır; cüzdan yedeklenmeden önce veya zincir duraklatılmışken hazırlanabilir. Fatura oluşturma yine yalnızca proje politikası, yerel üst politika, cüzdan ve çalışma zamanı kontrolleri hazır olan yöntemleri sunar.
- Hiç ödeme yöntemi yapılandırmamak için boş assets dizisi gönder.
Hatalar
PUTMağaza onay politikası belirle/v1/projects/{project_id}/stores/{store_id}/payment-assets/{asset_id}/confirmation-policyOkuma ve yazma
Mağazaya özel tek bir onay değerini belirler veya temizler ve yenilenmiş mağaza ödeme yöntemi listesini döndürür. Varlık mağaza için zaten seçilmiş olmalıdır. Proje, mağaza, zincir veya cüzdan duraklatılmışken yapılandırma kullanılabilir kalır.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MERCHANT_API_TOKEN |
| Content-Type | zorunlu | application/json |
| Accept | önerilen | application/json |
Yol parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request PUT \
--url "https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/payment-assets/YOUR_ASSET_ID/confirmation-policy" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Content-Type: application/json' \
--data-raw '{
"strategy": "custom",
"required_confirmations": 0
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const body = `{
"strategy": "custom",
"required_confirmations": 0
}`;
const response = await fetch("https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/payment-assets/YOUR_ASSET_ID/confirmation-policy", {
method: "PUT",
headers: {
"Authorization": `Bearer ${token}`,
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$body = <<<'JSON'
{
"strategy": "custom",
"required_confirmations": 0
}
JSON;
$ch = curl_init("https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/payment-assets/YOUR_ASSET_ID/confirmation-policy");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"strategy": "custom",
"required_confirmations": 0
}""".encode("utf-8")
request = Request("https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/payment-assets/YOUR_ASSET_ID/confirmation-policy",
method="PUT", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
Yanıt 200 application/json
Örnek yanıt
{
"data": [
{
"asset": { "id": "YOUR_ASSET_ID", "chain_slug": "bitcoin", "symbol": "BTC" },
"selected": true,
"display_order": 0,
"confirmation_policy": {
"finality_mode": "confirmations",
"project_required_confirmations": 2,
"override_required_confirmations": 0,
"effective_required_confirmations": 0,
"editable": true,
"minimum_required_confirmations": 0,
"maximum_required_confirmations": 10000
},
"wallet_readiness": "ready"
}
]
}Yanıt alanları
data[]object[]
assetobjecther zaman
Projenin görebildiği yerel veya doğrulanmış token varlığı.
asset_kindnative | tokenher zamanÖdeme tamamlanmasında zincir para biriminin mi, doğrulanmış sözleşme/mint'in mi kullanıldığı.
payment_railstringher zamanÇalışma zamanı ödeme altyapısı: utxo, evm-native, solana-native, account-native, privacy-native veya token-transfer.
contract_addressstring | nullher zamanToken'lar için kanonik ERC-20 sözleşmesi veya SPL mint'i; yerel varlıklarda null.
coingecko_idstring | nullher zamanKeşif/fiyatlandırma kimliği. Özel sözleşmelerde null; sembollerinden piyasa fiyatı çıkarma. CoinGecko meta verileri tek başına token'ı seçilebilir yapmaz.
custom_tokenbooleanher zamanProje kapsamlı sabit USD veya seçili DEX havuzu fiyatlandırması olan, zincir üstünde doğrulanmış özel sözleşme.
token_standarderc20 | spl-token | nullher zamanDoğrulanmış çalışma zamanı token standardı; yerel varlıklarda null.
metadata_verified_attimestamp | nullher zamanÖdeme varlığına dönüştürülen token'ların zincir üstü meta veri doğrulama zamanı.
payment_supportedbooleanher zamanDerleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.Ayrıntılar
Derleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.
scanner_readybooleanher zamanDerleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.Ayrıntılar
Derleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.
balance_readybooleanher zamanDerleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.Ayrıntılar
Derleme zamanı kayıt kontrolleri. scanner_ready ödeme tarayıcısı çalışma ortamının kurulu olduğu anlamına gelir; ödeme onayı, yapılandırılmış sayıda sağlıklı ve tam role uygun sağlayıcı gerektirir (varsayılan 2, isteğe bağlı 1); geçici tarayıcı kullanılabilirliği 6.0.6'dan itibaren fatura oluşturmayı engellemez. balance_ready yalnızca uygulanmış bakiye adaptörlerinde true olur.
default_finality_modeconfirmations | finalizedher zamanYeni proje politikasının devraldığı varsayılan kesinlik modeli.
project_policyobject | nullher zaman
Üst proje politikası.
enabledbooleanzorunluVarlığı proje için etkinleştirir veya devre dışı bırakır. Herhangi bir token'dan önce yerel zincir etkin olmalıdır.
finality_modeconfirmations | finalizedzorunluVarlık ödeme altyapısının desteklediği kesinlik politikası. finalized, required_confirmations=1 gerektirir.
required_confirmationsintegerzorunluBitcoin ve EVM altyapıları sıfır kabul eder; diğer onay altyapıları en az bir, yalnızca finalized altyapıları tam bir gerektirir. Her transferin işlem yeniden oynatma aralığında kalması için EVM altyapıları 0–48 ile sınırlıdır.Ayrıntılar
Bitcoin ve EVM altyapıları sıfır kabul eder; diğer onay altyapıları en az bir, yalnızca finalized altyapıları tam bir gerektirir. Her transferin işlem yeniden oynatma aralığında kalması için EVM altyapıları 0–48 ile sınırlıdır.
selectedbooleanher zamanBu yöntemin mağazanın kayıtlı istenen yapılandırmasına dahil olup olmadığı. Proje politikası, cüzdan, kurulu adaptör ve fiyatlandırma geçerliyse sunulur. Geçici tarayıcı kesintileri yöntemi yeni faturalardan çıkarmaz.Ayrıntılar
Bu yöntemin mağazanın kayıtlı istenen yapılandırmasına dahil olup olmadığı. Proje politikası, cüzdan, kurulu adaptör ve fiyatlandırma geçerliyse sunulur. Geçici tarayıcı kesintileri yöntemi yeni faturalardan çıkarmaz.
confirmation_policyobject | nullher zaman
Projede yapılandırılan varlık için geçerli mağaza politikası. Proje politikası yoksa null.
finality_modeconfirmations | finalizedher zamanÖdeme tamamlanmasının ayarlanabilir blok sayısına mı, ağ kesinliğine mi dayandığı.
project_required_confirmationsintegerher zamanMağazaya özel değer yoksa sonraki faturaların kullanacağı güncel proje varsayılanı.
override_required_confirmationsinteger | nullher zamanMağazaya özel sayı veya proje varsayılanını devralmak için null.
effective_required_confirmationsintegerher zamanBu mağaza ve varlık için yeni faturaların kaydedeceği sayı.
minimum_required_confirmationsintegerher zamanDahil, zincire uygun alt sınır; 0 yalnızca tespit anında kabulü destekleyen altyapılarda sunulur.
walletobject | nullher zaman
Yerel ve token varlıklarının paylaştığı zincir cüzdanı.
public_keystring | nullher zamanHerkese açık cüzdan kimliği; kurtarma ifadesi veya özel anahtar açığa çıkarılmaz.
primary_addressstring | nullher zamanHerkese açık cüzdan kimliği; kurtarma ifadesi veya özel anahtar açığa çıkarılmaz.
backup_confirmed_attimestamp | nullher zamanOperatör kurtarma yedeğini onayladıktan sonra null değildir.
activation_requiredbooleanher zamanXRP ve Stellar ortak hesapları, operatör gösterilen adrese fon gönderene ve yapılandırılmış tarayıcı sağlayıcıları tam olarak o hesabı doğrulayana kadar kullanılamaz. Kalıcı kanıtın süresi dolmaz; canlı tarayıcı sağlığı fatura oluşturma için değil, ödeme doğrulaması için ayrı kontrol edilir.Ayrıntılar
XRP ve Stellar ortak hesapları, operatör gösterilen adrese fon gönderene ve yapılandırılmış tarayıcı sağlayıcıları tam olarak o hesabı doğrulayana kadar kullanılamaz. Kalıcı kanıtın süresi dolmaz; canlı tarayıcı sağlığı fatura oluşturma için değil, ödeme doğrulaması için ayrı kontrol edilir.
activation_verified_attimestamp|nullher zamanXRP ve Stellar ortak hesapları, operatör gösterilen adrese fon gönderene ve yapılandırılmış tarayıcı sağlayıcıları tam olarak o hesabı doğrulayana kadar kullanılamaz. Kalıcı kanıtın süresi dolmaz; canlı tarayıcı sağlığı fatura oluşturma için değil, ödeme doğrulaması için ayrı kontrol edilir.Ayrıntılar
XRP ve Stellar ortak hesapları, operatör gösterilen adrese fon gönderene ve yapılandırılmış tarayıcı sağlayıcıları tam olarak o hesabı doğrulayana kadar kullanılamaz. Kalıcı kanıtın süresi dolmaz; canlı tarayıcı sağlığı fatura oluşturma için değil, ödeme doğrulaması için ayrı kontrol edilir.
receive_readinessobject | null5.5.0+
Cüzdan listelerine dahildir: proje ödeme alma kurulumu ve zincir tarayıcısı ön koşulları. Bakiyelerden, token gas'ından ve gönderime hazır olma durumundan ayrıdır. Diğer cüzdan yanıtlarında null kalabilir.Ayrıntılar
Cüzdan listelerine dahildir: proje ödeme alma kurulumu ve zincir tarayıcısı ön koşulları. Bakiyelerden, token gas'ından ve gönderime hazır olma durumundan ayrıdır. Diğer cüzdan yanıtlarında null kalabilir.
readybooleanher zamanÖdeme alma kurulum kontrolleri geçti. Harcamaya hazır olmayı, gas'ı, bakiye yenilemeyi veya garantili gelecek teklifi açıklamaz.
invoice_creatableboolean6.0.6+Yapılandırma geçici tarayıcı uyarılarına rağmen fatura yöntemine izin verir. Para birimi fiyatlandırması oluşturma sırasında kontrol edilir. Bu ödeme doğrulaması değildir: invoice_creatable true iken ready false olabilir. Eksik cüzdanlar, devre dışı politika ve desteklenmeyen adaptörler yine güvenli biçimde başarısız olur.Ayrıntılar
Yapılandırma geçici tarayıcı uyarılarına rağmen fatura yöntemine izin verir. Para birimi fiyatlandırması oluşturma sırasında kontrol edilir. Bu ödeme doğrulaması değildir: invoice_creatable true iken ready false olabilir. Eksik cüzdanlar, devre dışı politika ve desteklenmeyen adaptörler yine güvenli biçimde başarısız olur.
issues[]object[]her zaman
Hazırsa boş; aksi halde ödeme alma uyarısı veya yapılandırma engeli. Geçici tarayıcı uyarılarını fatura kurulum hatalarından ayırmak için invoice_creatable kontrol et.Ayrıntılar
Hazırsa boş; aksi halde ödeme alma uyarısı veya yapılandırma engeli. Geçici tarayıcı uyarılarını fatura kurulum hatalarından ayırmak için invoice_creatable kontrol et.
chain_slugstringbiliniyorsaEtkilenen zinciri ve varlığı tanımlar. Lightning asset_id içermeyebilir.
asset_tickerstringbiliniyorsaEtkilenen zinciri ve varlığı tanımlar. Lightning asset_id içermeyebilir.
reason_codestringher zamanscanner_provider_quorum, scanner_not_checked, scanner_unavailable, wallet_missing, wallet_disabled, wallet_backup_required, wallet_key_unavailable, wallet_activation_required, monero_binding_unavailable, rate_unavailable, custom_rate_unavailable, lightning_unavailable, project_disabled, store_disabled, chain_disabled, asset_disabled veya asset_not_accepted.Ayrıntılar
scanner_provider_quorum, scanner_not_checked, scanner_unavailable, wallet_missing, wallet_disabled, wallet_backup_required, wallet_key_unavailable, wallet_activation_required, monero_binding_unavailable, rate_unavailable, custom_rate_unavailable, lightning_unavailable, project_disabled, store_disabled, chain_disabled, asset_disabled veya asset_not_accepted.
messagestringvarsaSatıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.Ayrıntılar
Satıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.
actionstringvarsaSatıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.Ayrıntılar
Satıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.
required_endpoint_rolestring | nullzincir üstüTercih edilen tarayıcı API rolü (eski alan). Tam uyumluluk listesi için accepted_endpoint_roles kullan. Temel düğüm sağlığı ödeme geçmişi desteğini kanıtlamaz.Ayrıntılar
Tercih edilen tarayıcı API rolü (eski alan). Tam uyumluluk listesi için accepted_endpoint_roles kullan. Temel düğüm sağlığı ödeme geçmişi desteğini kanıtlamaz.
accepted_endpoint_roles[]string[] | nullzincir üstüUyumlu API biçimleri; uç nokta geçmişi veya kapasitesi kanıtı değildir. Ham node-rpc, BTC/BCH/LTC/DOGE/DASH ve şeffaf ZEC (tam çözümlenmiş bloklar, 1–48 onay), solidified yerel TRX, algod üzerinden yerel ALGO, Octez üzerinden XTZ, SCALE meta verileriyle kesinleşmiş Asset Hub DOT ve fatura memo ID'siyle Stellar RPC üzerinden yerel XLM destekler. Budanmış veya eksik geçmiş uygun değildir. Bu ham adaptörler token altyapısı eklemez. İndeksli API'ler alternatif olmaya devam eder; aşağıdaki altyapı tablosuna bak. Karma ham/indeksli kaynaklar sınırlı aralıkları bağımsız doğrular; varsayılan, tek operatörün takma adları değil, iki bağımsız sağlayıcıdır. Temel düğüm yüksekliği, ORDnet zincir bilgisi ve EVM dışı altyapı için EVM rölesi ödeme alma kanıtı değildir. Monero yine projeye bağlı, yalnızca görüntüleme yetkili wallet-RPC gerektirir.Ayrıntılar
Uyumlu API biçimleri; uç nokta geçmişi veya kapasitesi kanıtı değildir. Ham node-rpc, BTC/BCH/LTC/DOGE/DASH ve şeffaf ZEC (tam çözümlenmiş bloklar, 1–48 onay), solidified yerel TRX, algod üzerinden yerel ALGO, Octez üzerinden XTZ, SCALE meta verileriyle kesinleşmiş Asset Hub DOT ve fatura memo ID'siyle Stellar RPC üzerinden yerel XLM destekler. Budanmış veya eksik geçmiş uygun değildir. Bu ham adaptörler token altyapısı eklemez. İndeksli API'ler alternatif olmaya devam eder; aşağıdaki altyapı tablosuna bak. Karma ham/indeksli kaynaklar sınırlı aralıkları bağımsız doğrular; varsayılan, tek operatörün takma adları değil, iki bağımsız sağlayıcıdır. Temel düğüm yüksekliği, ORDnet zincir bilgisi ve EVM dışı altyapı için EVM rölesi ödeme alma kanıtı değildir. Monero yine projeye bağlı, yalnızca görüntüleme yetkili wallet-RPC gerektirir.
healthy_endpointsintegerzincir üstüSağlıklı eşleşen uç noktalar; bağımsız sağlayıcı sayısı değildir.
usable_independent_providersintegerzincir üstüEn fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.Ayrıntılar
En fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.
required_independent_providersintegerzincir üstüEn fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.Ayrıntılar
En fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.
last_checked_attimestamp | nullzincir üstüDeğerlendirme zamanından ayrı, son eşleşen uç nokta sağlık kontrolü.
monero_wallet_rpcMoneroWalletRpcBinding | nullher zamanMonero için hassas bilgileri ayıklanmış harici, yalnızca görüntüleme yetkili wallet-RPC bağlantı durumu. Uç nokta, kimlik doğrulama modu, account-0 birincil adresi, teknik kanıt işaretleri/yükseklikleri ve operatör beyanı zaman damgaları içerir; kimlik bilgileri, cüzdan anahtarları ve cüzdan dosyaları asla serileştirilmez.Ayrıntılar
Monero için hassas bilgileri ayıklanmış harici, yalnızca görüntüleme yetkili wallet-RPC bağlantı durumu. Uç nokta, kimlik doğrulama modu, account-0 birincil adresi, teknik kanıt işaretleri/yükseklikleri ve operatör beyanı zaman damgaları içerir; kimlik bilgileri, cüzdan anahtarları ve cüzdan dosyaları asla serileştirilmez.
balances[]object[]her zaman
30 yerel zincir altyapısının her biri ve doğrulanmış ERC-20 ile SPL varlıkları için önbellekteki bakiyeler. Monero için yapılandırılmış harici, yalnızca görüntüleme yetkili wallet-RPC gerekir.Ayrıntılar
30 yerel zincir altyapısının her biri ve doğrulanmış ERC-20 ile SPL varlıkları için önbellekteki bakiyeler. Monero için yapılandırılmış harici, yalnızca görüntüleme yetkili wallet-RPC gerekir.
project_enabledbooleanher zamanBu varlığın şu anda projenin varlık politikasıyla etkin olup olmadığı.
active_store_countintegerher zamanŞu anda bu varlığı seçen etkin mağaza sayısı. Bu, kabul durumunun görünümüdür; salt okunur bakiye takibi bağımsız kalır.
active_store_ids[]UUID[]her zamanBu projede varlığı şu anda kabul eden etkin mağazalar. Başka API isteği olmadan tam yerel mağaza filtrelemesi sağlar.
tracking_activebooleanher zamanBu okunabilir cüzdan ve kayıtlı aynı zincir varlığının arka plan bakiye yenilemesine uygun olup olmadığı. Proje ve ödeme yöntemi kabul anahtarları salt okunur takibi duraklatmaz.Ayrıntılar
Bu okunabilir cüzdan ve kayıtlı aynı zincir varlığının arka plan bakiye yenilemesine uygun olup olmadığı. Proje ve ödeme yöntemi kabul anahtarları salt okunur takibi duraklatmaz.
balancedecimal string|nullher zamanCüzdanın birincil adresi ve oluşturulmuş fatura adresleri genelindeki tam gösterim ve atomik bakiye. Tam değer bulunamıyorsa null.
balance_atomicinteger string|nullher zamanCüzdanın birincil adresi ve oluşturulmuş fatura adresleri genelindeki tam gösterim ve atomik bakiye. Tam değer bulunamıyorsa null.
price_usddecimal string | nullher zamanDeğerleme için kullanılan bilgi amaçlı önbellek USD birim fiyatı.
statuspending | refreshing | fresh | stale | errorher zamanÖnbellek tarama durumu. refreshing tamamlanmış bakiyeyi koruyabilir: yaşı için checked_at kullan. Pending tamamlanmış görüntü yok demektir. Bu durumların hiçbiri transferin beklediğini veya faturanın tamamlandığını kanıtlamaz.Ayrıntılar
Önbellek tarama durumu. refreshing tamamlanmış bakiyeyi koruyabilir: yaşı için checked_at kullan. Pending tamamlanmış görüntü yok demektir. Bu durumların hiçbiri transferin beklediğini veya faturanın tamamlandığını kanıtlamaz.
total_value_usddecimal string | nullher zamanGüncel USD fiyatı bulunan bakiyelerin bilgi amaçlı toplamı.
balance_statuspending | refreshing | fresh | stale | error | unknownher zamanBirleştirilmiş önbellek güncelliği; unknown temkinli yedek değerdir ve bu durumların hiçbiri fatura ödemesinin tamamlandığını kanıtlamaz.
balance_checked_attimestamp | nullher zamanToplamın temsil ettiği en eski ilgili başarılı bakiye kontrolü.
recent_payments[]object[]her zaman
Tam olarak bu cüzdana atfedilen, en yeni en fazla üç geçerli detected, confirming veya final gözlem.
statusdetected | confirming | finalher zamanGüncel geçerli gözlem durumu. Reorged, replaced ve invalid gözlemler hariç tutulur.
wallet_readinessreadiness enumher zamanYalnızca cüzdan/politika durumu; tarayıcı ön koşulları için receive_readiness kullan.
receive_readinessobject | null5.5.0+
Ortak ödeme alma kurulumu ve mağaza kabulü. Önbellek gözlemlerini kullanır; rezervasyon veya garanti değildir. Oluşturma gereksinimleri ve gerçek fatura kurunu yeniden kontrol eder.Ayrıntılar
Ortak ödeme alma kurulumu ve mağaza kabulü. Önbellek gözlemlerini kullanır; rezervasyon veya garanti değildir. Oluşturma gereksinimleri ve gerçek fatura kurunu yeniden kontrol eder.
readybooleanher zamanÖdeme alma kurulum kontrolleri geçti. Harcamaya hazır olmayı, gas'ı, bakiye yenilemeyi veya garantili gelecek teklifi açıklamaz.
invoice_creatableboolean6.0.6+Yapılandırma geçici tarayıcı uyarılarına rağmen fatura yöntemine izin verir. Para birimi fiyatlandırması oluşturma sırasında kontrol edilir. Bu ödeme doğrulaması değildir: invoice_creatable true iken ready false olabilir. Eksik cüzdanlar, devre dışı politika ve desteklenmeyen adaptörler yine güvenli biçimde başarısız olur.Ayrıntılar
Yapılandırma geçici tarayıcı uyarılarına rağmen fatura yöntemine izin verir. Para birimi fiyatlandırması oluşturma sırasında kontrol edilir. Bu ödeme doğrulaması değildir: invoice_creatable true iken ready false olabilir. Eksik cüzdanlar, devre dışı politika ve desteklenmeyen adaptörler yine güvenli biçimde başarısız olur.
issues[]object[]her zaman
Hazırsa boş; aksi halde ödeme alma uyarısı veya yapılandırma engeli. Geçici tarayıcı uyarılarını fatura kurulum hatalarından ayırmak için invoice_creatable kontrol et.Ayrıntılar
Hazırsa boş; aksi halde ödeme alma uyarısı veya yapılandırma engeli. Geçici tarayıcı uyarılarını fatura kurulum hatalarından ayırmak için invoice_creatable kontrol et.
chain_slugstringbiliniyorsaEtkilenen zinciri ve varlığı tanımlar. Lightning asset_id içermeyebilir.
asset_tickerstringbiliniyorsaEtkilenen zinciri ve varlığı tanımlar. Lightning asset_id içermeyebilir.
reason_codestringher zamanscanner_provider_quorum, scanner_not_checked, scanner_unavailable, wallet_missing, wallet_disabled, wallet_backup_required, wallet_key_unavailable, wallet_activation_required, monero_binding_unavailable, rate_unavailable, custom_rate_unavailable, lightning_unavailable, project_disabled, store_disabled, chain_disabled, asset_disabled veya asset_not_accepted.Ayrıntılar
scanner_provider_quorum, scanner_not_checked, scanner_unavailable, wallet_missing, wallet_disabled, wallet_backup_required, wallet_key_unavailable, wallet_activation_required, monero_binding_unavailable, rate_unavailable, custom_rate_unavailable, lightning_unavailable, project_disabled, store_disabled, chain_disabled, asset_disabled veya asset_not_accepted.
messagestringvarsaSatıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.Ayrıntılar
Satıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.
actionstringvarsaSatıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.Ayrıntılar
Satıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.
required_endpoint_rolestring | nullzincir üstüTercih edilen tarayıcı API rolü (eski alan). Tam uyumluluk listesi için accepted_endpoint_roles kullan. Temel düğüm sağlığı ödeme geçmişi desteğini kanıtlamaz.Ayrıntılar
Tercih edilen tarayıcı API rolü (eski alan). Tam uyumluluk listesi için accepted_endpoint_roles kullan. Temel düğüm sağlığı ödeme geçmişi desteğini kanıtlamaz.
accepted_endpoint_roles[]string[] | nullzincir üstüUyumlu API biçimleri; uç nokta geçmişi veya kapasitesi kanıtı değildir. Ham node-rpc, BTC/BCH/LTC/DOGE/DASH ve şeffaf ZEC (tam çözümlenmiş bloklar, 1–48 onay), solidified yerel TRX, algod üzerinden yerel ALGO, Octez üzerinden XTZ, SCALE meta verileriyle kesinleşmiş Asset Hub DOT ve fatura memo ID'siyle Stellar RPC üzerinden yerel XLM destekler. Budanmış veya eksik geçmiş uygun değildir. Bu ham adaptörler token altyapısı eklemez. İndeksli API'ler alternatif olmaya devam eder; aşağıdaki altyapı tablosuna bak. Karma ham/indeksli kaynaklar sınırlı aralıkları bağımsız doğrular; varsayılan, tek operatörün takma adları değil, iki bağımsız sağlayıcıdır. Temel düğüm yüksekliği, ORDnet zincir bilgisi ve EVM dışı altyapı için EVM rölesi ödeme alma kanıtı değildir. Monero yine projeye bağlı, yalnızca görüntüleme yetkili wallet-RPC gerektirir.Ayrıntılar
Uyumlu API biçimleri; uç nokta geçmişi veya kapasitesi kanıtı değildir. Ham node-rpc, BTC/BCH/LTC/DOGE/DASH ve şeffaf ZEC (tam çözümlenmiş bloklar, 1–48 onay), solidified yerel TRX, algod üzerinden yerel ALGO, Octez üzerinden XTZ, SCALE meta verileriyle kesinleşmiş Asset Hub DOT ve fatura memo ID'siyle Stellar RPC üzerinden yerel XLM destekler. Budanmış veya eksik geçmiş uygun değildir. Bu ham adaptörler token altyapısı eklemez. İndeksli API'ler alternatif olmaya devam eder; aşağıdaki altyapı tablosuna bak. Karma ham/indeksli kaynaklar sınırlı aralıkları bağımsız doğrular; varsayılan, tek operatörün takma adları değil, iki bağımsız sağlayıcıdır. Temel düğüm yüksekliği, ORDnet zincir bilgisi ve EVM dışı altyapı için EVM rölesi ödeme alma kanıtı değildir. Monero yine projeye bağlı, yalnızca görüntüleme yetkili wallet-RPC gerektirir.
healthy_endpointsintegerzincir üstüSağlıklı eşleşen uç noktalar; bağımsız sağlayıcı sayısı değildir.
usable_independent_providersintegerzincir üstüEn fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.Ayrıntılar
En fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.
required_independent_providersintegerzincir üstüEn fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.Ayrıntılar
En fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.
last_checked_attimestamp | nullzincir üstüDeğerlendirme zamanından ayrı, son eşleşen uç nokta sağlık kontrolü.
Kullanım notları
- Mağazaya özel değeri kaldırmak ve sonraki faturalar için güncel proje varsayılanını izlemek üzere {"strategy":"inherit"} kullan.
- Finalized ağlar editable false döndürür ve Ağ kesinliği kullanır; özel blok sayısı değeri kabul etmez.
- 0 değeri, ağ onayı ve zincir yeniden yapılanması koruması olmadan tespit anında kabul demektir. Yalnızca minimum_required_confirmations 0 ise kabul edilir.
- Politika değişiklikleri yalnızca yeni faturaları etkiler. Mevcut faturalar oluşturulma anında kaydedilen proje/mağaza onay politikası görüntüsünü korur.
- Her güncelleme tek varlıktır; aynı mağaza varlığındaki eş zamanlı düzenlemeleri sırala ve yenilenmiş yanıtı güncel durum olarak kullan.
Hatalar
GETProje cüzdanlarını ve bakiyelerini listele/v1/projects/{project_id}/walletsSalt okunur
Herkese açık cüzdan meta verilerini ve cüzdanın tam zincir/ağındaki kayıtlı, bakiyesi okunabilir tüm varlıkları döndürür. 30 yerel zincir altyapısının tamamı kapsanır; doğrulanmış ERC-20 ve SPL varlıkları da izlenir. Varlıklar ilk taramadan önce veya ödeme için kabul edilmese bile hemen görünür. project_enabled ödeme kabulünü; tracking_active bağımsız olarak salt okunur yenileme uygunluğunu bildirir. Monero projeye bağlı harici, yalnızca görüntüleme yetkili wallet-RPC gerektirir. Konsoldaki Bakiyeleri tara, varlık başına ilerleme/hatalarla sınırlı okumaları önceliklendirir; yalnızca tam döngüler güncel toplamları yeniler. Fatura tamamlanması bu önbellek bakiyeleriyle değil, işlem düzeyinde izleme ve onay politikasıyla belirlenir.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MERCHANT_API_TOKEN |
| Accept | önerilen | application/json |
Yol parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/projects/YOUR_PROJECT_ID/wallets" \
--header "Authorization: Bearer $WHOLLY_TOKEN"// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/projects/YOUR_PROJECT_ID/wallets", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/projects/YOUR_PROJECT_ID/wallets");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/projects/YOUR_PROJECT_ID/wallets",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [
{
"id": "55555555-5555-4555-8555-555555555555",
"project_id": "11111111-1111-4111-8111-111111111111",
"native_asset_id": "10000000-0000-4000-8000-000000000003",
"chain_slug": "ethereum",
"network": "mainnet",
"asset_symbol": "ETH",
"asset_name": "Ethereum",
"status": "active",
"label": "Primary Ethereum wallet",
"public_key": "0x…",
"primary_address": "0x…",
"derivation_scheme": "bip44",
"address_format": "eip55",
"backup_confirmed_at": "2026-08-31T17:00:00Z",
"last_secret_revealed_at": null,
"secret_reveal_count": 0,
"next_receive_index": 43,
"last_scanned_height": 23123456,
"last_scanned_at": "2026-08-31T18:05:00Z",
"last_error": null,
"balances": [
{ "wallet_id": "55555555-5555-4555-8555-555555555555", "asset_id": "10000000-0000-4000-8000-000000000003", "project_enabled": true, "tracking_active": true, "asset_kind": "native", "contract_address": null, "symbol": "ETH", "name": "Ethereum", "decimals": 18, "coingecko_id": "ethereum", "balance": "0.125", "balance_atomic": "125000000000000000", "price_usd": "4500", "value_usd": "562.50", "status": "fresh", "checked_at": "2026-08-31T18:05:00Z", "last_error": null },
{ "wallet_id": "55555555-5555-4555-8555-555555555555", "asset_id": "10000000-0000-4000-8000-000000000099", "project_enabled": false, "tracking_active": true, "asset_kind": "token", "contract_address": "0xA0b86991c6218b36c1d19d4a2e9eb0cE3606eB48", "symbol": "USDC", "name": "USDC", "decimals": 6, "coingecko_id": "usd-coin", "balance": null, "balance_atomic": null, "price_usd": "1", "value_usd": null, "status": "pending", "checked_at": null, "last_error": null }
],
"total_value_usd": "562.50",
"balance_status": "fresh",
"balance_checked_at": "2026-08-31T18:05:00Z",
"recent_payments": [
{ "invoice_public_id": "0a6a98db-d93d-48ee-8c3c-fd45f90c4a50", "chain_slug": "ethereum", "symbol": "USDC", "transaction_id": "0x…", "event_index": 0, "amount": "25", "status": "final", "confirmations": 12, "observed_at": "2026-08-31T18:04:00Z" }
],
"created_at": "2026-08-31T16:00:00Z",
"updated_at": "2026-08-31T18:05:00Z"
}
]
}Yanıt alanları
data[]object[]
public_keystring | nullher zamanHerkese açık cüzdan kimliği; kurtarma ifadesi veya özel anahtar açığa çıkarılmaz.
primary_addressstring | nullher zamanHerkese açık cüzdan kimliği; kurtarma ifadesi veya özel anahtar açığa çıkarılmaz.
backup_confirmed_attimestamp | nullher zamanOperatör kurtarma yedeğini onayladıktan sonra null değildir.
activation_requiredbooleanher zamanXRP ve Stellar ortak hesapları, operatör gösterilen adrese fon gönderene ve yapılandırılmış tarayıcı sağlayıcıları tam olarak o hesabı doğrulayana kadar kullanılamaz. Kalıcı kanıtın süresi dolmaz; canlı tarayıcı sağlığı fatura oluşturma için değil, ödeme doğrulaması için ayrı kontrol edilir.Ayrıntılar
XRP ve Stellar ortak hesapları, operatör gösterilen adrese fon gönderene ve yapılandırılmış tarayıcı sağlayıcıları tam olarak o hesabı doğrulayana kadar kullanılamaz. Kalıcı kanıtın süresi dolmaz; canlı tarayıcı sağlığı fatura oluşturma için değil, ödeme doğrulaması için ayrı kontrol edilir.
activation_verified_attimestamp|nullher zamanXRP ve Stellar ortak hesapları, operatör gösterilen adrese fon gönderene ve yapılandırılmış tarayıcı sağlayıcıları tam olarak o hesabı doğrulayana kadar kullanılamaz. Kalıcı kanıtın süresi dolmaz; canlı tarayıcı sağlığı fatura oluşturma için değil, ödeme doğrulaması için ayrı kontrol edilir.Ayrıntılar
XRP ve Stellar ortak hesapları, operatör gösterilen adrese fon gönderene ve yapılandırılmış tarayıcı sağlayıcıları tam olarak o hesabı doğrulayana kadar kullanılamaz. Kalıcı kanıtın süresi dolmaz; canlı tarayıcı sağlığı fatura oluşturma için değil, ödeme doğrulaması için ayrı kontrol edilir.
receive_readinessobject | null5.5.0+
Cüzdan listelerine dahildir: proje ödeme alma kurulumu ve zincir tarayıcısı ön koşulları. Bakiyelerden, token gas'ından ve gönderime hazır olma durumundan ayrıdır. Diğer cüzdan yanıtlarında null kalabilir.Ayrıntılar
Cüzdan listelerine dahildir: proje ödeme alma kurulumu ve zincir tarayıcısı ön koşulları. Bakiyelerden, token gas'ından ve gönderime hazır olma durumundan ayrıdır. Diğer cüzdan yanıtlarında null kalabilir.
readybooleanher zamanÖdeme alma kurulum kontrolleri geçti. Harcamaya hazır olmayı, gas'ı, bakiye yenilemeyi veya garantili gelecek teklifi açıklamaz.
invoice_creatableboolean6.0.6+Yapılandırma geçici tarayıcı uyarılarına rağmen fatura yöntemine izin verir. Para birimi fiyatlandırması oluşturma sırasında kontrol edilir. Bu ödeme doğrulaması değildir: invoice_creatable true iken ready false olabilir. Eksik cüzdanlar, devre dışı politika ve desteklenmeyen adaptörler yine güvenli biçimde başarısız olur.Ayrıntılar
Yapılandırma geçici tarayıcı uyarılarına rağmen fatura yöntemine izin verir. Para birimi fiyatlandırması oluşturma sırasında kontrol edilir. Bu ödeme doğrulaması değildir: invoice_creatable true iken ready false olabilir. Eksik cüzdanlar, devre dışı politika ve desteklenmeyen adaptörler yine güvenli biçimde başarısız olur.
issues[]object[]her zaman
Hazırsa boş; aksi halde ödeme alma uyarısı veya yapılandırma engeli. Geçici tarayıcı uyarılarını fatura kurulum hatalarından ayırmak için invoice_creatable kontrol et.Ayrıntılar
Hazırsa boş; aksi halde ödeme alma uyarısı veya yapılandırma engeli. Geçici tarayıcı uyarılarını fatura kurulum hatalarından ayırmak için invoice_creatable kontrol et.
chain_slugstringbiliniyorsaEtkilenen zinciri ve varlığı tanımlar. Lightning asset_id içermeyebilir.
asset_tickerstringbiliniyorsaEtkilenen zinciri ve varlığı tanımlar. Lightning asset_id içermeyebilir.
reason_codestringher zamanscanner_provider_quorum, scanner_not_checked, scanner_unavailable, wallet_missing, wallet_disabled, wallet_backup_required, wallet_key_unavailable, wallet_activation_required, monero_binding_unavailable, rate_unavailable, custom_rate_unavailable, lightning_unavailable, project_disabled, store_disabled, chain_disabled, asset_disabled veya asset_not_accepted.Ayrıntılar
scanner_provider_quorum, scanner_not_checked, scanner_unavailable, wallet_missing, wallet_disabled, wallet_backup_required, wallet_key_unavailable, wallet_activation_required, monero_binding_unavailable, rate_unavailable, custom_rate_unavailable, lightning_unavailable, project_disabled, store_disabled, chain_disabled, asset_disabled veya asset_not_accepted.
messagestringvarsaSatıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.Ayrıntılar
Satıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.
actionstringvarsaSatıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.Ayrıntılar
Satıcıya yönelik açıklama ve eylem tanımlayıcısı: chain_connections, wallets, rates, payment_methods, project_settings veya store_settings. Kimlik bilgisi veya özel sağlayıcı URL'si içermez.
required_endpoint_rolestring | nullzincir üstüTercih edilen tarayıcı API rolü (eski alan). Tam uyumluluk listesi için accepted_endpoint_roles kullan. Temel düğüm sağlığı ödeme geçmişi desteğini kanıtlamaz.Ayrıntılar
Tercih edilen tarayıcı API rolü (eski alan). Tam uyumluluk listesi için accepted_endpoint_roles kullan. Temel düğüm sağlığı ödeme geçmişi desteğini kanıtlamaz.
accepted_endpoint_roles[]string[] | nullzincir üstüUyumlu API biçimleri; uç nokta geçmişi veya kapasitesi kanıtı değildir. Ham node-rpc, BTC/BCH/LTC/DOGE/DASH ve şeffaf ZEC (tam çözümlenmiş bloklar, 1–48 onay), solidified yerel TRX, algod üzerinden yerel ALGO, Octez üzerinden XTZ, SCALE meta verileriyle kesinleşmiş Asset Hub DOT ve fatura memo ID'siyle Stellar RPC üzerinden yerel XLM destekler. Budanmış veya eksik geçmiş uygun değildir. Bu ham adaptörler token altyapısı eklemez. İndeksli API'ler alternatif olmaya devam eder; aşağıdaki altyapı tablosuna bak. Karma ham/indeksli kaynaklar sınırlı aralıkları bağımsız doğrular; varsayılan, tek operatörün takma adları değil, iki bağımsız sağlayıcıdır. Temel düğüm yüksekliği, ORDnet zincir bilgisi ve EVM dışı altyapı için EVM rölesi ödeme alma kanıtı değildir. Monero yine projeye bağlı, yalnızca görüntüleme yetkili wallet-RPC gerektirir.Ayrıntılar
Uyumlu API biçimleri; uç nokta geçmişi veya kapasitesi kanıtı değildir. Ham node-rpc, BTC/BCH/LTC/DOGE/DASH ve şeffaf ZEC (tam çözümlenmiş bloklar, 1–48 onay), solidified yerel TRX, algod üzerinden yerel ALGO, Octez üzerinden XTZ, SCALE meta verileriyle kesinleşmiş Asset Hub DOT ve fatura memo ID'siyle Stellar RPC üzerinden yerel XLM destekler. Budanmış veya eksik geçmiş uygun değildir. Bu ham adaptörler token altyapısı eklemez. İndeksli API'ler alternatif olmaya devam eder; aşağıdaki altyapı tablosuna bak. Karma ham/indeksli kaynaklar sınırlı aralıkları bağımsız doğrular; varsayılan, tek operatörün takma adları değil, iki bağımsız sağlayıcıdır. Temel düğüm yüksekliği, ORDnet zincir bilgisi ve EVM dışı altyapı için EVM rölesi ödeme alma kanıtı değildir. Monero yine projeye bağlı, yalnızca görüntüleme yetkili wallet-RPC gerektirir.
healthy_endpointsintegerzincir üstüSağlıklı eşleşen uç noktalar; bağımsız sağlayıcı sayısı değildir.
usable_independent_providersintegerzincir üstüEn fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.Ayrıntılar
En fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.
required_independent_providersintegerzincir üstüEn fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.Ayrıntılar
En fazla iki kullanılabilir doğrulama yuvası. required_independent_providers zincir ayarıdır: varsayılan 2, yöneticinin açık seçimiyle 1. İki sağlayıcı modunda farklı sağlayıcı anahtarları VE ana makineler gerekir. Devre dışı, eski (on dakikadan fazla) veya bekleme süresindeki kaynaklar yuva doldurmaz. Lightning kendi bağlantı kurallarını kullanır.
last_checked_attimestamp | nullzincir üstüDeğerlendirme zamanından ayrı, son eşleşen uç nokta sağlık kontrolü.
monero_wallet_rpcMoneroWalletRpcBinding | nullher zamanMonero için hassas bilgileri ayıklanmış harici, yalnızca görüntüleme yetkili wallet-RPC bağlantı durumu. Uç nokta, kimlik doğrulama modu, account-0 birincil adresi, teknik kanıt işaretleri/yükseklikleri ve operatör beyanı zaman damgaları içerir; kimlik bilgileri, cüzdan anahtarları ve cüzdan dosyaları asla serileştirilmez.Ayrıntılar
Monero için hassas bilgileri ayıklanmış harici, yalnızca görüntüleme yetkili wallet-RPC bağlantı durumu. Uç nokta, kimlik doğrulama modu, account-0 birincil adresi, teknik kanıt işaretleri/yükseklikleri ve operatör beyanı zaman damgaları içerir; kimlik bilgileri, cüzdan anahtarları ve cüzdan dosyaları asla serileştirilmez.
balances[]object[]her zaman
30 yerel zincir altyapısının her biri ve doğrulanmış ERC-20 ile SPL varlıkları için önbellekteki bakiyeler. Monero için yapılandırılmış harici, yalnızca görüntüleme yetkili wallet-RPC gerekir.Ayrıntılar
30 yerel zincir altyapısının her biri ve doğrulanmış ERC-20 ile SPL varlıkları için önbellekteki bakiyeler. Monero için yapılandırılmış harici, yalnızca görüntüleme yetkili wallet-RPC gerekir.
project_enabledbooleanher zamanBu varlığın şu anda projenin varlık politikasıyla etkin olup olmadığı.
active_store_countintegerher zamanŞu anda bu varlığı seçen etkin mağaza sayısı. Bu, kabul durumunun görünümüdür; salt okunur bakiye takibi bağımsız kalır.
active_store_ids[]UUID[]her zamanBu projede varlığı şu anda kabul eden etkin mağazalar. Başka API isteği olmadan tam yerel mağaza filtrelemesi sağlar.
tracking_activebooleanher zamanBu okunabilir cüzdan ve kayıtlı aynı zincir varlığının arka plan bakiye yenilemesine uygun olup olmadığı. Proje ve ödeme yöntemi kabul anahtarları salt okunur takibi duraklatmaz.Ayrıntılar
Bu okunabilir cüzdan ve kayıtlı aynı zincir varlığının arka plan bakiye yenilemesine uygun olup olmadığı. Proje ve ödeme yöntemi kabul anahtarları salt okunur takibi duraklatmaz.
balancedecimal string|nullher zamanCüzdanın birincil adresi ve oluşturulmuş fatura adresleri genelindeki tam gösterim ve atomik bakiye. Tam değer bulunamıyorsa null.
balance_atomicinteger string|nullher zamanCüzdanın birincil adresi ve oluşturulmuş fatura adresleri genelindeki tam gösterim ve atomik bakiye. Tam değer bulunamıyorsa null.
price_usddecimal string | nullher zamanDeğerleme için kullanılan bilgi amaçlı önbellek USD birim fiyatı.
statuspending | refreshing | fresh | stale | errorher zamanÖnbellek tarama durumu. refreshing tamamlanmış bakiyeyi koruyabilir: yaşı için checked_at kullan. Pending tamamlanmış görüntü yok demektir. Bu durumların hiçbiri transferin beklediğini veya faturanın tamamlandığını kanıtlamaz.Ayrıntılar
Önbellek tarama durumu. refreshing tamamlanmış bakiyeyi koruyabilir: yaşı için checked_at kullan. Pending tamamlanmış görüntü yok demektir. Bu durumların hiçbiri transferin beklediğini veya faturanın tamamlandığını kanıtlamaz.
total_value_usddecimal string | nullher zamanGüncel USD fiyatı bulunan bakiyelerin bilgi amaçlı toplamı.
balance_statuspending | refreshing | fresh | stale | error | unknownher zamanBirleştirilmiş önbellek güncelliği; unknown temkinli yedek değerdir ve bu durumların hiçbiri fatura ödemesinin tamamlandığını kanıtlamaz.
balance_checked_attimestamp | nullher zamanToplamın temsil ettiği en eski ilgili başarılı bakiye kontrolü.
recent_payments[]object[]her zaman
Tam olarak bu cüzdana atfedilen, en yeni en fazla üç geçerli detected, confirming veya final gözlem.
statusdetected | confirming | finalher zamanGüncel geçerli gözlem durumu. Reorged, replaced ve invalid gözlemler hariç tutulur.
Kullanım notları
- Bu bearer rotası asla kurtarma ifadesi, özel anahtar, şifrelenmiş sır veya harcama yöntemi döndürmez.
- Yeni kayıtlı aynı zincir varlığı ilk tam taramadan önce null bakiyeler ve pending durumuyla döndürülür; uydurma sıfır olarak asla raporlanmaz.
- Projeyi, ödeme kabulü için cüzdanı, yerel altyapıyı veya tek varlığı kapatmak salt okunur bakiye takibini durdurmaz: birincil adresi olan etkin ve devre dışı cüzdanlar kayıtlı, desteklenen aynı zincir varlıklarını yenilemeye devam eder. Pending ve error cüzdanlar taranmaz.
- project_enabled yalnızca projenin varlık kabul politikasını bildirir ve tracking_active true kalırken false olabilir.
- balance ve balance_atomic tam dizelerdir; price_usd, value_usd ve total_value_usd bilgi amaçlıdır ve null olabilir. Güncel bakiye durumu güncel piyasa fiyatını garanti etmez.
- Değerleme en fazla iki saatlik CoinGecko fiyatlarını tercih eder. Yerel coin'ler ve doğrulanmış kanonik USDC/USDT, önce birincil sağlayıcı olmak üzere etkin Kraken/Binance kaynaklarının en fazla beş dakikalık USD tekliflerine geçebilir. Dolar sabitliği varsayılmaz, özel token fiyatı yalnızca sembolden alınmaz; projenin sabit/DEX fiyatları ayrı kalır. Fatura teklifleri değişmez.
- Pending durumunda tam görüntü yoktur. Refreshing son tamamlanmış tutarı ve checked_at değerini korur; blokzincir transferi bekliyor demek değildir. Stale/error tutarlar da eski değerleri koruyabilir. Kullanılamayan önbelleği asla sıfır veya eksik ödeme sayma. Rutin EVM/Solana yenilemeleri denetimler arasında yakın zamanda kontrol edilen boş adresleri en fazla 30 dakika yeniden kullanırken, fonlanan, yeni ve değişen adresleri yeniden kontrol eder. Konsolda açıkça Bakiyeleri tara istemek tam tarama yapar.
- recent_payments cüzdan başına üç gözlemle sınırlıdır ve geçersiz kılınmış geçmişi içermez.
Hatalar
POSTFatura oluştur/v1/projects/{project_id}/stores/{store_id}/invoicesOkuma ve yazma
Cüzdan hedefleri, güncel tam teklifler, denetim geçmişi ve bildirim gönderim kuyruğu kayıtlarıyla faturayı atomik oluşturur. Aynı kimlik bilgisi ve Idempotency-Key ile birebir aynı ham gövde baytlarını tekrar göndermek ilk faturayı döndürür.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MERCHANT_API_TOKEN |
| Idempotency-Key | zorunlu | Boşluksuz, benzersiz 1–128 görünür ASCII karakteri. |
| Content-Type | önerilen | application/json. Mevcut ham gövde işleyicisi medya türünü zorunlu tutmadan JSON ayrıştırır. |
| Accept | önerilen | application/json |
Yol parametreleri
project_idUUIDzorunluProje API kimliğini Proje → Ayarlar → API kimlikleri bölümünden kopyala. Kimlik bilgisine atanmış olmalıdır; okunabilir proje tanımlayıcısı kabul edilmez.
store_idUUIDzorunluMağaza API kimliğini Proje → Mağazalar → mağaza seç → Temel → API kimlikleri bölümünden kopyala. Varsayılan mağaza için bile zorunludur; mağaza etkin ve project_id'ye ait olmalıdır.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new invoice.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/invoices" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: order-1042-attempt-1' \
--header 'Content-Type: application/json' \
--data-raw '{
"amount": "49.90",
"currency": "USD"
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new invoice.
const body = `{
"amount": "49.90",
"currency": "USD"
}`;
const response = await fetch("https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/invoices", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "order-1042-attempt-1",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new invoice.
$body = <<<'JSON'
{
"amount": "49.90",
"currency": "USD"
}
JSON;
$ch = curl_init("https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/invoices");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: order-1042-attempt-1", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new invoice.
headers = {
"Idempotency-Key": "order-1042-attempt-1",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"amount": "49.90",
"currency": "USD"
}""".encode("utf-8")
request = Request("https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/invoices",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response)): "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new invoice.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/invoices" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: order-1042-attempt-1' \
--header 'Content-Type: application/json' \
--data-raw '{
"payment_methods": [
{
"chain_slug": "bitcoin",
"asset_tickers": [
"BTC"
]
}
],
"amount": "49.90",
"currency": "USD",
"order_id": "order-1042",
"email": "ada@example.com",
"description": "Annual plan",
"underpayment_tolerance_percent": "1",
"ipn_url": "https://merchant.example/wholly/ipn",
"redirect_url": "https://merchant.example/orders/1042",
"cancel_url": "https://merchant.example/cart",
"redirect_automatically": true,
"language": "en",
"metadata": {
"cart_id": "cart-681",
"firstname": "Ada",
"lastname": "Lovelace",
"street": "12 Example Street",
"street2": "Suite 2",
"zip": "10115",
"city": "Berlin",
"country": "Germany",
"countryiso2": "DE",
"company": "Example GmbH",
"vatid": "DE123456789"
},
"exchange_rate_spread_percent": "0.5",
"checkout_appearance": {
"title": "Complete your order",
"intro": "Thanks for choosing our annual plan.",
"outro": "Questions? https://merchant.example/help",
"intro_font_size": 18,
"outro_font_size": 14,
"theme": "light",
"accent_color": "#1768CE",
"messages": {
"en": {
"paid": "Your order is ready."
}
}
}
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new invoice.
const body = `{
"payment_methods": [
{
"chain_slug": "bitcoin",
"asset_tickers": [
"BTC"
]
}
],
"amount": "49.90",
"currency": "USD",
"order_id": "order-1042",
"email": "ada@example.com",
"description": "Annual plan",
"underpayment_tolerance_percent": "1",
"ipn_url": "https://merchant.example/wholly/ipn",
"redirect_url": "https://merchant.example/orders/1042",
"cancel_url": "https://merchant.example/cart",
"redirect_automatically": true,
"language": "en",
"metadata": {
"cart_id": "cart-681",
"firstname": "Ada",
"lastname": "Lovelace",
"street": "12 Example Street",
"street2": "Suite 2",
"zip": "10115",
"city": "Berlin",
"country": "Germany",
"countryiso2": "DE",
"company": "Example GmbH",
"vatid": "DE123456789"
},
"exchange_rate_spread_percent": "0.5",
"checkout_appearance": {
"title": "Complete your order",
"intro": "Thanks for choosing our annual plan.",
"outro": "Questions? https://merchant.example/help",
"intro_font_size": 18,
"outro_font_size": 14,
"theme": "light",
"accent_color": "#1768CE",
"messages": {
"en": {
"paid": "Your order is ready."
}
}
}
}`;
const response = await fetch("https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/invoices", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "order-1042-attempt-1",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new invoice.
$body = <<<'JSON'
{
"payment_methods": [
{
"chain_slug": "bitcoin",
"asset_tickers": [
"BTC"
]
}
],
"amount": "49.90",
"currency": "USD",
"order_id": "order-1042",
"email": "ada@example.com",
"description": "Annual plan",
"underpayment_tolerance_percent": "1",
"ipn_url": "https://merchant.example/wholly/ipn",
"redirect_url": "https://merchant.example/orders/1042",
"cancel_url": "https://merchant.example/cart",
"redirect_automatically": true,
"language": "en",
"metadata": {
"cart_id": "cart-681",
"firstname": "Ada",
"lastname": "Lovelace",
"street": "12 Example Street",
"street2": "Suite 2",
"zip": "10115",
"city": "Berlin",
"country": "Germany",
"countryiso2": "DE",
"company": "Example GmbH",
"vatid": "DE123456789"
},
"exchange_rate_spread_percent": "0.5",
"checkout_appearance": {
"title": "Complete your order",
"intro": "Thanks for choosing our annual plan.",
"outro": "Questions? https://merchant.example/help",
"intro_font_size": 18,
"outro_font_size": 14,
"theme": "light",
"accent_color": "#1768CE",
"messages": {
"en": {
"paid": "Your order is ready."
}
}
}
}
JSON;
$ch = curl_init("https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/invoices");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: order-1042-attempt-1", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new invoice.
headers = {
"Idempotency-Key": "order-1042-attempt-1",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"payment_methods": [
{
"chain_slug": "bitcoin",
"asset_tickers": [
"BTC"
]
}
],
"amount": "49.90",
"currency": "USD",
"order_id": "order-1042",
"email": "ada@example.com",
"description": "Annual plan",
"underpayment_tolerance_percent": "1",
"ipn_url": "https://merchant.example/wholly/ipn",
"redirect_url": "https://merchant.example/orders/1042",
"cancel_url": "https://merchant.example/cart",
"redirect_automatically": true,
"language": "en",
"metadata": {
"cart_id": "cart-681",
"firstname": "Ada",
"lastname": "Lovelace",
"street": "12 Example Street",
"street2": "Suite 2",
"zip": "10115",
"city": "Berlin",
"country": "Germany",
"countryiso2": "DE",
"company": "Example GmbH",
"vatid": "DE123456789"
},
"exchange_rate_spread_percent": "0.5",
"checkout_appearance": {
"title": "Complete your order",
"intro": "Thanks for choosing our annual plan.",
"outro": "Questions? https://merchant.example/help",
"intro_font_size": 18,
"outro_font_size": 14,
"theme": "light",
"accent_color": "#1768CE",
"messages": {
"en": {
"paid": "Your order is ready."
}
}
}
}""".encode("utf-8")
request = Request("https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/invoices",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))İstek gövdesi
amountstringzorunluİşaretsiz düz ondalık sayı dizesi; işaret veya üs yok, en fazla 48 tamsayı ve 30 ondalık basamak. Varsayılan olarak pozitif olmalıdır. Mağaza, Mağazalar → Fatura bölümünde sıfır tutarlı faturalara izin verebilir; sıfır toplamlar fon almadan, adres ayırmadan veya işlem ücreti olmadan tamamlanır.Ayrıntılar
İşaretsiz düz ondalık sayı dizesi; işaret veya üs yok, en fazla 48 tamsayı ve 30 ondalık basamak. Varsayılan olarak pozitif olmalıdır. Mağaza, Mağazalar → Fatura bölümünde sıfır tutarlı faturalara izin verebilir; sıfır toplamlar fon almadan, adres ayırmadan veya işlem ücreti olmadan tamamlanır.
currencystring | nullisteğe bağlıDesteklenen üç harfli itibari para birimi; büyük harfe normalleştirilir. Atlanırsa veya null ise mağazanın fatura para birimini devralır. Oluşturma ayrıca bağımsız olarak kullanılabilir faturalandırma dönüşüm kuru gerektirir.Ayrıntılar
Desteklenen üç harfli itibari para birimi; büyük harfe normalleştirilir. Atlanırsa veya null ise mağazanın fatura para birimini devralır. Oluşturma ayrıca bağımsız olarak kullanılabilir faturalandırma dönüşüm kuru gerektirir.
payment_methods[]object[] | nullisteğe bağlı
Bu fatura için mağazada etkin yöntemleri seç. Merchant 5.4.0+: bilinmeyen/etkin olmayan/kabul edilmeyen seçimler yok sayılır; hiçbiri eşleşmezse mağaza varsayılanları kullanılır. Atlanması/null da mağaza varsayılanını kullanır; [] geçersizdir. Yöntemi asla etkinleştirmez veya mağaza ayarını değiştirmez. Aşağıdaki seçim şemasına bak.Ayrıntılar
Bu fatura için mağazada etkin yöntemleri seç. Merchant 5.4.0+: bilinmeyen/etkin olmayan/kabul edilmeyen seçimler yok sayılır; hiçbiri eşleşmezse mağaza varsayılanları kullanılır. Atlanması/null da mağaza varsayılanını kullanır; [] geçersizdir. Yöntemi asla etkinleştirmez veya mağaza ayarını değiştirmez. Aşağıdaki seçim şemasına bak.
chain_slugstringzorunluchain_slug değerini Proje → Mağazalar → Ödeme yöntemleri bölümünden kopyala veya GET /v1/projects/{project_id}/stores/{store_id}/payment-assets yanıtından oku; ör. ethereum, base veya bitcoin. Zincir/ödeme altyapısı çifti yalnızca bir kez bulunabilir.Ayrıntılar
chain_slug değerini Proje → Mağazalar → Ödeme yöntemleri bölümünden kopyala veya GET /v1/projects/{project_id}/stores/{store_id}/payment-assets yanıtından oku; ör. ethereum, base veya bitcoin. Zincir/ödeme altyapısı çifti yalnızca bir kez bulunabilir.
asset_ids[]UUID[] | nullisteğe bağlıSözleşme adresleri veya fatura ödeme yöntemi kimlikleri değil, zincir üstü asset.id UUID'leri. Bunu VEYA asset_tickers kullan. Bu zincirde etkin kabul edilen tüm varlıklar için iki seçiciyi de atla. [] ve yinelenen/nil kimlikler geçersizdir. 5.4.0+'da bu mağazada bu zincir için etkin/kabul edilen olmayan kimlikler yok sayılır; tamamen eşleşmeyen seçim mağaza varsayılanını kullanır.Ayrıntılar
Sözleşme adresleri veya fatura ödeme yöntemi kimlikleri değil, zincir üstü asset.id UUID'leri. Bunu VEYA asset_tickers kullan. Bu zincirde etkin kabul edilen tüm varlıklar için iki seçiciyi de atla. [] ve yinelenen/nil kimlikler geçersizdir. 5.4.0+'da bu mağazada bu zincir için etkin/kabul edilen olmayan kimlikler yok sayılır; tamamen eşleşmeyen seçim mağaza varsayılanını kullanır.
asset_tickers[]string[] | nullisteğe bağlıMerchant 5.3.0+. chain_slug ve bu mağaza kapsamındaki BTC, USDC veya PEPE gibi semboller. 1–64 benzersiz sembol; kenar boşlukları temizlenir ve büyük/küçük harf duyarsızdır; 1–40 ASCII harf/rakam/nokta/alt çizgi/tire. Bunu VEYA asset_ids kullan. 5.4.0+'da bilinmeyen/etkin olmayan/kabul edilmeyen semboller yok sayılır. Belirsiz kabul edilen semboller yine hata verir: asset_ids kullan. Seçili etkin yöntemler geçerli cüzdan ve fiyatlandırma gerektirir; geçici zincir üstü tarayıcı kesintileri 6.0.6'dan itibaren oluşturmayı engellemez. Lightning isteğe bağlı olarak yalnızca BTC kabul eder.Ayrıntılar
Merchant 5.3.0+. chain_slug ve bu mağaza kapsamındaki BTC, USDC veya PEPE gibi semboller. 1–64 benzersiz sembol; kenar boşlukları temizlenir ve büyük/küçük harf duyarsızdır; 1–40 ASCII harf/rakam/nokta/alt çizgi/tire. Bunu VEYA asset_ids kullan. 5.4.0+'da bilinmeyen/etkin olmayan/kabul edilmeyen semboller yok sayılır. Belirsiz kabul edilen semboller yine hata verir: asset_ids kullan. Seçili etkin yöntemler geçerli cüzdan ve fiyatlandırma gerektirir; geçici zincir üstü tarayıcı kesintileri 6.0.6'dan itibaren oluşturmayı engellemez. Lightning isteğe bağlı olarak yalnızca BTC kabul eder.
payment_railonchain | lightningisteğe bağlıVarsayılan onchain. Bitcoin Lightning seçmek için asset_ids olmadan {chain_slug: bitcoin, payment_rail: lightning} kullan; asset_tickers isteğe bağlı [BTC] olabilir. Zincir üstü Bitcoin, Lightning'i içermez. Mağazanın Lightning bağlantısı zaten etkin ve hazır olmalıdır.Ayrıntılar
Varsayılan onchain. Bitcoin Lightning seçmek için asset_ids olmadan {chain_slug: bitcoin, payment_rail: lightning} kullan; asset_tickers isteğe bağlı [BTC] olabilir. Zincir üstü Bitcoin, Lightning'i içermez. Mağazanın Lightning bağlantısı zaten etkin ve hazır olmalıdır.
order_idstring | nullisteğe bağlıSatıcı sipariş referansı; kenar boşlukları temizlendikten sonra 1–128 karakter; kontrol karakterleri reddedilir.
emailstring | nullisteğe bağlıYalnızca satıcıya açık müşteri e-postası; en fazla 254 karakterli pratik ASCII adrese normalleştirilir. Atlanırsa veya null ise e-posta saklanmaz.
descriptionstring | nullisteğe bağlıMüşteriye görünen açıklama; 1–500 karakter; satır sonları ve sekmeler kabul edilir.
expires_in_secondsinteger | nullisteğe bağlıFatura teklif süresi 300 ile 86.400 saniye arası; atlanırsa veya null ise mağaza politikasını devralır.
exchange_rate_spread_percentdecimal string | nullisteğe bağlı0–100 arası, en fazla iki ondalık basamaklı teklif fiyat marjı. Atlanırsa veya null ise mağaza varsayılanını devralır; "0" bu fatura için kapatır. Yukarı yuvarlamadan önce uygulanır ve sonra kilitlenir. Faturanın itibari para tutarını veya işlem ücreti temelini değiştirmez.Ayrıntılar
0–100 arası, en fazla iki ondalık basamaklı teklif fiyat marjı. Atlanırsa veya null ise mağaza varsayılanını devralır; "0" bu fatura için kapatır. Yukarı yuvarlamadan önce uygulanır ve sonra kilitlenir. Faturanın itibari para tutarını veya işlem ücreti temelini değiştirmez.
underpayment_tolerance_percentdecimal string | nullisteğe bağlı0–99.99 arası, en fazla iki ondalık basamaklı kabul edilen eksik ödeme oranı. Atlanırsa veya null ise mağaza varsayılanını devralır.
ipn_urlstring | nullisteğe bağlıEn fazla 2.048 bayt, kimlik bilgisi veya fragment içermeyen herkese açık HTTPS geri çağrısı. Mağaza varsayılanını geçersiz kılar; null/atlanması varsayılanı devralır.
redirect_urlstring | nullisteğe bağlıÖdeme tamamlandıktan sonra kullanılan, en fazla 2.048 bayt ve gömülü kimlik bilgisi içermeyen HTTPS başarı URL'si. Atlanırsa veya null ise mağaza varsayılanını devralır; onu temizleyemez.
cancel_urlstring | nullisteğe bağlıÖdeme sayfası başarılı ödeme olmadan sona erdiğinde kullanılan HTTPS dönüş URL'si. Atlanırsa veya null ise mağaza varsayılanını devralır; onu temizleyemez.
redirect_automaticallyboolean | nullisteğe bağlıAtlanırsa veya null ise mağaza politikasını devralır. true, geçerli redirect_url gerektirir.
languagestring | nullisteğe bağlıMüşteri dili: en, de, es, pt-BR, it, ru, zh-CN, fr, ko veya ja. pt Brezilya Portekizcesi, zh Basitleştirilmiş Çince demektir. de-DE gibi desteklenen bölgesel etiketler listelenen dile normalleştirilir. Atlanırsa veya null ise mağaza dilini devralır. Konsol dili ayrıdır.Ayrıntılar
Müşteri dili: en, de, es, pt-BR, it, ru, zh-CN, fr, ko veya ja. pt Brezilya Portekizcesi, zh Basitleştirilmiş Çince demektir. de-DE gibi desteklenen bölgesel etiketler listelenen dile normalleştirilir. Atlanırsa veya null ise mağaza dilini devralır. Konsol dili ayrıdır.
checkout_appearanceobject | nullisteğe bağlı
Bu fatura için kısmi görünüm ayarları. Atlanması/null mağazanın güncel tasarımını izler. {} dahil bir nesne, çözümlenen tasarımı ve görselleri oluşturma anında sabitler. Aşağıdaki özel ayar şemasına bak; finansal ayar, HTML, CSS, JavaScript veya uzak görsel URL'si yok.Ayrıntılar
Bu fatura için kısmi görünüm ayarları. Atlanması/null mağazanın güncel tasarımını izler. {} dahil bir nesne, çözümlenen tasarımı ve görselleri oluşturma anında sabitler. Aşağıdaki özel ayar şemasına bak; finansal ayar, HTML, CSS, JavaScript veya uzak görsel URL'si yok.
inherit_default_storebooleanisteğe bağlıtrue, temel olarak projenin varsayılan mağaza tasarımını seçer; aksi halde hedef mağazanın geçerli tasarımı kullanılır. Özel ayarlar ardından uygulanıp bağımsız kaydedilir; çözümlenmiş fatura işareti false olur.Ayrıntılar
true, temel olarak projenin varsayılan mağaza tasarımını seçer; aksi halde hedef mağazanın geçerli tasarımı kullanılır. Özel ayarlar ardından uygulanıp bağımsız kaydedilir; çözümlenmiş fatura işareti false olur.
titlestringisteğe bağlıÖdeme sayfası başlığı; en fazla 120 karakter. Boşsa standart başlık kullanılır.
introstringisteğe bağlıDüz metin; her biri en fazla 2.000 karakter. Giriş her durumda üstte, Çıkış altta görünür. Satır sonları korunur; güvenli metin URL'leri bağlantıya dönüşür. Boş dize temizler. Eski customer_message, intro takma adı olarak kabul edilir; ikisini birlikte gönderme.Ayrıntılar
Düz metin; her biri en fazla 2.000 karakter. Giriş her durumda üstte, Çıkış altta görünür. Satır sonları korunur; güvenli metin URL'leri bağlantıya dönüşür. Boş dize temizler. Eski customer_message, intro takma adı olarak kabul edilir; ikisini birlikte gönderme.
outrostringisteğe bağlıDüz metin; her biri en fazla 2.000 karakter. Giriş her durumda üstte, Çıkış altta görünür. Satır sonları korunur; güvenli metin URL'leri bağlantıya dönüşür. Boş dize temizler. Eski customer_message, intro takma adı olarak kabul edilir; ikisini birlikte gönderme.Ayrıntılar
Düz metin; her biri en fazla 2.000 karakter. Giriş her durumda üstte, Çıkış altta görünür. Satır sonları korunur; güvenli metin URL'leri bağlantıya dönüşür. Boş dize temizler. Eski customer_message, intro takma adı olarak kabul edilir; ikisini birlikte gönderme.
intro_font_sizeintegeristeğe bağlıPiksel: 12, 14, 16, 18, 20 veya 24. Farklı devralınmadıkça varsayılan 16.
outro_font_sizeintegeristeğe bağlıPiksel: 12, 14, 16, 18, 20 veya 24. Farklı devralınmadıkça varsayılan 16.
accent_colorstringisteğe bağlı#RRGGBB. Otomatik renkler için arka plan, kart ve düğme boş olabilir. Metin kontrastı otomatiktir.
background_colorstringisteğe bağlı#RRGGBB. Otomatik renkler için arka plan, kart ve düğme boş olabilir. Metin kontrastı otomatiktir.
card_colorstringisteğe bağlı#RRGGBB. Otomatik renkler için arka plan, kart ve düğme boş olabilir. Metin kontrastı otomatiktir.
button_colorstringisteğe bağlı#RRGGBB. Otomatik renkler için arka plan, kart ve düğme boş olabilir. Metin kontrastı otomatiktir.
imagesobjectisteğe bağlı
Anahtarlar: logo_light, logo_dark, favicon. Atlanan anahtar temel görseli korur; null kaldırır. {store_id: UUID, kind?: logo_light|logo_dark|favicon} nesnesi AYNI projedeki o mağazanın geçerli yüklenmiş görselini kullanır. kind varsayılanı hedef anahtardır. Önce Mağaza → Ödeme sayfası bölümünde yükle; Mağaza API kimliğini Temel → API kimlikleri bölümünden kopyala. Eksik görseller veya farklı proje kimlikleri 400 döndürür. Harici URL veya görsel verisi kabul edilmez.Ayrıntılar
Anahtarlar: logo_light, logo_dark, favicon. Atlanan anahtar temel görseli korur; null kaldırır. {store_id: UUID, kind?: logo_light|logo_dark|favicon} nesnesi AYNI projedeki o mağazanın geçerli yüklenmiş görselini kullanır. kind varsayılanı hedef anahtardır. Önce Mağaza → Ödeme sayfası bölümünde yükle; Mağaza API kimliğini Temel → API kimlikleri bölümünden kopyala. Eksik görseller veya farklı proje kimlikleri 400 döndürür. Harici URL veya görsel verisi kabul edilmez.
logo_lightobject | nullisteğe bağlı
logo_darkobject | nullisteğe bağlı
show_order_idbooleanisteğe bağlıBaşlığın altında sipariş kimliği ayrıntılarını ve düz metin açıklamayı göster. details_expanded başlangıçta sipariş kimliği ayrıntılarını açar. Yalnızca görünümü etkiler; verileri gizlemez.
show_descriptionbooleanisteğe bağlıBaşlığın altında sipariş kimliği ayrıntılarını ve düz metin açıklamayı göster. details_expanded başlangıçta sipariş kimliği ayrıntılarını açar. Yalnızca görünümü etkiler; verileri gizlemez.
details_expandedbooleanisteğe bağlıBaşlığın altında sipariş kimliği ayrıntılarını ve düz metin açıklamayı göster. details_expanded başlangıçta sipariş kimliği ayrıntılarını açar. Yalnızca görünümü etkiler; verileri gizlemez.
show_project_namebooleanisteğe bağlıMerchant 5.6.0+: müşteri ödeme sayfası başlığındaki her adı göster veya gizle. İkisi de varsayılan true. Mağaza → Ödeme sayfası bölümünde de bulunur; diğer görünüm ayarları gibi devralınır ve fatura görüntüsüne kaydedilir. Yalnızca görünümü etkiler; verileri gizlemez.Ayrıntılar
Merchant 5.6.0+: müşteri ödeme sayfası başlığındaki her adı göster veya gizle. İkisi de varsayılan true. Mağaza → Ödeme sayfası bölümünde de bulunur; diğer görünüm ayarları gibi devralınır ve fatura görüntüsüne kaydedilir. Yalnızca görünümü etkiler; verileri gizlemez.
show_store_namebooleanisteğe bağlıMerchant 5.6.0+: müşteri ödeme sayfası başlığındaki her adı göster veya gizle. İkisi de varsayılan true. Mağaza → Ödeme sayfası bölümünde de bulunur; diğer görünüm ayarları gibi devralınır ve fatura görüntüsüne kaydedilir. Yalnızca görünümü etkiler; verileri gizlemez.Ayrıntılar
Merchant 5.6.0+: müşteri ödeme sayfası başlığındaki her adı göster veya gizle. İkisi de varsayılan true. Mağaza → Ödeme sayfası bölümünde de bulunur; diğer görünüm ayarları gibi devralınır ve fatura görüntüsüne kaydedilir. Yalnızca görünümü etkiler; verileri gizlemez.
featured_chains[]string[]isteğe bağlıSıralı zincir kısa adları; en fazla 60 benzersiz değer (küçük harf, rakam, tire; en fazla 64 karakter). [] temizler. Yalnızca kullanılabilir fatura yöntemleri yeniden sıralanır.Ayrıntılar
Sıralı zincir kısa adları; en fazla 60 benzersiz değer (küçük harf, rakam, tire; en fazla 64 karakter). [] temizler. Yalnızca kullanılabilir fatura yöntemleri yeniden sıralanır.
featured_asset_ids[]UUID[]isteğe bağlıEn fazla 100 benzersiz sıralı varlık kimliği; [] temizler. Varsayılan varlık null olabilir. Kimlikler payment-intent kimliklerinden değil, payment-assets'ten gelir. Bunlar yöntemleri asla etkinleştirmez; alınan ödemeler ve geçerli müşteri tercihleri önceliklidir.Ayrıntılar
En fazla 100 benzersiz sıralı varlık kimliği; [] temizler. Varsayılan varlık null olabilir. Kimlikler payment-intent kimliklerinden değil, payment-assets'ten gelir. Bunlar yöntemleri asla etkinleştirmez; alınan ödemeler ve geçerli müşteri tercihleri önceliklidir.
default_asset_idUUID|nullisteğe bağlıEn fazla 100 benzersiz sıralı varlık kimliği; [] temizler. Varsayılan varlık null olabilir. Kimlikler payment-intent kimliklerinden değil, payment-assets'ten gelir. Bunlar yöntemleri asla etkinleştirmez; alınan ödemeler ve geçerli müşteri tercihleri önceliklidir.Ayrıntılar
En fazla 100 benzersiz sıralı varlık kimliği; [] temizler. Varsayılan varlık null olabilir. Kimlikler payment-intent kimliklerinden değil, payment-assets'ten gelir. Bunlar yöntemleri asla etkinleştirmez; alınan ödemeler ve geçerli müşteri tercihleri önceliklidir.
messagesobjectisteğe bağlı
en, de, es, pt-BR, it, ru, zh-CN, fr, ko veya ja anahtarlı dil nesneleri; waiting, confirming, paid, underpaid, expired düz dizeleri içerir (her biri 500 karakter). Yalnızca gönderilen diller/durumlar değişir; {} tüm mesajları, {en:{}} İngilizceyi, boş durum dizesi o durumu temizler. Yedek dil İngilizcedir. Gerçek durumun yerini almaz.Ayrıntılar
en, de, es, pt-BR, it, ru, zh-CN, fr, ko veya ja anahtarlı dil nesneleri; waiting, confirming, paid, underpaid, expired düz dizeleri içerir (her biri 500 karakter). Yalnızca gönderilen diller/durumlar değişir; {} tüm mesajları, {en:{}} İngilizceyi, boş durum dizesi o durumu temizler. Yedek dil İngilizcedir. Gerçek durumun yerini almaz.
enobjectisteğe bağlı
deobjectisteğe bağlı
esobjectisteğe bağlı
pt-BRobjectisteğe bağlı
itobjectisteğe bağlı
ruobjectisteğe bağlı
zh-CNobjectisteğe bağlı
frobjectisteğe bağlı
koobjectisteğe bağlı
support_urlstringisteğe bağlıKimlik bilgisi içermeyen en fazla 2.048 karakterli HTTPS URL'leri. Boşsa temizler. Bağlantılar yeni pencerede açılır.
terms_urlstringisteğe bağlıKimlik bilgisi içermeyen en fazla 2.048 karakterli HTTPS URL'leri. Boşsa temizler. Bağlantılar yeni pencerede açılır.
privacy_urlstringisteğe bağlıKimlik bilgisi içermeyen en fazla 2.048 karakterli HTTPS URL'leri. Boşsa temizler. Bağlantılar yeni pencerede açılır.
return_button_textstringisteğe bağlıEtiket en fazla 60 karakter. Fatura davranışı için üst düzey redirect_url/cancel_url/redirect_automatically/language kullan.
show_return_buttonbooleanisteğe bağlıSon durumlar dahil ödeme sayfasında elle kullanılan Satıcıya dön/iptal düğmesini göster. Mağaza görünümünü devralmak için atla (varsayılan true); false gizler. Faturayı iptal etmez, JSON'daki URL'leri gizlemez veya otomatik başarı yönlendirmelerini kapatmaz. Gerekirse üst düzey redirect_automatically değerini ayrıca false yap. Merchant 8.1.4 veya yenisini gerektirir.Ayrıntılar
Son durumlar dahil ödeme sayfasında elle kullanılan Satıcıya dön/iptal düğmesini göster. Mağaza görünümünü devralmak için atla (varsayılan true); false gizler. Faturayı iptal etmez, JSON'daki URL'leri gizlemez veya otomatik başarı yönlendirmelerini kapatmaz. Gerekirse üst düzey redirect_automatically değerini ayrıca false yap. Merchant 8.1.4 veya yenisini gerektirir.
metadataobject | nullisteğe bağlı
Yalnızca satıcıya açık JSON nesnesi; atlanması veya null, {} olur; en fazla 4.096 kodlanmış bayt ve beş iç içe düzey. firstname, lastname, street, street2, zip, city, country, countryiso2, company ve vatid doğrulanır, normalleştirilir ve müşteri özeti alanlarına aktarılır.Ayrıntılar
Yalnızca satıcıya açık JSON nesnesi; atlanması veya null, {} olur; en fazla 4.096 kodlanmış bayt ve beş iç içe düzey. firstname, lastname, street, street2, zip, city, country, countryiso2, company ve vatid doğrulanır, normalleştirilir ve müşteri özeti alanlarına aktarılır.
Yanıt 201 new invoice; 200 exact idempotent replay
Örnek yanıt
{
"data": {
"id": "2f798f9f-01f2-42f0-9d10-5581d6116b4c",
"invoice_id": "0a6a98db-d93d-48ee-8c3c-fd45f90c4a50",
"project_id": "11111111-1111-4111-8111-111111111111",
"store_id": "22222222-2222-4222-8222-222222222222",
"source": "api",
"order_id": "order-1042",
"email": "ada@example.com",
"customer_name": "Ada Lovelace · Example GmbH",
"customer_address": "Example GmbH · 12 Example Street · Suite 2 · 10115 Berlin · Germany (DE) · VAT DE123456789",
"description": "Annual plan",
"amount": "49.9",
"currency": "USD",
"exchange_rate_spread_percent": "0.5",
"underpayment_tolerance_percent": "1",
"status": "new",
"amount_status": "none",
"timing_status": "on_time",
"resolution": "automatic",
"sequence": 1,
"winning_payment_intent_id": null,
"expires_at": "2026-08-31T18:15:00Z",
"monitoring_expires_at": "2026-09-07T18:15:00Z",
"settled_at": null,
"cancelled_at": null,
"archived_at": null,
"created_at": "2026-08-31T18:00:00Z",
"updated_at": "2026-08-31T18:00:00Z",
"ipn_url": "https://merchant.example/wholly/ipn",
"redirect_url": "https://merchant.example/orders/1042",
"cancel_url": "https://merchant.example/cart",
"redirect_automatically": true,
"checkout_language": "en",
"metadata": { "cart_id": "cart-681", "firstname": "Ada", "lastname": "Lovelace", "street": "12 Example Street", "street2": "Suite 2", "zip": "10115", "city": "Berlin", "country": "Germany", "countryiso2": "DE", "company": "Example GmbH", "vatid": "DE123456789" },
"payment_intents": [
{
"id": "33333333-3333-4333-8333-333333333333",
"asset_id": "10000000-0000-4000-8000-000000000001",
"asset_key": "bip122:000000000019d6689c085ae165831e93/slip44:0",
"chain_slug": "bitcoin",
"network": "mainnet",
"caip_network_id": "bip122:000000000019d6689c085ae165831e93",
"caip_asset_id": "bip122:000000000019d6689c085ae165831e93/slip44:0",
"symbol": "BTC",
"asset_decimals": 8,
"status": "pending",
"finality_mode": "confirmations",
"required_confirmations": 1,
"quote_rate": "0.000009218",
"quote_details": null,
"expected_amount": "0.00046",
"expected_amount_atomic": "46000",
"minimum_payment_amount": "0.0004554",
"minimum_payment_amount_atomic": "45540",
"received_amount": "0",
"received_amount_atomic": "0",
"confirmed_amount": "0",
"confirmed_amount_atomic": "0",
"destination_address": "bc1q…example",
"destination_tag": null,
"derivation_index": 42,
"quote_expires_at": "2026-08-31T18:15:00Z",
"monitoring_expires_at": "2026-09-07T18:15:00Z",
"next_check_at": "2026-08-31T18:00:00Z",
"last_checked_at": null,
"last_chain_height": null,
"last_anchor_hash": null,
"last_monitor_error": null,
"first_payment_at": null,
"fully_paid_at": null,
"finalized_at": null
}
]
},
"links": {
"checkout": "https://pay.example.com/invoice/0a6a98db-d93d-48ee-8c3c-fd45f90c4a50"
}
}Yanıt alanları
dataobject
invoice_idUUIDher zamanSatıcı ayrıntısı ve ödeme sayfası yollarında kullanılan herkese açık fatura UUID'si.
emailstring | nullher zamanYalnızca satıcıya açık müşteri e-postası. Herkese açık ödeme sayfası asla döndürmez.
customer_namestring | nullher zamanÖzel firstname, lastname ve company meta verilerinden türetilen görünen ad.
customer_addressstring | nullher zamanÖzel company, street, street2, zip, city, country, countryiso2 ve vatid meta verilerinden türetilen tek satırlık satıcı adresi.
exchange_rate_spread_percentdecimal stringher zamanKilitlenmiş teklif fiyat marjı: oluşturmadaki özel değer veya atlandığında mağaza varsayılanı. Yukarı yuvarlamadan önce uygulanır; bu faturada asla değişmez.
underpayment_tolerance_percentdecimal stringher zamanFatura oluşturulurken görüntüsü alınmış, değiştirilemez kabul edilen eksik ödeme yüzdesi.
amount_statusamount statusher zamannone, partial, paid veya overpaid. Açıkça izin verilen sıfır tutarlı fatura none ile ve ödeme yöntemi olmadan tamamlanır.
monitoring_expires_atRFC 3339 timestampher zamanÖdeme yöntemleri genelinde yapılandırılmış en geç geç ödeme izleme bitişi.
ipn_urlstring | nullher zamanFaturaya özel geçerli IPN hedefi. Yalnızca satıcı yanıtında bulunur; herkese açık ödeme sayfasından çıkarılır.
cancel_urlstring | nullher zamanÖdeme sayfası başarılı ödeme olmadan sona erdiğinde kullanılan geçerli dönüş URL'si.
redirect_automaticallybooleanher zamanÖdeme sayfasının başarıdan sonra otomatik yönlenip yönlenmeyeceği.
metadataobjecther zaman
Satıcı meta verileri. Herkese açık ödeme sayfası asla döndürmez. Konsol ödeme araçları payment_tool köken bilgisini ekler (id, kind, title, pricing, requested_amount, request_id); bu ödeme kanıtı değildir. Geri çağrıları doğrula ve invoice.settled için invoice_id başına bir kez siparişi yerine getir.Ayrıntılar
Satıcı meta verileri. Herkese açık ödeme sayfası asla döndürmez. Konsol ödeme araçları payment_tool köken bilgisini ekler (id, kind, title, pricing, requested_amount, request_id); bu ödeme kanıtı değildir. Geri çağrıları doğrula ve invoice.settled için invoice_id başına bir kez siparişi yerine getir.
payment_intents[]object[]her zaman
Teklif verilen ödeme yöntemleri ve izleme durumu.
payment_railonchain | lightningher zamanFatura aktarım türü. Zincir üstü Bitcoin ve Lightning aynı asset_id paylaşabilir; yalnızca sembol yerine isteğin id değerini ve bu alanı kullan. Bu, varlık kataloğundaki tarayıcı payment_rail alanından farklıdır.Ayrıntılar
Fatura aktarım türü. Zincir üstü Bitcoin ve Lightning aynı asset_id paylaşabilir; yalnızca sembol yerine isteğin id değerini ve bu alanı kullan. Bu, varlık kataloğundaki tarayıcı payment_rail alanından farklıdır.
bolt11string | nullher zamanLightning ödeme isteği; diğer durumlarda null. Bunu Lightning cüzdanıyla öde; ödeme hash'ine asla zincir üstü fon gönderme.
asset_decimalsintegerher zamanAtomik birim hassasiyeti. Lightning BTC, zincir üstü Bitcoin'in 8 basamağı yerine 11 (millisatoshi) kullanır. Teklifler tam satoshi'dir; tahsilatlar millisatoshi hassasiyetini korur.
quote_ratedecimal stringher zamanKilitlenmiş fiyat marjı dahil, bir fatura para birimi başına varlık birimi. Örneğin USD başına 1.02 USDC. Ters kur değildir.
quote_detailsobject | nullher zamanKilitlenmiş teklif kökeni: fiyat marjı öncesi reference_rate, unrounded_payment_amount, rounding_adjustment, pricing_provider, asset_provider, pricing_fetched_at ve asset_fetched_at. Eski faturalarda null; geçmiş değerler uydurulmaz.Ayrıntılar
Kilitlenmiş teklif kökeni: fiyat marjı öncesi reference_rate, unrounded_payment_amount, rounding_adjustment, pricing_provider, asset_provider, pricing_fetched_at ve asset_fetched_at. Eski faturalarda null; geçmiş değerler uydurulmaz.
expected_amountdecimal stringher zamanFiyat marjı ve yukarı yuvarlamadan sonra ödenecek tam kilitli varlık tutarı. 4.1.1'den itibaren tanınan ve doğrulanmış itibari para stablecoin'leri (USDC, USDT, DAI, USDS, EURC gibi) en fazla iki ondalık basamağa yukarı yuvarlanır; 1.321, 1.33 olur, asla 1.32 olmaz. Tolerans sıfır olsa bile beklenen tutar budur. Diğer varlıklar uyarlanabilir hassasiyetini korur. Mevcut faturalar asla yeniden fiyatlandırılmaz.Ayrıntılar
Fiyat marjı ve yukarı yuvarlamadan sonra ödenecek tam kilitli varlık tutarı. 4.1.1'den itibaren tanınan ve doğrulanmış itibari para stablecoin'leri (USDC, USDT, DAI, USDS, EURC gibi) en fazla iki ondalık basamağa yukarı yuvarlanır; 1.321, 1.33 olur, asla 1.32 olmaz. Tolerans sıfır olsa bile beklenen tutar budur. Diğer varlıklar uyarlanabilir hassasiyetini korur. Mevcut faturalar asla yeniden fiyatlandırılmaz.
minimum_payment_amountdecimal stringher zamanFatura toleransı uygulandıktan sonra ödendi olarak kabul edilen en küçük tutar.
destination_addressstringher zamanZincir üstü ödeme alma adresi veya Lightning için 64 karakterlik ödeme hash'i. Lightning ödemek için bolt11 kullan; hash'i Bitcoin adresi değildir.
destination_tagstring | nullher zamanÖdeme altyapısı gerektiriyorsa zorunlu herkese açık ödeme referansı: XRP destination tag, Stellar memo ID veya TON fatura açıklaması. Benzersiz adresli altyapılarda null.
Kullanım notları
- payment_methods yalnızca bu fatura için mağazada etkin yöntemleri filtreler. Atlanması/null tüm mağaza yöntemlerini korur; [] geçersizdir. Küçük chain_slug ipucunu ve görünen varlık sembollerini Proje → Mağazalar → Ödeme yöntemleri bölümünde bul. API payment-assets listesi chain_slug, asset.symbol ve asset.id sağlar. Kabul edilen Ethereum token'ları için {chain_slug: ethereum, asset_tickers: [USDC, USDT]} kullan; BTC ve PEPE seçilen zincirlerinde aynı şekilde çalışır. Semboller büyük/küçük harf duyarsız, zincir kapsamlıdır ve yalnızca mağaza içinde çözümlenir. Aynı sembollü kabul edilen iki sözleşme varsa, biri hazır olmasa bile birini seçmek yerine 400 döner; bu durumda asset_ids kullan. Yerel varlıklar, katalog token'ları ve özel token'lar aynı kurallara uyar. Her zincir/altyapı bir kez bulunabilir; sonuçta en fazla 64 yöntem olabilir. Merchant 5.4.0+: bilinmeyen, devre dışı, yanlış zincirli veya kabul edilmeyen seçimler yok sayılır. Tüm seçimde etkin kabul edilen eşleşme yoksa mağaza varsayılanları uygulanır; aksi halde yalnızca eşleşen seçimler kullanılır. Yalnızca zincir içeren girdi, etkin kabul edilen tüm zincir üstü varlıkları kapsar. Etkin seçili yöntemler geçerli cüzdan, kurulu tarayıcı adaptörü ve güvenilir kur gerektirir. 6.0.6'dan itibaren kullanılamayan tarayıcılar, bekleme süreleri ve bekleyen/eski sağlık kontrolleri fatura oluşturmayı engellemez veya yapılandırılmış zincir üstü yöntemleri kaldırmaz. Tespit otomatik yeniden dener; tamamlanma yine sağlayıcı yeter sayısı ve onay gerektirir. receive_readiness izle ve sağlayıcıları kullanılabilir tut: tarayıcılar düzelene kadar fatura doğrulanmadan kalabilir. Monero alt adres ayırma ve Lightning BOLT11 üretimi yine harici cüzdan/düğüm hizmetlerini gerektirir. Hatalar error.message ve error.details.payment_methods içinde chain_slug, asset_ticker, reason_code; tarayıcı teşhisinde ayrıca required_endpoint_role, healthy_endpoints ve required_independent_providers döndürür. TRON indekslenmiş geçmişi veya desteklenen ham solidified yerel blok API'lerini kabul eder; temel sağlık tek başına tarayıcı uyumluluğunu kanıtlamaz. Fiyatlandırma hataları varlığı/para birimini belirtir. Hiçbir şey kabul edilmeyen varlığı etkinleştirmez veya mağaza politikasını değiştirmez. 5.4.0 öncesi satıcı sürümlerinde bilinmeyen/etkin olmayan açık seçimler bunun yerine hata verir. Mağaza ayarları değiştiğinde mevcut fatura yöntemleri asla genişlemez. Lightning ayrı seçilmelidir. Tekrarlar ilk yöntemleri korur; aynı Idempotency-Key ile seçimleri değiştirmek 409 döndürür.
- checkout_appearance yukarıda listelenen tüm sunum ayarlarını destekler. Atlanan alanlar devralır, diziler değiştirir, iç içe mesaj alanları birleştirilir; boş mesaj nesnesi o kapsamı temizler. Çözümlenen tasarım ve görseller mağazayı düzenlemeden bu fatura için kaydedilir. Sonucu incelemek için herkese açık ödeme sayfası JSON'undan appearance oku. Tüm istek 32 KiB, çözümlenen ayarlar 20 KiB ile sınırlıdır.
- Aynı Idempotency-Key ile checkout_appearance değiştirmek 409 döndürür; birebir aynı ham baytlarla yeniden dene. Görünüm tutarları, kurları, kabul edilen varlıkları, onay gereksinimlerini, gerçek durumu veya gömme izinlerini değiştirmez. HTML, CSS, betik veya uzak görsel alma yoktur.
- exchange_rate_spread_percent bu fatura için mağaza varsayılanını değiştirir: devralmak için atla veya null gönder; kapatmak için "0" gönder. Mevcut fatura teklifleri asla değişmez.
- Fiyat marjı yukarı yuvarlamadan önce uygulanır. Ücretlerin temeli, fiyat marjı hariç faturanın ilk itibari para tutarı olarak kalır.
- Her zaman döndürülen expected_amount veya expected_amount_atomic değerini gönder. Yuvarlama yukarı yönlüdür; varlık hassasiyeti, tutarın %0.1'i ve itibari paranın bir alt birimiyle sınırlıdır.
- Yeniden denemeler aynı kimlik bilgisini, Idempotency-Key ve tam gövde baytlarını korumalıdır. Aynı anahtarla fiyat marjını değiştirmek 409 idempotency_conflict döndürür.
- Tam tekrar kontrolü yeni teklif, geri çağrı DNS'i veya adres hazırlığından önce yapılır. Kimlik bilgisi kapsamı ve proje/mağaza yetkilendirmesi yine her istekte kontrol edilir.
- Geçerli ipn_url mağaza IPN imzalama sırrını gerektirir. Bilinmeyen gövde alanları reddedilir.
Hatalar
GETFaturaları listele/v1/projects/{project_id}/invoicesSalt okunur
Yalnızca satıcıya açık e-posta ve tanınan meta verilerden türetilmiş müşteri alanları dahil, kapsamlı fatura özetlerinin yeniden eskiye sıralı kompakt sayfasını döndürür. Arama, durum ve mağaza filtreleri sunucu tarafında değerlendirilir; öngörülebilir sayfalama için yanıt total ve has_more içerir.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MERCHANT_API_TOKEN |
| Accept | önerilen | application/json |
Yol parametreleri
Sorgu parametreleri
searchstringİsteğe bağlı, büyük/küçük harf duyarsız fatura kimliği, sipariş kimliği veya e-posta öneki; tam fatura UUID'si; ya da açıklama ve tanınan müşteri alanlarında alt dize. Tüm meta veri anahtarları ile metin, sayı ve boolean değerler (iç içe nesne/diziler dahil) indeksli kelime öneki aramasını da destekler: her arama kelimesi eşleşmelidir, noktalama ayırıcı sayılır. Kenar boşlukları temizlenir; en fazla 100 karakter, kontrol karakteri yok. Meta veri eşleşmeleri liste yanıtına ham meta veri eklemez; okumak için fatura ayrıntısını kullan.Ayrıntılar
İsteğe bağlı, büyük/küçük harf duyarsız fatura kimliği, sipariş kimliği veya e-posta öneki; tam fatura UUID'si; ya da açıklama ve tanınan müşteri alanlarında alt dize. Tüm meta veri anahtarları ile metin, sayı ve boolean değerler (iç içe nesne/diziler dahil) indeksli kelime öneki aramasını da destekler: her arama kelimesi eşleşmelidir, noktalama ayırıcı sayılır. Kenar boşlukları temizlenir; en fazla 100 karakter, kontrol karakteri yok. Meta veri eşleşmeleri liste yanıtına ham meta veri eklemez; okumak için fatura ayrıntısını kullan.
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/projects/YOUR_PROJECT_ID/invoices?search=order-1042&status=processing&limit=50&offset=0" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Accept: application/json'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/projects/YOUR_PROJECT_ID/invoices?search=order-1042&status=processing&limit=50&offset=0", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`,
"Accept": "application/json"
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/projects/YOUR_PROJECT_ID/invoices?search=order-1042&status=processing&limit=50&offset=0");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Accept: application/json"],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {
"Accept": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/projects/YOUR_PROJECT_ID/invoices?search=order-1042&status=processing&limit=50&offset=0",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": [
{
"id": "2f798f9f-01f2-42f0-9d10-5581d6116b4c",
"invoice_id": "0a6a98db-d93d-48ee-8c3c-fd45f90c4a50",
"project_id": "11111111-1111-4111-8111-111111111111",
"store_id": "22222222-2222-4222-8222-222222222222",
"source": "api",
"order_id": "order-1042",
"email": "ada@example.com",
"customer_name": "Ada Lovelace · Example GmbH",
"customer_address": "Example GmbH · 12 Example Street · Suite 2 · 10115 Berlin · Germany (DE) · VAT DE123456789",
"description": "Annual plan",
"amount": "49.9",
"currency": "USD",
"exchange_rate_spread_percent": "0.5",
"underpayment_tolerance_percent": "1",
"status": "processing",
"amount_status": "paid",
"timing_status": "on_time",
"resolution": "automatic",
"sequence": 3,
"winning_payment_intent_id": "33333333-3333-4333-8333-333333333333",
"expires_at": "2026-08-31T18:15:00Z",
"monitoring_expires_at": "2026-09-07T18:15:00Z",
"settled_at": null,
"cancelled_at": null,
"archived_at": null,
"created_at": "2026-08-31T18:00:00Z",
"updated_at": "2026-08-31T18:04:10Z"
}
],
"pagination": {
"limit": 50,
"offset": 0,
"total": 143,
"has_more": true
}
}Yanıt alanları
data[]object[]
invoice_idUUIDher zamanSatıcı ayrıntısı ve ödeme sayfası yollarında kullanılan herkese açık fatura UUID'si.
emailstring | nullher zamanYalnızca satıcıya açık müşteri e-postası. Herkese açık ödeme sayfası asla döndürmez.
customer_namestring | nullher zamanÖzel firstname, lastname ve company meta verilerinden türetilen görünen ad.
customer_addressstring | nullher zamanÖzel company, street, street2, zip, city, country, countryiso2 ve vatid meta verilerinden türetilen tek satırlık satıcı adresi.
exchange_rate_spread_percentdecimal stringher zamanKilitlenmiş teklif fiyat marjı: oluşturmadaki özel değer veya atlandığında mağaza varsayılanı. Yukarı yuvarlamadan önce uygulanır; bu faturada asla değişmez.
underpayment_tolerance_percentdecimal stringher zamanFatura oluşturulurken görüntüsü alınmış, değiştirilemez kabul edilen eksik ödeme yüzdesi.
amount_statusamount statusher zamannone, partial, paid veya overpaid. Açıkça izin verilen sıfır tutarlı fatura none ile ve ödeme yöntemi olmadan tamamlanır.
monitoring_expires_atRFC 3339 timestampher zamanÖdeme yöntemleri genelinde yapılandırılmış en geç geç ödeme izleme bitişi.
paginationobject
totalintegerher zamanSayfa görüntüsünde proje, mağaza, durum ve arama filtreleriyle eşleşen toplam satır.
has_morebooleanher zamanoffset ile döndürülen satır sayısının toplamı total değerinden küçükse true.
Kullanım notları
- Önce created_at azalan, ardından dahili id azalan sırayla.
- Liste öğeleri InvoiceSummary nesneleridir; email, customer_name ve customer_address yalnızca satıcıya açıktır. Ham meta veri ve ödeme istekleri için ayrıntıyı çağır.
- Yalnızca has_more true ise sonraki sayfa için offset değerini pagination.offset + pagination.limit yap.
- Sayı ve sayfa tek repeatable-read veritabanı görüntüsünden okunur; eş zamanlı yazmalar sonraki istekte görünür.
Hatalar
GETFaturayı getir/v1/projects/{project_id}/invoices/{invoice_id}Salt okunur
Tam satıcı fatura ayrıntısını ve güncel etkin ödeme sayfası URL'sini döndürür. Sorgulama ve mutabakat için bu rotayı kullan.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MERCHANT_API_TOKEN |
| Accept | önerilen | application/json |
Yol parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/projects/YOUR_PROJECT_ID/invoices/YOUR_PUBLIC_INVOICE_ID" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Accept: application/json'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/projects/YOUR_PROJECT_ID/invoices/YOUR_PUBLIC_INVOICE_ID", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`,
"Accept": "application/json"
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/projects/YOUR_PROJECT_ID/invoices/YOUR_PUBLIC_INVOICE_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Accept: application/json"],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {
"Accept": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/projects/YOUR_PROJECT_ID/invoices/YOUR_PUBLIC_INVOICE_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": {
"id": "2f798f9f-01f2-42f0-9d10-5581d6116b4c",
"invoice_id": "0a6a98db-d93d-48ee-8c3c-fd45f90c4a50",
"project_id": "11111111-1111-4111-8111-111111111111",
"store_id": "22222222-2222-4222-8222-222222222222",
"source": "api",
"order_id": "order-1042",
"email": "ada@example.com",
"customer_name": "Ada Lovelace · Example GmbH",
"customer_address": "Example GmbH · 12 Example Street · Suite 2 · 10115 Berlin · Germany (DE) · VAT DE123456789",
"description": "Annual plan",
"amount": "49.9",
"currency": "USD",
"exchange_rate_spread_percent": "0.5",
"underpayment_tolerance_percent": "1",
"status": "settled",
"amount_status": "paid",
"timing_status": "on_time",
"resolution": "automatic",
"sequence": 4,
"winning_payment_intent_id": "33333333-3333-4333-8333-333333333333",
"expires_at": "2026-08-31T18:15:00Z",
"monitoring_expires_at": "2026-09-07T18:15:00Z",
"settled_at": "2026-08-31T18:05:00Z",
"cancelled_at": null,
"archived_at": null,
"created_at": "2026-08-31T18:00:00Z",
"updated_at": "2026-08-31T18:05:00Z",
"ipn_url": "https://merchant.example/wholly/ipn",
"redirect_url": "https://merchant.example/orders/1042",
"cancel_url": "https://merchant.example/cart",
"redirect_automatically": true,
"checkout_language": "en",
"metadata": { "cart_id": "cart-681", "firstname": "Ada", "lastname": "Lovelace", "street": "12 Example Street", "street2": "Suite 2", "zip": "10115", "city": "Berlin", "country": "Germany", "countryiso2": "DE", "company": "Example GmbH", "vatid": "DE123456789" },
"payment_intents": [
{
"id": "33333333-3333-4333-8333-333333333333",
"asset_id": "10000000-0000-4000-8000-000000000001",
"asset_key": "bip122:000000000019d6689c085ae165831e93/slip44:0",
"chain_slug": "bitcoin",
"network": "mainnet",
"caip_network_id": "bip122:000000000019d6689c085ae165831e93",
"caip_asset_id": "bip122:000000000019d6689c085ae165831e93/slip44:0",
"symbol": "BTC",
"asset_decimals": 8,
"status": "paid",
"finality_mode": "confirmations",
"required_confirmations": 1,
"quote_rate": "0.000009218",
"quote_details": null,
"expected_amount": "0.00046",
"expected_amount_atomic": "46000",
"minimum_payment_amount": "0.0004554",
"minimum_payment_amount_atomic": "45540",
"received_amount": "0.0004554",
"received_amount_atomic": "45540",
"confirmed_amount": "0.0004554",
"confirmed_amount_atomic": "45540",
"destination_address": "bc1q…example",
"destination_tag": null,
"derivation_index": 42,
"quote_expires_at": "2026-08-31T18:15:00Z",
"monitoring_expires_at": "2026-09-07T18:15:00Z",
"next_check_at": null,
"last_checked_at": "2026-08-31T18:05:00Z",
"last_chain_height": 912345,
"last_anchor_hash": "000000000000000000example",
"last_monitor_error": null,
"first_payment_at": "2026-08-31T18:03:00Z",
"fully_paid_at": "2026-08-31T18:03:00Z",
"finalized_at": "2026-08-31T18:05:00Z"
}
]
},
"links": {
"checkout": "https://pay.example.com/invoice/0a6a98db-d93d-48ee-8c3c-fd45f90c4a50"
}
}Yanıt alanları
dataobject
invoice_idUUIDher zamanSatıcı ayrıntısı ve ödeme sayfası yollarında kullanılan herkese açık fatura UUID'si.
emailstring | nullher zamanYalnızca satıcıya açık müşteri e-postası. Herkese açık ödeme sayfası asla döndürmez.
customer_namestring | nullher zamanÖzel firstname, lastname ve company meta verilerinden türetilen görünen ad.
customer_addressstring | nullher zamanÖzel company, street, street2, zip, city, country, countryiso2 ve vatid meta verilerinden türetilen tek satırlık satıcı adresi.
exchange_rate_spread_percentdecimal stringher zamanKilitlenmiş teklif fiyat marjı: oluşturmadaki özel değer veya atlandığında mağaza varsayılanı. Yukarı yuvarlamadan önce uygulanır; bu faturada asla değişmez.
underpayment_tolerance_percentdecimal stringher zamanFatura oluşturulurken görüntüsü alınmış, değiştirilemez kabul edilen eksik ödeme yüzdesi.
amount_statusamount statusher zamannone, partial, paid veya overpaid. Açıkça izin verilen sıfır tutarlı fatura none ile ve ödeme yöntemi olmadan tamamlanır.
monitoring_expires_atRFC 3339 timestampher zamanÖdeme yöntemleri genelinde yapılandırılmış en geç geç ödeme izleme bitişi.
ipn_urlstring | nullher zamanFaturaya özel geçerli IPN hedefi. Yalnızca satıcı yanıtında bulunur; herkese açık ödeme sayfasından çıkarılır.
cancel_urlstring | nullher zamanÖdeme sayfası başarılı ödeme olmadan sona erdiğinde kullanılan geçerli dönüş URL'si.
redirect_automaticallybooleanher zamanÖdeme sayfasının başarıdan sonra otomatik yönlenip yönlenmeyeceği.
metadataobjecther zaman
Satıcı meta verileri. Herkese açık ödeme sayfası asla döndürmez. Konsol ödeme araçları payment_tool köken bilgisini ekler (id, kind, title, pricing, requested_amount, request_id); bu ödeme kanıtı değildir. Geri çağrıları doğrula ve invoice.settled için invoice_id başına bir kez siparişi yerine getir.Ayrıntılar
Satıcı meta verileri. Herkese açık ödeme sayfası asla döndürmez. Konsol ödeme araçları payment_tool köken bilgisini ekler (id, kind, title, pricing, requested_amount, request_id); bu ödeme kanıtı değildir. Geri çağrıları doğrula ve invoice.settled için invoice_id başına bir kez siparişi yerine getir.
payment_intents[]object[]her zaman
Teklif verilen ödeme yöntemleri ve izleme durumu.
payment_railonchain | lightningher zamanFatura aktarım türü. Zincir üstü Bitcoin ve Lightning aynı asset_id paylaşabilir; yalnızca sembol yerine isteğin id değerini ve bu alanı kullan. Bu, varlık kataloğundaki tarayıcı payment_rail alanından farklıdır.Ayrıntılar
Fatura aktarım türü. Zincir üstü Bitcoin ve Lightning aynı asset_id paylaşabilir; yalnızca sembol yerine isteğin id değerini ve bu alanı kullan. Bu, varlık kataloğundaki tarayıcı payment_rail alanından farklıdır.
bolt11string | nullher zamanLightning ödeme isteği; diğer durumlarda null. Bunu Lightning cüzdanıyla öde; ödeme hash'ine asla zincir üstü fon gönderme.
asset_decimalsintegerher zamanAtomik birim hassasiyeti. Lightning BTC, zincir üstü Bitcoin'in 8 basamağı yerine 11 (millisatoshi) kullanır. Teklifler tam satoshi'dir; tahsilatlar millisatoshi hassasiyetini korur.
quote_ratedecimal stringher zamanKilitlenmiş fiyat marjı dahil, bir fatura para birimi başına varlık birimi. Örneğin USD başına 1.02 USDC. Ters kur değildir.
quote_detailsobject | nullher zamanKilitlenmiş teklif kökeni: fiyat marjı öncesi reference_rate, unrounded_payment_amount, rounding_adjustment, pricing_provider, asset_provider, pricing_fetched_at ve asset_fetched_at. Eski faturalarda null; geçmiş değerler uydurulmaz.Ayrıntılar
Kilitlenmiş teklif kökeni: fiyat marjı öncesi reference_rate, unrounded_payment_amount, rounding_adjustment, pricing_provider, asset_provider, pricing_fetched_at ve asset_fetched_at. Eski faturalarda null; geçmiş değerler uydurulmaz.
expected_amountdecimal stringher zamanFiyat marjı ve yukarı yuvarlamadan sonra ödenecek tam kilitli varlık tutarı. 4.1.1'den itibaren tanınan ve doğrulanmış itibari para stablecoin'leri (USDC, USDT, DAI, USDS, EURC gibi) en fazla iki ondalık basamağa yukarı yuvarlanır; 1.321, 1.33 olur, asla 1.32 olmaz. Tolerans sıfır olsa bile beklenen tutar budur. Diğer varlıklar uyarlanabilir hassasiyetini korur. Mevcut faturalar asla yeniden fiyatlandırılmaz.Ayrıntılar
Fiyat marjı ve yukarı yuvarlamadan sonra ödenecek tam kilitli varlık tutarı. 4.1.1'den itibaren tanınan ve doğrulanmış itibari para stablecoin'leri (USDC, USDT, DAI, USDS, EURC gibi) en fazla iki ondalık basamağa yukarı yuvarlanır; 1.321, 1.33 olur, asla 1.32 olmaz. Tolerans sıfır olsa bile beklenen tutar budur. Diğer varlıklar uyarlanabilir hassasiyetini korur. Mevcut faturalar asla yeniden fiyatlandırılmaz.
minimum_payment_amountdecimal stringher zamanFatura toleransı uygulandıktan sonra ödendi olarak kabul edilen en küçük tutar.
destination_addressstringher zamanZincir üstü ödeme alma adresi veya Lightning için 64 karakterlik ödeme hash'i. Lightning ödemek için bolt11 kullan; hash'i Bitcoin adresi değildir.
destination_tagstring | nullher zamanÖdeme altyapısı gerektiriyorsa zorunlu herkese açık ödeme referansı: XRP destination tag, Stellar memo ID veya TON fatura açıklaması. Benzersiz adresli altyapılarda null.
Kullanım notları
- Kapsamlı sorgu, herkese açık kimlik yetkili projede değilse bilinçli olarak invoice_not_found döndürür.
- links.checkout, Mağaza → Temel → Mağaza alan adlarını kullanır: önce bu mağazanın etkin ödeme ana makinesi, sonra varsayılan mağazasının seçimi, ardından sistem birincil adresi. Kullanımdan kaldırılmış/taslak veya yanlış hizmetli sunucular yok sayılır. Bu oluşturma ve MCP yanıtları için de geçerlidir; bağlantılar idempotent tekrarlar dahil yanıt anında çözümlenir. İmzalı geri çağrı bağlantıları olay oluşumunda sabitlenir, yeniden denemelerde yazılmaz. Bu tercihler yalnızca bağlantı üretir; trafiği yönlendirmez veya IP kısıtlamalarını değiştirmez.
Hatalar
GETFatura ödemelerini listele/v1/projects/{project_id}/invoices/{invoice_id}/paymentsSalt okunur
Geçersiz kılınmış gözlemler dahil tam güncel transfer geçmişi. Geri çağrı payments_truncated işaretlediğinde kullan. Eski olayın yeniden oluşturulması değil, güncel durumdur.
Kimlik doğrulama ve üst bilgiler
| Üst bilgi | Gereklilik | Kural |
|---|---|---|
| Authorization | zorunlu | Bearer YOUR_MERCHANT_API_TOKEN |
| Accept | önerilen | application/json |
Yol parametreleri
Sorgu parametreleri
İstek
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://api.example.com/v1/projects/YOUR_PROJECT_ID/invoices/YOUR_PUBLIC_INVOICE_ID/payments?limit=25&offset=0" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Accept: application/json'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
const response = await fetch("https://api.example.com/v1/projects/YOUR_PROJECT_ID/invoices/YOUR_PUBLIC_INVOICE_ID/payments?limit=25&offset=0", {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`,
"Accept": "application/json"
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
$ch = curl_init("https://api.example.com/v1/projects/YOUR_PROJECT_ID/invoices/YOUR_PUBLIC_INVOICE_ID/payments?limit=25&offset=0");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Accept: application/json"],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {
"Accept": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
request = Request("https://api.example.com/v1/projects/YOUR_PROJECT_ID/invoices/YOUR_PUBLIC_INVOICE_ID/payments?limit=25&offset=0",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"invoice_id": "11111111-2222-4333-8444-555555555555",
"data": [{
"payment_id": "44444444-4444-4444-8444-444444444444",
"payment_method_id": "33333333-3333-4333-8333-333333333333",
"transaction_id": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"payment_hash": null,
"event_index": 12,
"payment_rail": "onchain",
"chain_slug": "ethereum",
"network": "mainnet",
"asset_id": "55555555-5555-4555-8555-555555555555",
"asset_key": "eip155:1/erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"caip_asset_id": "eip155:1/erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"symbol": "USDC",
"asset_decimals": 6,
"amount": "58.17342",
"amount_atomic": "58173420",
"status": "final",
"counts_towards_received": true,
"confirmations": 2,
"block_height": 25975377,
"observed_at": "2026-09-14T12:03:00Z",
"chain_time": "2026-09-14T12:02:48Z",
"finalized_at": "2026-09-14T12:04:00Z",
"explorer_name": "Etherscan",
"explorer_url": "https://etherscan.io/tx/0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}],
"pagination": {"limit": 25, "offset": 0, "total": 1, "has_more": false}
}Yanıt alanları
invoice_idstringdata[]object[]
payment_idstringpayment_method_idstringtransaction_idstringpayment_hashJSON | nullevent_indexintegerpayment_railstringchain_slugstringnetworkstringasset_idstringasset_keystringcaip_asset_idstringsymbolstringasset_decimalsintegeramountstringamount_atomicstringstatusstringcounts_towards_receivedbooleanconfirmationsintegerblock_heightintegerobserved_atstringchain_timestringfinalized_atstringexplorer_namestringexplorer_urlstringKullanım notları
- Gözlem bir token günlüğü, UTXO çıktısı veya başka ödeme altyapısı transferidir; mutlaka benzersiz işlem hash'i değildir. payment_id ile tekilleştir; transaction_id ve event_index birlikte zincir transferini tanımlar.
- status detected, confirming, final, reorged, replaced veya invalid olabilir. Alınan tutarlara yalnızca counts_towards_received gözlemleri katılır. Farklı varlıkların tutarlarını asla toplama.
- Lightning kayıtları payment_hash kullanır; transaction_id, confirmations ve gezgin bağlantıları null'dur. BTC hassasiyeti 11'dir (millisatoshi). Preimage, BOLT11 veya cüzdan sırları gösterilmez.
- Önce observed_at azalan, ardından payment_id azalan sıralanır. Sayı ve sayfa tek repeatable-read görüntüsü kullanır; ödemeler geldikçe sonraki sayfalar değişebilir. Canlı faturayı sayfalarken payment_id ile tekilleştir.
- Mevcut salt okunur proje kapsamı, IP kısıtlamaları ve kimlik bilgisi başına istek sınırları geçerlidir. Kökeni yapılandırılmış API sunucunla eşleşmedikçe geri çağrının sağladığı bağlantıyı token'ınla asla takip etme.
Hatalar
GETÖdeme sayfası kabuğu/Herkese açık
Fatura seçmeden ödeme uygulamasını sunan yönetilen ödeme sunucusu kökü. Müşteri entegrasyonları normalde links.checkout kullanmalıdır.
Kimlik doğrulama ve üst bilgiler
Herkese açık
İstek
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://pay.example.com/" \
--output 'checkout.html'// Node.js 18+ · run on your server, never in browser code.
import { writeFile } from "node:fs/promises";
const response = await fetch("https://pay.example.com/", {
method: "GET",
headers: {},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
await writeFile("checkout.html", Buffer.from(await response.arrayBuffer()));<?php
// PHP 8+ with the cURL extension; run on your server.
$ch = curl_init("https://pay.example.com/");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => [],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
file_put_contents("checkout.html", $response);# Python 3 · standard library; run on your server.
import json
from pathlib import Path
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
request = Request("https://pay.example.com/",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
Path("checkout.html").write_bytes(response.read())Yanıt 200 text/html
Örnek yanıt
<!doctype html>
<!-- Hosted Wholly Crypto checkout shell -->Kullanım notları
- Bearer token gerekmez.
- Yönetilen ödeme giriş katmanı GET/HEAD kabul eder, diğer yöntemleri reddeder.
Hatalar
GETBarındırılan ödeme sayfası/invoice/{invoice_id}Herkese açık
Müşteriye görünen HTML ödeme sayfası. Sayfa aynı ödeme sunucusundan ödeme sayfası için güvenli JSON getirir. Mağaza etkinleştirip üst HTTPS kökenine açıkça izin vermedikçe gömme reddedilir.
Kimlik doğrulama ve üst bilgiler
Herkese açık
Yol parametreleri
İstek
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://pay.example.com/invoice/YOUR_PUBLIC_INVOICE_ID" \
--output 'checkout.html'// Node.js 18+ · run on your server, never in browser code.
import { writeFile } from "node:fs/promises";
const response = await fetch("https://pay.example.com/invoice/YOUR_PUBLIC_INVOICE_ID", {
method: "GET",
headers: {},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
await writeFile("checkout.html", Buffer.from(await response.arrayBuffer()));<?php
// PHP 8+ with the cURL extension; run on your server.
$ch = curl_init("https://pay.example.com/invoice/YOUR_PUBLIC_INVOICE_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => [],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
file_put_contents("checkout.html", $response);# Python 3 · standard library; run on your server.
import json
from pathlib import Path
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
request = Request("https://pay.example.com/invoice/YOUR_PUBLIC_INVOICE_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
Path("checkout.html").write_bytes(response.read())Yanıt 200 text/html
Örnek yanıt
<!doctype html>
<!-- Hosted Wholly Crypto checkout application -->Kullanım notları
- Bearer token kabul edilmez ve gerekmez.
- Fatura yokken bile HTML kabuğu 200 döndürür; ardından ödeme sayfası JSON isteği invoice_not_found alır.
- Yanıt no-store, noindex ve faturaya özel frame-ancestors CSP içerir.
- Devre dışı proje/mağaza veya bilinmeyen fatura ödeme sayfası verilerini göstermez.
Hatalar
GETÖdeme sayfasında güvenle gösterilebilen fatura/checkout-api/invoices/{invoice_id}Herkese açık
Yalnızca ödeme sayfasını oluşturmak için gereken alanları döndürür. Dahili kimlikleri, müşteri e-postasını ve türetilmiş adres alanlarını, IPN URL'sini, satıcı meta verilerini, cüzdan kimliklerini, türetme yollarını ve izleme teşhislerini bilinçli olarak çıkarır.
Kimlik doğrulama ve üst bilgiler
Herkese açık
Yol parametreleri
İstek
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://pay.example.com/checkout-api/invoices/YOUR_PUBLIC_INVOICE_ID" \
--header 'Accept: application/json'// Node.js 18+ · run on your server, never in browser code.
const response = await fetch("https://pay.example.com/checkout-api/invoices/YOUR_PUBLIC_INVOICE_ID", {
method: "GET",
headers: {
"Accept": "application/json"
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$ch = curl_init("https://pay.example.com/checkout-api/invoices/YOUR_PUBLIC_INVOICE_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ["Accept: application/json"],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {
"Accept": "application/json"
}
request = Request("https://pay.example.com/checkout-api/invoices/YOUR_PUBLIC_INVOICE_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": {
"invoice_id": "0a6a98db-d93d-48ee-8c3c-fd45f90c4a50",
"order_id": "order-1042",
"description": "Annual plan",
"amount": "49.9",
"currency": "USD",
"exchange_rate_spread_percent": "0.5",
"underpayment_tolerance_percent": "1",
"status": "processing",
"amount_status": "partial",
"timing_status": "on_time",
"sequence": 3,
"active_payment_method_id": "33333333-3333-4333-8333-333333333333",
"payment_method_locked": true,
"server_time": "2026-08-31T18:10:00Z",
"expires_at": "2026-08-31T18:15:00Z",
"expires_in_seconds": 300,
"payment_open": true,
"redirect_url": "https://merchant.example/orders/1042",
"cancel_url": "https://merchant.example/cart",
"redirect_automatically": true,
"checkout_language": "en",
"project": {
"name": "Example project",
"checkout_title": "Complete your payment",
"checkout_description": "Send the exact amount shown.",
"theme": "system",
"accent_color": "#42e39b",
"logo_url": "/checkout-api/invoices/…/logo/…/image.png"
},
"store": { "name": "Online shop" },
"payment_methods": [
{
"id": "33333333-3333-4333-8333-333333333333",
"asset_key": "bip122:000000000019d6689c085ae165831e93/slip44:0",
"chain_slug": "bitcoin",
"chain_name": "Bitcoin",
"network": "mainnet",
"caip_network_id": "bip122:000000000019d6689c085ae165831e93",
"caip_asset_id": "bip122:000000000019d6689c085ae165831e93/slip44:0",
"asset_name": "Bitcoin",
"symbol": "BTC",
"asset_icon_url": "/assets/coingecko/bitcoin.png",
"asset_kind": "native",
"contract_address": null,
"token_standard": null,
"asset_decimals": 8,
"status": "partial",
"payable": true,
"finality_mode": "confirmations",
"required_confirmations": 1,
"expected_amount": "0.00046",
"expected_amount_atomic": "46000",
"minimum_payment_amount": "0.0004554",
"minimum_payment_amount_atomic": "45540",
"received_amount": "0.0002",
"received_amount_atomic": "20000",
"remaining_amount": "0.0002554",
"remaining_amount_atomic": "25540",
"confirmed_amount": "0",
"confirmed_amount_atomic": "0",
"destination_address": "bc1q…example",
"destination_tag": null,
"quote_expires_at": "2026-08-31T18:15:00Z",
"payment_uri": "bitcoin:bc1q…example?amount=0.00026",
"qr_url": "/checkout-api/invoices/…/payment-methods/…/qr.svg?sequence=3&amount_atomic=26000",
"address_explorer_name": "mempool.space",
"address_explorer_url": "https://mempool.space/address/…",
"transaction_count": 0,
"transactions_truncated": false,
"transactions": []
}
]
}
}Yanıt alanları
dataobject
exchange_rate_spread_percentdecimal stringher zamanFaturaya özel değer dahil, oluşturma anında kilitlenmiş geçerli teklif fiyat marjı.
underpayment_tolerance_percentdecimal stringher zamanBu fatura için kabul edilen eksik ödeme yüzdesi.
amount_statusamount statusher zamannone, partial, paid veya overpaid. Açıkça izin verilen sıfır tutarlı fatura none ile ve ödeme yöntemi olmadan tamamlanır.
active_payment_method_idUUID | nullher zamanFon almış olan listelenmiş ödeme yöntemi. Eksik ödemenin uyumsuz varlıkla sürdürülmesini önlemek için ödeme sayfası bu yöntemde kalır.
server_timeRFC 3339 timestampher zamanBu yanıt için alınan sunucu saati; müşteri cihazı saat sapmasını önlemek için expires_at ile kullan.
expires_in_secondsintegerher zamanserver_time anında kalan tam saniyeler; yukarı yuvarlanır ve sıfırın altına inmez.
payment_openbooleanher zamanYalnızca new veya processing fatura son tarihinden önceyse ve kalan tutarı olan en az bir ödenebilir yöntemi varsa true.
projectobjecther zaman
name, checkout_title, checkout_description, theme, accent_color ve logo_url.
appearanceobjecther zaman
Geçerli görünüm: sağlanmışsa faturaya özel sabitlenmiş ayar, aksi halde mağazanın güncel tasarımı. Finansal alanları veya güvenlik uyarılarını asla değiştirmez.
inherit_default_storebooleanher zamanBu görünümü projenin varsayılan mağazası sağlıyorsa true. Bağımsız mağazalar ve sabit fatura özel ayarlarında false.
invoice_overridebooleanher zamanFatura oluştururken checkout_appearance sağlandıysa true. Atlanması/null bunu false tutar.
titlestringher zamanDüz satıcı başlığı, üst mesaj ve alt mesaj. intro, customer_message yerine geçer; eski kayıtlı metin korunur. Asla işaretleme dili olarak yorumlama.
introstringher zamanDüz satıcı başlığı, üst mesaj ve alt mesaj. intro, customer_message yerine geçer; eski kayıtlı metin korunur. Asla işaretleme dili olarak yorumlama.
outrostringher zamanDüz satıcı başlığı, üst mesaj ve alt mesaj. intro, customer_message yerine geçer; eski kayıtlı metin korunur. Asla işaretleme dili olarak yorumlama.
customer_messagestringher zamanintro için kullanımdan kaldırılmış uyumluluk takma adı. Yeni entegrasyonlarda intro kullan.
accent_colorstringher zamanKesin #RRGGBB renkleri. Otomatik değerler için isteğe bağlı renkler boştur; ön plan kontrastı hesaplanır.
background_colorstringher zamanKesin #RRGGBB renkleri. Otomatik değerler için isteğe bağlı renkler boştur; ön plan kontrastı hesaplanır.
card_colorstringher zamanKesin #RRGGBB renkleri. Otomatik değerler için isteğe bağlı renkler boştur; ön plan kontrastı hesaplanır.
button_colorstringher zamanKesin #RRGGBB renkleri. Otomatik değerler için isteğe bağlı renkler boştur; ön plan kontrastı hesaplanır.
logo_sizestringher zamansmall, medium veya large; left veya center. Görseller kırpılmadan sığdırılır.
logo_alignmentstringher zamansmall, medium veya large; left veya center. Görseller kırpılmadan sığdırılır.
imagesobjecther zamanİsteğe bağlı logo_light, logo_dark ve favicon URL'leri: kapsamlı, aynı kökenli, normalleştirilmiş PNG görseller.
show_order_idbooleanher zamanSipariş kimliği görünürlüğü, başlık altı açıklaması ve başlangıçta sipariş kimliği ayrıntılarının açılması. Tutar görünür kalır; bunlar görüntüleme kontrolleridir, veri gizleme değildir.
show_descriptionbooleanher zamanSipariş kimliği görünürlüğü, başlık altı açıklaması ve başlangıçta sipariş kimliği ayrıntılarının açılması. Tutar görünür kalır; bunlar görüntüleme kontrolleridir, veri gizleme değildir.
details_expandedbooleanher zamanSipariş kimliği görünürlüğü, başlık altı açıklaması ve başlangıçta sipariş kimliği ayrıntılarının açılması. Tutar görünür kalır; bunlar görüntüleme kontrolleridir, veri gizleme değildir.
show_project_namebooleanher zamanMerchant 5.6.0+: başlıkta ad görünürlüğü. İkisi de varsayılan true. Proje/mağaza kimliği JSON'da kullanılabilir kalır.
show_store_namebooleanher zamanMerchant 5.6.0+: başlıkta ad görünürlüğü. İkisi de varsayılan true. Proje/mağaza kimliği JSON'da kullanılabilir kalır.
featured_chains[]arrayher zamanYalnızca faturada zaten bulunan yöntemlere uygulanan sıralı tercihler. Eksik veya devre dışı yöntemler yok sayılır.
featured_asset_ids[]arrayher zamanYalnızca faturada zaten bulunan yöntemlere uygulanan sıralı tercihler. Eksik veya devre dışı yöntemler yok sayılır.
default_asset_idUUID | nullher zamanÖnerilen başlangıç yöntemi. Geçerli hatırlanan müşteri tercihi veya zaten fon alan yöntem önceliklidir.
messagesobjecther zaman
waiting, confirming, paid, underpaid ve expired anahtarlı en, de, es, pt-BR, it, ru, zh-CN, fr, ko ve ja düz metinleri. Eksik satıcı mesajlarında İngilizceye dönülür. Tamamlayıcıdır; gerçek durumun yerini asla almaz. Satıcının yazdığı içerik otomatik çevrilmez.Ayrıntılar
waiting, confirming, paid, underpaid ve expired anahtarlı en, de, es, pt-BR, it, ru, zh-CN, fr, ko ve ja düz metinleri. Eksik satıcı mesajlarında İngilizceye dönülür. Tamamlayıcıdır; gerçek durumun yerini asla almaz. Satıcının yazdığı içerik otomatik çevrilmez.
support_emailstringher zamanURL kimlik bilgisi içermeyen isteğe bağlı iletişim ve HTTPS bağlantıları. Harici bağlantılar yeni pencerede açılır.
support_urlstringher zamanURL kimlik bilgisi içermeyen isteğe bağlı iletişim ve HTTPS bağlantıları. Harici bağlantılar yeni pencerede açılır.
terms_urlstringher zamanURL kimlik bilgisi içermeyen isteğe bağlı iletişim ve HTTPS bağlantıları. Harici bağlantılar yeni pencerede açılır.
privacy_urlstringher zamanURL kimlik bilgisi içermeyen isteğe bağlı iletişim ve HTTPS bağlantıları. Harici bağlantılar yeni pencerede açılır.
return_button_textstringher zamanYalnızca isteğe bağlı etiket. Başarı/iptal hedefleri ve yönlendirme politikası yine faturaya aittir.
show_return_buttonbooleanher zamanElle dönüş/iptal düğmesi görünürlüğü; varsayılan true. Otomatik başarı yönlendirmelerine değil, etkin ve son durumlara uygulanır. Merchant 8.1.4'ten itibaren kullanılabilir.
payment_methods[]object[]her zaman
Ödeme sayfasında güvenle gösterilebilen ödeme yöntemleri.
payment_railonchain | lightningher zamanLightning, zincir üstü BTC'den ayrı bir Bitcoin yöntemi olarak kalır. Seçimi yalnızca asset_id ile değil, ödeme isteği id'si ve altyapısıyla tanımla.
bolt11string | nullher zamanİmzalı Lightning isteği; zincir üstü yöntemlerde null. payable false olduktan sonra asla ödeme yapma.
payment_hashstring | nullher zamanÖdeme alma adresi değil, mutabakat için Lightning ödeme hash'i. Zincir üstü yöntemlerde null.
asset_idUUIDher zamanGörünüm tercihlerinin kullandığı varlık UUID'si; bu faturanın ödeme isteği id'sinden farklıdır.
caip_network_idstringher zamanSeçilen zinciri kesin olarak ayırt etmek için kullanılan kanonik ağ kimliği.
caip_asset_idstring | nullher zamanUygulanabilir olduğunda doğrulanmış token sözleşmesi veya mint dahil, kanonik tam varlık kimliği.
asset_icon_urlstring | nullher zamanAynı kökenli yerel önbellek varlık simgesi; doğrulanmış CoinGecko eşlemesi yoksa null.
contract_addressstring | nullher zamanToken'lar için kanonik ERC-20 sözleşmesi veya SPL mint'i; yerel para biriminde null.
token_standarderc20 | spl-token | nullher zamanDoğrulanmış token çalışma ortamı; yerel para biriminde null.
asset_decimalsintegerher zamanAtomik birim hassasiyeti: Lightning BTC millisatoshi için 11, zincir üstü BTC satoshi için 8.
payablebooleanher zamanYalnızca tam olarak bu yöntem şu anda ödeme kabul edebiliyorsa true; başka varlık fon aldıktan sonra etkin olmayan yöntemlerde false.
expected_amountdecimalher zamanGörüntülenen ve gerçek zincir üstü birimlerde kilitlenmiş tam teklif. Tanınan itibari para stablecoin'leri tekliflerde en fazla iki ondalık basamak kullanır ve fiyat marjından sonra hep yukarı yuvarlanır; diğer varlıklar uyarlanabilir hassasiyet kullanır. Gerçek token basamakları, alınan fonlar ve kısmi ödeme kalanları tam kalır. Döndürülen tutarları değiştirmeden kullan.Ayrıntılar
Görüntülenen ve gerçek zincir üstü birimlerde kilitlenmiş tam teklif. Tanınan itibari para stablecoin'leri tekliflerde en fazla iki ondalık basamak kullanır ve fiyat marjından sonra hep yukarı yuvarlanır; diğer varlıklar uyarlanabilir hassasiyet kullanır. Gerçek token basamakları, alınan fonlar ve kısmi ödeme kalanları tam kalır. Döndürülen tutarları değiştirmeden kullan.
expected_amount_atomicinteger stringher zamanGörüntülenen ve gerçek zincir üstü birimlerde kilitlenmiş tam teklif. Tanınan itibari para stablecoin'leri tekliflerde en fazla iki ondalık basamak kullanır ve fiyat marjından sonra hep yukarı yuvarlanır; diğer varlıklar uyarlanabilir hassasiyet kullanır. Gerçek token basamakları, alınan fonlar ve kısmi ödeme kalanları tam kalır. Döndürülen tutarları değiştirmeden kullan.Ayrıntılar
Görüntülenen ve gerçek zincir üstü birimlerde kilitlenmiş tam teklif. Tanınan itibari para stablecoin'leri tekliflerde en fazla iki ondalık basamak kullanır ve fiyat marjından sonra hep yukarı yuvarlanır; diğer varlıklar uyarlanabilir hassasiyet kullanır. Gerçek token basamakları, alınan fonlar ve kısmi ödeme kalanları tam kalır. Döndürülen tutarları değiştirmeden kullan.
minimum_payment_amountdecimalher zamanEksik ödeme toleransı uygulandıktan sonra kabul edilen ödeme tamamlama eşiği.
minimum_payment_amount_atomicinteger stringher zamanEksik ödeme toleransı uygulandıktan sonra kabul edilen ödeme tamamlama eşiği.
remaining_amountdecimal stringher zamanKabul eşiğine ulaşmak için hâlâ gereken tam gösterim tutarı; sıfırın altına inmez.
remaining_amount_atomicinteger stringher zamanAtomik birimlerde kabul eşiğine kalan eksik tutar. Bu istenen ödeme tutarı değildir: tolerans yalnızca kabulü etkiler.
destination_addressstringher zamanZincir üstü hedef ve isteğe bağlı referans. Lightning'de tag içermeyen ödeme hash'idir; bunun yerine bolt11/payment_uri öde.
destination_tagstring|nullher zamanZincir üstü hedef ve isteğe bağlı referans. Lightning'de tag içermeyen ödeme hash'idir; bunun yerine bolt11/payment_uri öde.
payment_uristring | nullher zamanZincire uygun istek: ERC-681, Solana Pay, yerel URI veya lightning:<bolt11>. Tutar içeren istekler tolerans eşiğini değil, tam beklenen tutardan alınan fonlar çıkarıldıktan sonrasını kullanır. Tolerans içindeki eksik ödeme kabul edildikten sonrası dahil, payable false ise null olur. Lightning QR ödeme hash'ini değil, tam Lightning isteğini kodlar.Ayrıntılar
Zincire uygun istek: ERC-681, Solana Pay, yerel URI veya lightning:<bolt11>. Tutar içeren istekler tolerans eşiğini değil, tam beklenen tutardan alınan fonlar çıkarıldıktan sonrasını kullanır. Tolerans içindeki eksik ödeme kabul edildikten sonrası dahil, payable false ise null olur. Lightning QR ödeme hash'ini değil, tam Lightning isteğini kodlar.
qr_urlpath | nullher zamanSıra ve tam kalan tutar revizyonlu, aynı kökenli SVG QR yolu; payable false ise null. SVG no-store'dur.
transaction_countintegerher zamanBu yöntemde gözlenen benzersiz, herkese açık, geçerli işlemlerin toplamı.
transactions_truncatedbooleanher zamantransaction_count döndürülen son işlem listesini aşıyorsa true.
transactions[]object[]her zaman
En yeni en fazla 10 herkese açık, geçerli işlem. Alınan tam toplamlar bu görüntüleme sınırından bağımsızdır.
Kullanım notları
- Bearer token gerekmez.
- Cache-Control no-store'dur ve arama indekslemesi kapalıdır.
- invoice_id değerini müşteriye yönelik erişim sağlayan veri olarak ele al; gereksiz yayımlama.
- asset_icon_url aynı kökenli yerel varlıktır; müşteri ödeme sayfası göstermek için CoinGecko'ya bağlanmak zorunda değildir.
- destination_tag null değilse adresin yanında göster ve kopyala: zorunlu XRP destination tag, Stellar memo ID veya TON fatura açıklamasıdır ve aynen gönderilmelidir.
- Doğrulanmış token'larda asset_kind token olur; contract_address tam ERC-20 sözleşmesini veya SPL mint'ini, token_standard altyapıyı tanımlar; payment_uri token kimliğini taşır.
Hatalar
GETMağaza ödeme sayfası önizlemesi/invoice/preview/{project_id}Herkese açık
Kaydedilen mağaza görünümünü örnek tutar ve gerçek kabul edilen varlık meta verileriyle gösterir. Ödeme oluşturmadan waiting, confirming, paid, underpaid ve expired örnekleri arasında geçiş yap.
Kimlik doğrulama ve üst bilgiler
Herkese açık
Yol parametreleri
Sorgu parametreleri
İstek
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://pay.example.com/invoice/preview/YOUR_PROJECT_ID?store_id=YOUR_STORE_ID&state=confirming" \
--output 'checkout-preview.html'// Node.js 18+ · run on your server, never in browser code.
import { writeFile } from "node:fs/promises";
const response = await fetch("https://pay.example.com/invoice/preview/YOUR_PROJECT_ID?store_id=YOUR_STORE_ID&state=confirming", {
method: "GET",
headers: {},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
await writeFile("checkout-preview.html", Buffer.from(await response.arrayBuffer()));<?php
// PHP 8+ with the cURL extension; run on your server.
$ch = curl_init("https://pay.example.com/invoice/preview/YOUR_PROJECT_ID?store_id=YOUR_STORE_ID&state=confirming");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => [],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
file_put_contents("checkout-preview.html", $response);# Python 3 · standard library; run on your server.
import json
from pathlib import Path
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
request = Request("https://pay.example.com/invoice/preview/YOUR_PROJECT_ID?store_id=YOUR_STORE_ID&state=confirming",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
Path("checkout-preview.html").write_bytes(response.read())Yanıt 200 text/html
Örnek yanıt
<!doctype html>
<!-- Hosted branding preview; no invoice is created -->Kullanım notları
- Önizleme yalnızca markalama içindir; müşteriye asla ödeme isteği olarak gönderilmemelidir.
- Ödeme alma adresi, ödenebilir QR, cüzdan işlemi, yönlendirme veya ödeme sorgulaması yok. Örnekler gerçek fatura durumunu değiştirmez.
- Yanıt no-store, noindex'dir ve gömülemez.
Hatalar
GETÖdeme sayfası önizleme verileri/checkout-api/previews/{project_id}Herkese açık
Geçerli mağaza görünümünü ve güvenli kabul edilen varlık meta verilerini döndürür. payment_methods boş kalır; preview_methods ödeme adresi, teklif veya özel cüzdan verisi içermez.
Kimlik doğrulama ve üst bilgiler
Herkese açık
Yol parametreleri
Sorgu parametreleri
store_idUUID,isteğe bağlıBu projeye ait olmalıdır; eşleşmeyen kimlikler 404 döndürür. Bilinmeyen sorgu alanları reddedilir.
İstek
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://pay.example.com/checkout-api/previews/YOUR_PROJECT_ID?store_id=YOUR_STORE_ID" \
--header 'Accept: application/json'// Node.js 18+ · run on your server, never in browser code.
const response = await fetch("https://pay.example.com/checkout-api/previews/YOUR_PROJECT_ID?store_id=YOUR_STORE_ID", {
method: "GET",
headers: {
"Accept": "application/json"
},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$ch = curl_init("https://pay.example.com/checkout-api/previews/YOUR_PROJECT_ID?store_id=YOUR_STORE_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ["Accept: application/json"],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {
"Accept": "application/json"
}
request = Request("https://pay.example.com/checkout-api/previews/YOUR_PROJECT_ID?store_id=YOUR_STORE_ID",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))Yanıt 200 application/json
Örnek yanıt
{
"data": {
"preview": true,
"invoice_id": "YOUR_PROJECT_ID",
"amount": "100.00",
"currency": "USD",
"project": {
"name": "Example project",
"checkout_title": "Complete your payment",
"checkout_description": "Choose a network and send the exact amount shown.",
"theme": "system",
"accent_color": "#42e39b",
"logo_url": "/checkout-api/previews/…/logo/…/image.png"
},
"appearance": {"inherit_default_store": true, "theme": "system", "accent_color": "#42E39B", "images": {}},
"preview_methods": [],
"payment_methods": []
}
}Yanıt alanları
dataobject
previewbooleaninvoice_idstringamountstringcurrencystringprojectobject
appearanceobject
inherit_default_storebooleanher zamanBu görünümü projenin varsayılan mağazası sağlıyorsa true. Bağımsız mağazalar ve sabit fatura özel ayarlarında false.
invoice_overridebooleanher zamanFatura oluştururken checkout_appearance sağlandıysa true. Atlanması/null bunu false tutar.
titlestringher zamanDüz satıcı başlığı, üst mesaj ve alt mesaj. intro, customer_message yerine geçer; eski kayıtlı metin korunur. Asla işaretleme dili olarak yorumlama.
introstringher zamanDüz satıcı başlığı, üst mesaj ve alt mesaj. intro, customer_message yerine geçer; eski kayıtlı metin korunur. Asla işaretleme dili olarak yorumlama.
outrostringher zamanDüz satıcı başlığı, üst mesaj ve alt mesaj. intro, customer_message yerine geçer; eski kayıtlı metin korunur. Asla işaretleme dili olarak yorumlama.
customer_messagestringher zamanintro için kullanımdan kaldırılmış uyumluluk takma adı. Yeni entegrasyonlarda intro kullan.
accent_colorstringher zamanKesin #RRGGBB renkleri. Otomatik değerler için isteğe bağlı renkler boştur; ön plan kontrastı hesaplanır.
background_colorstringher zamanKesin #RRGGBB renkleri. Otomatik değerler için isteğe bağlı renkler boştur; ön plan kontrastı hesaplanır.
card_colorstringher zamanKesin #RRGGBB renkleri. Otomatik değerler için isteğe bağlı renkler boştur; ön plan kontrastı hesaplanır.
button_colorstringher zamanKesin #RRGGBB renkleri. Otomatik değerler için isteğe bağlı renkler boştur; ön plan kontrastı hesaplanır.
logo_sizestringher zamansmall, medium veya large; left veya center. Görseller kırpılmadan sığdırılır.
logo_alignmentstringher zamansmall, medium veya large; left veya center. Görseller kırpılmadan sığdırılır.
imagesobjecther zamanİsteğe bağlı logo_light, logo_dark ve favicon URL'leri: kapsamlı, aynı kökenli, normalleştirilmiş PNG görseller.
show_order_idbooleanher zamanSipariş kimliği görünürlüğü, başlık altı açıklaması ve başlangıçta sipariş kimliği ayrıntılarının açılması. Tutar görünür kalır; bunlar görüntüleme kontrolleridir, veri gizleme değildir.
show_descriptionbooleanher zamanSipariş kimliği görünürlüğü, başlık altı açıklaması ve başlangıçta sipariş kimliği ayrıntılarının açılması. Tutar görünür kalır; bunlar görüntüleme kontrolleridir, veri gizleme değildir.
details_expandedbooleanher zamanSipariş kimliği görünürlüğü, başlık altı açıklaması ve başlangıçta sipariş kimliği ayrıntılarının açılması. Tutar görünür kalır; bunlar görüntüleme kontrolleridir, veri gizleme değildir.
show_project_namebooleanher zamanMerchant 5.6.0+: başlıkta ad görünürlüğü. İkisi de varsayılan true. Proje/mağaza kimliği JSON'da kullanılabilir kalır.
show_store_namebooleanher zamanMerchant 5.6.0+: başlıkta ad görünürlüğü. İkisi de varsayılan true. Proje/mağaza kimliği JSON'da kullanılabilir kalır.
featured_chains[]arrayher zamanYalnızca faturada zaten bulunan yöntemlere uygulanan sıralı tercihler. Eksik veya devre dışı yöntemler yok sayılır.
featured_asset_ids[]arrayher zamanYalnızca faturada zaten bulunan yöntemlere uygulanan sıralı tercihler. Eksik veya devre dışı yöntemler yok sayılır.
default_asset_idUUID | nullher zamanÖnerilen başlangıç yöntemi. Geçerli hatırlanan müşteri tercihi veya zaten fon alan yöntem önceliklidir.
messagesobjecther zaman
waiting, confirming, paid, underpaid ve expired anahtarlı en, de, es, pt-BR, it, ru, zh-CN, fr, ko ve ja düz metinleri. Eksik satıcı mesajlarında İngilizceye dönülür. Tamamlayıcıdır; gerçek durumun yerini asla almaz. Satıcının yazdığı içerik otomatik çevrilmez.Ayrıntılar
waiting, confirming, paid, underpaid ve expired anahtarlı en, de, es, pt-BR, it, ru, zh-CN, fr, ko ve ja düz metinleri. Eksik satıcı mesajlarında İngilizceye dönülür. Tamamlayıcıdır; gerçek durumun yerini asla almaz. Satıcının yazdığı içerik otomatik çevrilmez.
support_emailstringher zamanURL kimlik bilgisi içermeyen isteğe bağlı iletişim ve HTTPS bağlantıları. Harici bağlantılar yeni pencerede açılır.
support_urlstringher zamanURL kimlik bilgisi içermeyen isteğe bağlı iletişim ve HTTPS bağlantıları. Harici bağlantılar yeni pencerede açılır.
terms_urlstringher zamanURL kimlik bilgisi içermeyen isteğe bağlı iletişim ve HTTPS bağlantıları. Harici bağlantılar yeni pencerede açılır.
privacy_urlstringher zamanURL kimlik bilgisi içermeyen isteğe bağlı iletişim ve HTTPS bağlantıları. Harici bağlantılar yeni pencerede açılır.
return_button_textstringher zamanYalnızca isteğe bağlı etiket. Başarı/iptal hedefleri ve yönlendirme politikası yine faturaya aittir.
show_return_buttonbooleanher zamanElle dönüş/iptal düğmesi görünürlüğü; varsayılan true. Otomatik başarı yönlendirmelerine değil, etkin ve son durumlara uygulanır. Merchant 8.1.4'ten itibaren kullanılabilir.
preview_methods[]arraypayment_methods[]arrayKullanım notları
- Bearer token kabul edilmez ve gerekmez.
- Fatura, hedef, cüzdan, işlem, IPN, webhook veya satıcı meta verisi döndürülmez.
- Doğru ödeme alan adı önizleme bağlantısını almak için kimlik doğrulamalı konsolu kullan.
Hatalar
GETMağaza ödeme sayfası görseli/checkout-api/invoices/{invoice_id}/appearance-images/{kind}/{revision}/image.pngHerkese açık
Bu faturaya ait normalleştirilmiş mağaza logosu veya favicon döndürür. Ödeme sayfası verilerindeki appearance.images URL'lerini kullan.
Kimlik doğrulama ve üst bilgiler
Herkese açık
Yol parametreleri
İstek
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://pay.example.com/checkout-api/invoices/YOUR_PUBLIC_INVOICE_ID/appearance-images/logo_light/YOUR_IMAGE_REVISION/image.png" \
--output 'store-logo.png'// Node.js 18+ · run on your server, never in browser code.
import { writeFile } from "node:fs/promises";
const response = await fetch("https://pay.example.com/checkout-api/invoices/YOUR_PUBLIC_INVOICE_ID/appearance-images/logo_light/YOUR_IMAGE_REVISION/image.png", {
method: "GET",
headers: {},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
await writeFile("store-logo.png", Buffer.from(await response.arrayBuffer()));<?php
// PHP 8+ with the cURL extension; run on your server.
$ch = curl_init("https://pay.example.com/checkout-api/invoices/YOUR_PUBLIC_INVOICE_ID/appearance-images/logo_light/YOUR_IMAGE_REVISION/image.png");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => [],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
file_put_contents("store-logo.png", $response);# Python 3 · standard library; run on your server.
import json
from pathlib import Path
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
request = Request("https://pay.example.com/checkout-api/invoices/YOUR_PUBLIC_INVOICE_ID/appearance-images/logo_light/YOUR_IMAGE_REVISION/image.png",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
Path("store-logo.png").write_bytes(response.read())Yanıt 200 image/png
Örnek yanıt
(binary PNG response)Kullanım notları
- Ödeme sayfası JSON'undaki appearance.images kullan. Sabitlenmiş fatura görselleri kaynak mağaza yüklemeyi değiştirse veya kaldırsa da çalışır. Açıkça kaldırılmış, yanlış faturalı, yanlış türde ve bilinmeyen revizyonlar 404 döndürür; görüntü asla güncel mağaza görseline dönmez.
- Faturaya özel ayar yoksa güncel geçerli mağaza görseli kullanılır; değiştirilmiş/kaldırılmış revizyonlar 404 döndürür. Yalnızca PNG; nosniff ve özel önbellekleme.
- Mağaza görsel yüklemeleri kimlik doğrulamalı konsolda sınırlandırılmış PNG, JPEG veya WebP kabul eder; SVG, HTML veya uzak görsel URL'si asla kabul edilmez.
Hatalar
GETMağaza önizleme görseli/checkout-api/previews/{project_id}/stores/{store_id}/appearance-images/{kind}/{revision}/image.pngHerkese açık
Normalleştirilmiş önizleme görselini yalnızca proje, mağaza, tür ve güncel revizyon eşleştiğinde döndürür.
Kimlik doğrulama ve üst bilgiler
Herkese açık
Yol parametreleri
İstek
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://pay.example.com/checkout-api/previews/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/appearance-images/logo_light/YOUR_IMAGE_REVISION/image.png" \
--output 'store-preview-logo.png'// Node.js 18+ · run on your server, never in browser code.
import { writeFile } from "node:fs/promises";
const response = await fetch("https://pay.example.com/checkout-api/previews/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/appearance-images/logo_light/YOUR_IMAGE_REVISION/image.png", {
method: "GET",
headers: {},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
await writeFile("store-preview-logo.png", Buffer.from(await response.arrayBuffer()));<?php
// PHP 8+ with the cURL extension; run on your server.
$ch = curl_init("https://pay.example.com/checkout-api/previews/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/appearance-images/logo_light/YOUR_IMAGE_REVISION/image.png");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => [],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
file_put_contents("store-preview-logo.png", $response);# Python 3 · standard library; run on your server.
import json
from pathlib import Path
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
request = Request("https://pay.example.com/checkout-api/previews/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/appearance-images/logo_light/YOUR_IMAGE_REVISION/image.png",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
Path("store-preview-logo.png").write_bytes(response.read())Yanıt 200 image/png
Örnek yanıt
(binary PNG response)Kullanım notları
- Önizleme verilerindeki appearance.images kullan. Bilinmeyen veya eşleşmeyen kimlikler 404 döndürür. Cüzdan veya ödeme bilgisi açığa çıkarılmaz.
Hatalar
GETRevizyonlu önizleme logosu/checkout-api/previews/{project_id}/logo/{revision}/image.pngHerkese açık
Normalleştirilmiş proje logosunu yalnızca proje ve önbelleğe uygun logo revizyonu eşleştiğinde döndürür. Bu URL'yi kendin kurmak yerine önizleme verilerindeki project.logo_url kullan.
Kimlik doğrulama ve üst bilgiler
Herkese açık
Yol parametreleri
İstek
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://pay.example.com/checkout-api/previews/YOUR_PROJECT_ID/logo/YOUR_LOGO_REVISION/image.png" \
--output 'checkout-preview-logo.png'// Node.js 18+ · run on your server, never in browser code.
import { writeFile } from "node:fs/promises";
const response = await fetch("https://pay.example.com/checkout-api/previews/YOUR_PROJECT_ID/logo/YOUR_LOGO_REVISION/image.png", {
method: "GET",
headers: {},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
await writeFile("checkout-preview-logo.png", Buffer.from(await response.arrayBuffer()));<?php
// PHP 8+ with the cURL extension; run on your server.
$ch = curl_init("https://pay.example.com/checkout-api/previews/YOUR_PROJECT_ID/logo/YOUR_LOGO_REVISION/image.png");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => [],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
file_put_contents("checkout-preview-logo.png", $response);# Python 3 · standard library; run on your server.
import json
from pathlib import Path
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
request = Request("https://pay.example.com/checkout-api/previews/YOUR_PROJECT_ID/logo/YOUR_LOGO_REVISION/image.png",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
Path("checkout-preview-logo.png").write_bytes(response.read())Yanıt 200 image/png
Örnek yanıt
(binary PNG response)Kullanım notları
- Bilinmeyen projeler ve eski logo revizyonları, hangi bileşenin eksik olduğunu açıklamadan invoice_not_found döndürür.
- Başarılı revizyonlu görsel değiştirilemezdir ve önbelleğe alınabilir.
Hatalar
GETÖdeme QR görseli/checkout-api/invoices/{invoice_id}/payment-methods/{intent_id}/qr.svgHerkese açık
Fatura ödeme yönteminin zincire uygun tam ödeme yükü için 512×512 SVG QR üretir.
Kimlik doğrulama ve üst bilgiler
Herkese açık
Yol parametreleri
İstek
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://pay.example.com/checkout-api/invoices/YOUR_PUBLIC_INVOICE_ID/payment-methods/YOUR_INTENT_ID/qr.svg" \
--output 'payment-qr.svg'// Node.js 18+ · run on your server, never in browser code.
import { writeFile } from "node:fs/promises";
const response = await fetch("https://pay.example.com/checkout-api/invoices/YOUR_PUBLIC_INVOICE_ID/payment-methods/YOUR_INTENT_ID/qr.svg", {
method: "GET",
headers: {},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
await writeFile("payment-qr.svg", Buffer.from(await response.arrayBuffer()));<?php
// PHP 8+ with the cURL extension; run on your server.
$ch = curl_init("https://pay.example.com/checkout-api/invoices/YOUR_PUBLIC_INVOICE_ID/payment-methods/YOUR_INTENT_ID/qr.svg");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => [],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
file_put_contents("payment-qr.svg", $response);# Python 3 · standard library; run on your server.
import json
from pathlib import Path
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
request = Request("https://pay.example.com/checkout-api/invoices/YOUR_PUBLIC_INVOICE_ID/payment-methods/YOUR_INTENT_ID/qr.svg",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
Path("payment-qr.svg").write_bytes(response.read())Yanıt 200 image/svg+xml
Örnek yanıt
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">…</svg>Kullanım notları
- Bearer token gerekmez.
- Ödeme sayfası JSON'unun döndürdüğü sıra ve kalan tutar revizyonlu qr_url kullan; SVG private ve no-store'dur.
- Kısmi ödemeden sonra tam kalan tutarı ister ve o varlığa kilitli kalır.
- Süre dolunca, tamamlanınca veya başka yöntem etkinken 409 döndürür; istek kodlanamayacak kadar büyükse payment_qr_unavailable (422) döner.
Hatalar
GETRevizyonlu ödeme sayfası logosu/checkout-api/invoices/{invoice_id}/logo/{revision}/image.pngHerkese açık
Normalleştirilmiş proje ödeme sayfası logosunu yalnızca fatura ve güncel logo revizyonu eşleştiğinde döndürür. Rotayı kendin kurmak yerine ödeme sayfası JSON'unun döndürdüğü project.logo_url tercih et.
Kimlik doğrulama ve üst bilgiler
Herkese açık
Yol parametreleri
İstek
curl --fail-with-body --max-time 30 \
--request GET \
--url "https://pay.example.com/checkout-api/invoices/YOUR_PUBLIC_INVOICE_ID/logo/YOUR_LOGO_REVISION/image.png" \
--output 'checkout-logo.png'// Node.js 18+ · run on your server, never in browser code.
import { writeFile } from "node:fs/promises";
const response = await fetch("https://pay.example.com/checkout-api/invoices/YOUR_PUBLIC_INVOICE_ID/logo/YOUR_LOGO_REVISION/image.png", {
method: "GET",
headers: {},
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
await writeFile("checkout-logo.png", Buffer.from(await response.arrayBuffer()));<?php
// PHP 8+ with the cURL extension; run on your server.
$ch = curl_init("https://pay.example.com/checkout-api/invoices/YOUR_PUBLIC_INVOICE_ID/logo/YOUR_LOGO_REVISION/image.png");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => [],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
file_put_contents("checkout-logo.png", $response);# Python 3 · standard library; run on your server.
import json
from pathlib import Path
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {}
request = Request("https://pay.example.com/checkout-api/invoices/YOUR_PUBLIC_INVOICE_ID/logo/YOUR_LOGO_REVISION/image.png",
method="GET", headers=headers)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
Path("checkout-logo.png").write_bytes(response.read())Yanıt 200 image/png
Örnek yanıt
(binary PNG response)Kullanım notları
- Bearer token gerekmez.
- Revizyon içeriği adresleyen durum olduğu için herkese açık önbellek ömrü immutable ile bir yıldır.
- Bilinmeyen/eşleşmeyen revizyonlar invoice_not_found döndürür.
Hatalar
Wholly Crypto 8.3.2 başvuru kaynağı. Kurulu sürümün için konsolunda Ayarlar → API erişimi → Belgeler bölümünü aç. Sürümleri gör.