Geliştiriciler/Başlarken
Genel kurallar
Yedi uç noktanın hepsinde geçerli olan kurallar.
İlgili: Kimlik doğrulama · Ürünler ve siparişler · README
#İstekler
- API adresi:
https://b2b.cardv.net/api/v1(Live) veyahttps://sandbox.cardv.net/api/v1(Sandbox). - Yollar eğik çizgiyle bitmez.
/api/v1/orders/değil,/api/v1/orderskullanın. - JSON gövdelerini UTF-8 olarak ve
Content-Type: application/jsonbaşlığıyla gönderin. - Tutarları metin olarak gönderin, örneğin
"9.2500". Böylece yuvarlama hatası oluşmaz. - Anlaşılır bir
User-Agentbelirleyin, örneğinAcmeShop-CardV/1.4.
#Para ve zaman
- Tutarlar 4 ondalık basamaklı metinlerdir, örneğin
"merchant_price": "9.2500". - Tutarları ondalık (decimal) bir türle okuyun, asla kayan noktalı sayıyla değil.
- Ödemeyi cüzdanınızın para biriminde yaparsınız (
GET/accountiçindekidefault_currency, şu an USD). face_currency, kartın üzerinde yazan para birimidir. Cüzdanınızın para biriminden farklı olabilir.- Maliyet hesabında her zaman
merchant_pricedeğerini kullanın.price_labelgibi etiketler yalnızca görüntüleme içindir. - Tüm zamanlar UTC'dir ve ISO 8601 biçimindedir, örneğin
2026-09-29T08:15:30.123456Z. - Gerçek bir ISO 8601 ayrıştırıcısı kullanın. Saniyedeki ondalık basamak sayısı değişebilir.
- İmzalamada kullanılan
X-Timestamp, saniye cinsinden Unix zamanıdır.
#Numaralar
| Ne | Örnek | Not |
|---|---|---|
| Merchant ID | M00000001 | Hiç değişmez. |
| SKU numarası | S000456 | Fiyat sorgusu ve sipariş için kullanılır. |
| Ürün numarası | P000123 | SKU'nun bağlı olduğu ürün. |
| CardV sipariş numarası | O-00001234 | Siparişi okumak için kullanılır. |
| Kendi sipariş numaranız | SHOP-10001 | external_order_id, 1–120 karakter, benzersiz. |
- Numaraları metin olarak saklayın. İçlerini ayrıştırmaya çalışmayın. İleride uzayabilirler.
- Siparişlerde ayrıca sayısal bir
idalanı da vardır. Onu kullanmayın,order_idkullanın. - Kendi sipariş numaranızda yalnızca şu karakterleri kullanın:
A–Z a–z 0–9 - _ ..
#Sayfalama
Yalnızca GET/skus sayfalıdır. limit ve offset gönderin:
GET /api/v1/skus?limit=100&offset=200{"count": 1234, "limit": 100, "results": ["..."], "filter_options": {}}limitvarsayılan olarak 100'dür, en fazla 500 olabilir. Daha büyük değerler 500'e düşürülür.count, toplam sonuç sayısıdır.offsetdeğericountdeğerine ulaşana kadar devam edin.- Negatif ya da sayı olmayan bir
limitveyaoffsetHTTP 400 döner. - Bilinmeyen bir filtre değeri hata vermez, boş liste döner.
#İstek limiti
Varsayılan limit, hesabınızın tamamı için dakikada 60 istektir. Tüm anahtarlarınız ve Portal kullanıcılarınız bu limiti paylaşır. Hesap seviyenize göre farklı bir limit tanımlanmış olabilir.
Dakika, saatte
:00anında başlar. Reddedilen istekler de sayılır.Limiti aşarsanız HTTP 429 ve
Retry-Afterbaşlığı (beklemeniz gereken saniye) alırsınız:{"detail": "Merchant API rate limit exceeded. Expected available in 23 seconds."}Limitin altında kalmak için: SKU listesini önbelleğe alın, sık sorgulamak yerine Webhook kullanın ve her 429 yanıtından sonra biraz daha uzun bekleyin.
#Hatalar
Önce her zaman HTTP durum kodunu kontrol edin. Sonra JSON gövdesini okuyun. Sorunun ne olduğunu gövdedeki anahtar (alan adı) söyler. Mesaj metnine güvenmeyin.
Kimlik doğrulama, yetki, bulunamadı ve istek limiti hataları detail kullanır:
{"detail": "Order not found."}Sipariş ve fiyat sorgusu hataları ilgili alanın adını verir:
{"balance": "Insufficient available balance."}Hatalı bir sipariş satırı, items listenizdeki sırasıyla, satır satır bildirilir:
{"items": [{}, {"quantity": ["Ensure this value is greater than or equal to 1."]}]}| Anahtar | Nerede | Ne yapmalı |
|---|---|---|
detail | Her yerde | Aşağıdaki durum koduna bakın. |
items | POST/orders | Satırı düzeltin. Fiyat değiştiyse yeniden fiyat sorgulayın. |
balance | POST/orders | Portal'dan bakiye yükleyin. |
risk | POST/orders | Bir sipariş limitine takıldınız. CardV ile iletişime geçin. |
external_order_id | POST/orders | Sipariş numarası eksik, çok uzun veya başka bir siparişte kullanılmış. |
wallet | POST/orders | Aktif cüzdan yok. CardV ile iletişime geçin. |
quantity, amount | Fiyat sorgusu | Aralık dışında veya sayı değil. |
limit, offset | GET/skus | Geçerli bir sayı değil. |
Bazı hatalar JSON değildir:
error code: 1010gibi düz metinli bir HTTP 403, CardV'nin ağ katmanından gelir. İsteğiniz CardV'ye hiç ulaşmamıştır. Sunucu IP adresinizi veUser-Agentdeğerinizi CardV'ye iletin.- Bilinmeyen bir yol (404) veya proxy hatası (5xx) HTML dönebilir.
Hataları kaydederken API anahtarlarını, imzaları veya kodları asla loglara yazmayın.
#HTTP durum kodları
| Durum | Anlamı | Tekrar denenir mi? |
|---|---|---|
| 200 | Başarılı. POST/orders için: sipariş zaten vardı. | Gerek yok |
| 201 | Yeni bir sipariş oluşturuldu. | Gerek yok |
| 400 | İstek reddedildi. Hiçbir ücret alınmadı. | Düzelttikten sonra |
| 403 | Kimlik bilgileri, imza, IP veya yalnızca Portal'a açık bir uç nokta. | Düzelttikten sonra |
| 404 | Bulunamadı veya hesabınıza açık değil. | Hayır |
| 405 | Bu yol için yanlış HTTP yöntemi. | Hayır |
| 429 | Çok fazla istek. | Retry-After sonrasında |
| 5xx veya zaman aşımı | Sunucu veya ağ sorunu. Sipariş oluşmuş olabilir. | Evet, aşağıya bakın |
POST/orders isteğini yalnızca aynı gövde ve aynı sipariş numarasıyla tekrar deneyin.
Bkz. güvenli yeniden deneme akışı.
#Yanıtlar
brand_logo_urlveimage_url, CardV'de barındırılan görsellerin tam adresleridir ya da""değerindedir. Herkese açıktır ve önbelleğe alınabilir.- Siparişteki
invoice_urlvedelivery_file_urlalanları/orders/O-00001234/invoicegibi yollardır. Henüz bir şey yoksa""olur. Bu adresler yalnızca Portal'da çalışır: API anahtarıyla çağrıldığında HTTP 403 döner. Faturaları ve kodların CSV dosyalarını Portal'dan açın.
#Uyumluluk
- Tanımadığınız alanları yok sayın. CardV, yeni API sürümü çıkarmadan alan ekleyebilir.
- Yeni durum değerleri eklenebilir. Bilinmeyen bir durumu "henüz tamamlanmadı" olarak değerlendirin.
- JSON anahtarlarının sırasına veya mesajların metnine güvenmeyin.
Entegrasyonla ilgili sorunuz mu var? Merchant ID’nizi ve sipariş ya da istek kimliğini ekleyerek [email protected] adresine yazın.