Genel bakış
Ürün, stok ve fiyat verisi bu API ile Bicops’a gönderilir. Sipariş ve finans verisi aynı API üzerinden alınır. Toplu istekler kuyrukta işlenir; yanıt 202 ve bir iş kimliğidir (batchId).
Sürüm: /v1. Alan adları değişmez. Yanıt mesajları İngilizcedir; code alanı sabittir.
- JSON, UTF-8, ISO-8601 (UTC)
- Her yanıtta X-Request-Id başlığı bulunur
- Hatalı satırlar reddedilir, geçerli satırlar işlenir
- Aynı sourceId ile gönderilen kayıt güncellenir
/v1/me/v1/catalog/products/v1/catalog/stock · /v1/catalog/prices/v1/catalog/products/{sourceId}/v1/catalog/imports → /{batchId}/complete/v1/catalog/products · /v1/catalog/batches/{id} · /v1/logs/requestsKimlik doğrulama
Her istekte X-Api-Key ve X-Api-Secret başlıkları gönderilir. Anahtar Bicops tarafından tanımlanır; gizli anahtar yalnızca oluşturulurken görüntülenir.
Satıcı kimliği anahtardan alınır. Gövdede satıcı kimliği gönderilmez. Anahtar yalnızca kendi hesabının verisine erişir. Yetkiler kapsam ile belirlenir (catalog:read, catalog:write, orders:read).
IP izin listesi ve son kullanma tarihi tanımlanabilir. Yenileme sırasında iki anahtar birlikte aktif olabilir.
X-Api-Key: 2c1d5c7e-2a1b-4c1e-9d7a-2b6f0e3c9a11
X-Api-Secret: 4Qb…(base64url, 43 chars)
Content-Type: application/json
X-Request-Id: optional-your-correlation-idBağlantı testi: GET /v1/me. Yanıtta anahtarın kapsamları ve limitleri yer alır.
Anahtar tipleri
İki tip anahtar vardır ve kapsamları farklıdır. Yanlış tiple çağrılan servis 403 döner.
Satıcı anahtarı | Katalog, siparişler, iadeler, faturalar, finans, raporlar, iş kayıtları, webhook. Satıcı hesabına bağlıdır. |
Kurum anahtarı | Cari hesaplar, ekstre, tahsilat makbuzları, satış faturaları, plasiyer atamaları. Şirket şubesine bağlıdır. |
Her ikisi | GET /v1/me, GET /v1/logs/requests, webhook abonelikleri ve GET /v1/events. |
Başlangıç
1. Bağlantı testi
curl -s https://partner.bicops.tr/v1/me \
-H "X-Api-Key: 2c1d5c7e-2a1b-4c1e-9d7a-2b6f0e3c9a11" \
-H "X-Api-Secret: <your-secret>"
2. Ürün gönderimi (en fazla 1.000 kayıt). Yanıt: 202 ve batchId.
curl -s -X POST https://partner.bicops.tr/v1/catalog/products \
-H "X-Api-Key: <key>" -H "X-Api-Secret: <secret>" \
-H "Content-Type: application/json" \
-d '{
"items": [{
"sourceId": "SACHS 317 572",
"name": "AMORTISOR ON AUDI A3 / GOLF V",
"brand": "SACHS",
"producerCode": "317 572",
"oemCodes": ["1T0413031CN", "1T0413031CK"],
"equivalentCodes": ["FEBI 106124"],
"price": 3869.60, "currency": "TRY", "pricesIncludeVat": false,
"stock": 12,
"warehouses": [{ "code": "ANK", "stock": 8 }, { "code": "IZM", "stock": 4 }],
"minOrder": 1, "packageAmount": 1, "unit": "AD", "desi": 3.2,
"images": ["https://cdn.example.com/317572.jpg"],
"status": 1
}]
}'HTTP/1.1 202 Accepted
X-Request-Id: 7c0e1c5a-…
{
"batchId": 1042, "status": "queued",
"received": 1, "accepted": 1, "rejected": 0, "warnings": 0,
"chunks": 1, "dryRun": false, "issues": [], "requestId": "7c0e1c5a-…"
}
3. İş kaydı sorgusu: durum, sayılar, satır hataları.
curl -s https://partner.bicops.tr/v1/catalog/batches/1042 -H "X-Api-Key: <key>" -H "X-Api-Secret: <secret>"
curl -s https://partner.bicops.tr/v1/catalog/batches/1042/errors.csv -H "X-Api-Key: <key>" -H "X-Api-Secret: <secret>" -o errors.csv
4. Stok ve fiyat güncellemesi (en fazla 5.000 kayıt).
curl -s -X PATCH https://partner.bicops.tr/v1/catalog/stock \
-H "X-Api-Key: <key>" -H "X-Api-Secret: <secret>" -H "Content-Type: application/json" \
-d '{"items":[{"sourceId":"SACHS 317 572","stock":9,"warehouses":[{"code":"ANK","stock":5},{"code":"IZM","stock":4}]}]}'Katalog
POST /v1/catalog/products kayıtları sourceId ile ekler veya günceller. Yalnızca değişen kayıtlar işlenir.
Alanlar
| Alan | Tip | Açıklama |
|---|---|---|
sourceId | string (≤200) | Zorunlu. Satıcı stok kodu. En fazla 200 karakter. |
name | string (≤4000) | Aktif ürün için zorunlu. |
brand | string (≤200) | Marka adı. |
producerCode, previousCode | string (≤200) | Üretici parça numarası ve önceki numara. |
oemCodes[] | string[] (≤200 items, each ≤100) | OEM numaraları, dizi olarak. Numaralar birleştirilmez. |
equivalentCodes[] | string[] (≤200 items) | Muadil numaralar ("MARKA NUMARA"). |
price, currency, pricesIncludeVat | decimal · string(3) · boolean | Liste fiyatı. TRY, USD veya EUR. |
stock, warehouses[] | decimal · object[] {code: string, stock: decimal} | Toplam stok ve depo kırılımı [{code, stock}]. |
minOrder, packageAmount, boxAmount, unit | integer · integer · integer · string(≤16) | Sipariş kuralları. |
desi, weight | decimal · decimal | Desi ve ağırlık (kg). |
images[] | string[] (URL, ≤10) | Görsel adresleri (https). |
status | integer (0 | 1) | 1 aktif, 0 pasif. |
PATCH /v1/catalog/stock ve PATCH /v1/catalog/prices yalnızca stok ve fiyat günceller. Öncelikli kuyrukta işlenir.
Pasife alma: DELETE /v1/catalog/products/{sourceId} veya POST /v1/catalog/products/deactivate.
GET /v1/catalog/products kayıtların Bicops tarafındaki durumunu döner.
Dosya ile aktarım
Tam katalog için NDJSON dosyası kullanılır (her satırda bir kayıt). gzip önerilir. Dosya doğrudan depolama alanına yüklenir.
- POST /v1/catalog/imports: uploadUrl ve batchId alınır
- Dosya HTTP PUT ile uploadUrl adresine yüklenir
- POST /v1/catalog/imports/{batchId}/complete: işleme başlar
- GET /v1/catalog/batches/{batchId}: ilerleme izlenir
# 1
curl -s -X POST https://partner.bicops.tr/v1/catalog/imports -H "X-Api-Key: <key>" -H "X-Api-Secret: <secret>" \
-H "Content-Type: application/json" -d '{"format":"ndjson","gzip":true}'
# → {"batchId":1043,"uploadUrl":"https://files.bicops.tr/partner-raw/…","expiresInSec":900}
# 2
curl -s -X PUT "<uploadUrl>" -H "Content-Type: application/octet-stream" --data-binary @catalog.ndjson.gz
# 3
curl -s -X POST https://partner.bicops.tr/v1/catalog/imports/1043/complete -H "X-Api-Key: <key>" -H "X-Api-Secret: <secret>"
Dosya biçimi
- Her satır bağımsız bir JSON nesnesidir. Satırlar arasında virgül ve köşeli parantez yoktur.
- Dosya UTF-8 kodlanır, satır sonu \n olmalıdır. Boş satırlar atlanır.
- Zorunlu tek alan sourceId (sizin stok kodunuz). Gönderilmeyen alan mevcut değerini korur.
- Bozuk satır yalnız kendisi reddedilir, dosyanın kalanı işlenir. Nedenler GET /v1/catalog/batches/{id}/errors ucunda listelenir.
- stock ve warehouses birlikte gönderilirse stock, depo stoklarının toplamına eşit olmalıdır.
- Dosyada olmayan ürün silinmez. Pasife almak için o ürünü status: 0 ile gönderin.
Örnek dosya
{"sourceId":"SACHS 317 572","name":"AMORTISOR ON AUDI A3 / GOLF V","brand":"SACHS","producerCode":"317 572","previousCode":"317 571","oemCodes":["1T0413031CN","1T0413031CK"],"equivalentCodes":["FEBI 106124"],"barcodes":["4054228012345"],"price":3869.6,"currency":"TRY","pricesIncludeVat":false,"stock":12,"warehouses":[{"code":"ANK","stock":8},{"code":"IST","stock":4}],"minOrder":1,"packageAmount":1,"boxAmount":2,"unit":"AD","desi":3.2,"weight":1.25,"images":["https://cdn.satici.com/317572.jpg"],"categoryHint":"Amortisor","vehicleHint":"VW Golf V 2003-2008","status":1}
{"sourceId":"MANN W 712/95","name":"YAG FILTRESI","brand":"MANN","oemCodes":["W 712/95","1109AY"],"price":210.5,"currency":"TRY","stock":0,"status":1}
{"sourceId":"BOSCH 0986495255","name":"FREN BALATASI ON","brand":"BOSCH","oemCodes":["0986495255"],"price":1250,"currency":"TRY","stock":6,"warehouses":[{"code":"IZM","stock":6}],"status":1}
{"sourceId":"SACHS 317 571","status":0}
dryRun=true dosyayı yazmadan doğrular. 1.000.000 kayıt için ilk aktarım yaklaşık 15 dakikadır.
İş kayıtları
Her toplu istek bir iş kaydı oluşturur. GET /v1/catalog/batches/{id} durum, sayı ve süreleri döner. /errors satır hatalarını, /errors.csv aynı listeyi CSV olarak verir.
queued | Kuyrukta |
awaiting_upload | Dosya yüklemesi bekleniyor |
processing | İşleniyor |
syncing | Katalog ve arama dizini güncelleniyor |
done | Tamamlandı |
partial | Tamamlandı, bazı kayıtlar reddedildi |
failed | Başarısız |
Sayılar: received, accepted, rejected, changed. Aynı veri tekrar gönderilirse changed = 0 olur.
API Servisleri
Tüm servisler /v1 altındadır. Yazma servisleri için ilgili kapsam gerekir.
Siparişler
| Servis | Açıklama |
|---|---|
GET /orders | Sipariş listesi (status, updatedSince) |
GET /orders/{id} | Sipariş detayı |
POST /orders/{id}/approve | Siparişi onayla |
POST /orders/{id}/status | Durum güncelle {status} |
POST /orders/{id}/erp-reference | ERP referansı kaydet {reference} |
GET /orders/{id}/messages | Sipariş mesajları |
GET /orders/{id}/documents | Sipariş belgeleri |
Kargo
| Servis | Açıklama |
|---|---|
POST /orders/{id}/shipments | Kendi kargonuzu bildirin {trackNumber, cargoId?} |
POST /orders/{id}/shipments/create | Bicops taşıyıcısıyla gönderi oluştur |
GET /orders/{id}/shipments/label | Kargo etiketi (PDF, base64) |
GET /orders/carriers | Taşıyıcı listesi |
İade ve iptal
| Servis | Açıklama |
|---|---|
GET /returns | İade talepleri |
GET /returns/{id} | İade detayı |
POST /returns/{id}/decision | İade kararı {action: approve|reject} |
GET /cancellations | İptal edilen siparişler |
Fatura
| Servis | Açıklama |
|---|---|
GET /orders/{id}/invoices | Siparişe bağlı fatura dosyaları |
POST /orders/{id}/invoice | Kendi faturanızı ekleyin {fileBase64|fileUrl} |
GET /invoices | Bicops’un size kestiği belgeler |
Finans
| Servis | Açıklama |
|---|---|
GET /finance/settlements | Sipariş bazlı hakediş |
GET /finance/statement | Aylık ekstre |
GET /finance/payments | Kart tahsilatları |
Webhook ve olaylar
| Servis | Açıklama |
|---|---|
GET /webhooks | Webhook listesi |
POST /webhooks | Webhook kaydı {url, events[]} |
DELETE /webhooks/{id} | Webhook iptali |
POST /webhooks/{id}/test | Test olayı gönder |
GET /webhooks/deliveries | Teslim günlüğü |
GET /events | Olay kuyruğu (cursor) |
Raporlar
| Servis | Açıklama |
|---|---|
GET /reports/sales | Satış raporu (groupBy=day|month|product|brand) |
GET /reports/returns | İade oranı |
GET /reports/catalog | Katalog sağlığı |
GET /reports/demand | Talep ve stoksuz ürünler |
Kurumsal (şube anahtarı)
| Servis | Açıklama |
|---|---|
GET /customers | Cari kartları |
GET /customers/{id}/statement | Cari ekstre ve bakiye |
GET /accounting/receipts | Tahsilat makbuzları |
GET /accounting/invoices | Şube satış faturaları |
GET /salesmen | Satış temsilcisi atamaları |
Hata kodları
Hata yanıtı: { code, message, details[], requestId }. code sabittir; message İngilizce açıklamadır.
{
"code": "VALIDATION_FAILED",
"message": "Request body validation failed",
"details": [{ "field": "items.0.price", "code": "INVALID_FIELD", "message": "price must not be less than 0" }],
"requestId": "7c0e1c5a-…"
}
HTTP durum kodları
UNAUTHORIZED (401) | Anahtar geçersiz veya eksik |
FORBIDDEN_SCOPE (403) | Kapsam yetersiz |
SELLER_KEY_REQUIRED (403) | Servis satıcı anahtarı ister; kurum anahtarı kullanılmış |
CORPORATE_KEY_REQUIRED (403) | Servis kurum anahtarı ister; satıcı anahtarı kullanılmış |
SANDBOX_READ_ONLY (403) | Sandbox anahtarı sipariş, iade ve fatura değiştiremez; katalog istekleri yalnız doğrulanır |
IP_NOT_ALLOWED (403) | IP izin listesinde değil |
VALIDATION_FAILED (422) | Gövde şeması geçersiz |
PAYLOAD_TOO_LARGE (413) | Kayıt sınırı aşıldı |
QUEUE_BUSY (429) | Bekleyen iş sınırı aşıldı; Retry-After başlığına bakın |
RATE_LIMITED (429) | İstek sıklığı aşıldı |
NOT_FOUND (404) | Kayıt bulunamadı |
STORAGE_UNAVAILABLE (503) | Depolama alanı geçici olarak kapalı |
Kayıt kodları (iş hata raporu)
SOURCEID_REQUIRED | sourceId boş |
NAME_REQUIRED | Aktif ürün için ad eksik |
PRICE_NEGATIVE, STOCK_NEGATIVE | Negatif veya sayısal olmayan değer |
CURRENCY_INVALID | Para birimi TRY, USD veya EUR değil |
STATUS_INVALID | status 0 veya 1 değil |
UNKNOWN_SOURCEID | Ürün tanımlı değil |
INVALID_JSON | Satır geçerli JSON değil |
OEM_TOO_SHORT (uyarı) | Üç karakterden kısa numara atlandı |
WAREHOUSE_STOCK_MISMATCH (uyarı) | Depo toplamı kullanıldı |
DUPLICATE_SOURCEID (uyarı) | Son kayıt kullanıldı |
Limitler
- Ürün: 1.000 kayıt / istek. Stok ve fiyat: 5.000 kayıt / istek. Gövde: 6 MB.
- İstek sıklığı: anahtar başına 600 istek / dakika. Aşımda 429.
- Bekleyen iş: satıcı başına 10. Aşımda 429.
- Dosya: kayıt sınırı yok, en fazla 2 GB (gzip).
- Yükleme adresi 15 dakika geçerlidir.
İstek günlüğü
GET /v1/logs/requests son 30 günün isteklerini döner: uç, durum, süre, requestId, batchId.
Referans
- Swagger UI
- OpenAPI 3 şeması (JSON)
- Postman koleksiyonu (tüm servisler, örnek gövdeler)
- Destek: support@bicops.tr. requestId ve batchId belirtiniz.