developers.ticibu / v1

Entegrasyonu tahminle değil, sözleşmeyle kurun.

Çalışan API davranışı, güvenli örnekler ve hata senaryoları. Bu sayfa henüz olmayan kabiliyetleri varmış gibi göstermez.

Staging API
Çalışıyor
Admin write erişimi
Davetli beta
Son güncelleme
11 Eylül 2026

Başlangıç

Üç entegrasyon yüzeyi

Storefront REST

/cdn/v1/*

Herkese açık, yayındaki mağaza

Katalog, kategori, koleksiyon ve agent feed okumaları.

Admin GraphQL

/graphql

Bearer JWT + tenant

Mağaza yönetimi; write sandbox erişimi davetle açılır.

Webhook

Merchant HTTPS endpoint

HMAC-SHA256 imza

Ürün, müşteri, stok ve operasyon olayları.

Kimlik doğrulama

Tenant her istekte açık olmalı

Paylaşılan API hostunda X-Tenant-Slug mağazayı seçer; erişim JWT’si Authorization: Bearer ile gönderilir. Access token 15 dakika geçerlidir. Refresh token yedi günlük oturuma bağlıdır ve yenilemede döndürülür. Üretim parolalarını istemci koduna, mobil pakete veya Git deposuna koymayın.

curl --request POST \
  'https://ticibu-api-staging.kolibu.workers.dev/auth/login' \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Slug: YOUR_TENANT_SLUG' \
  --data '{"email":"developer@example.com","password":"••••••••"}'
curl --request POST \
  'https://ticibu-api-staging.kolibu.workers.dev/graphql' \
  --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
  --header 'X-Tenant-Slug: YOUR_TENANT_SLUG' \
  --header 'Content-Type: application/json' \
  --data '{"query":"query { webhookEventCatalog { name category } }"}'

Rate limit

Limiti yanıttan okuyun

Kotalı yüzeyler X-RateLimit-Limit ve X-RateLimit-Remaining döndürür. 429 yanıtında Retry-After saniyesine uyun. Aşağıdaki değerler bugün kodda uygulanan başlangıç bütçeleridir; sözleşmesel kapasite garantisi değildir.

YüzeyBütçeKapsam
Admin oturum açma20 / 60 sntenant + rota
Agent catalog feed60 / 60 sntenant + çağıran IP
MCP catalog tools120 / 60 sntenant + çağıran IP
Operator / Growth Pulse30 / 60 sntenant + çağıran IP
Store Builder / migrations10 / 60 sntenant + çağıran IP

Idempotency

Aynı niyet, aynı anahtar

Ticibu bugün evrensel bir HTTP Idempotency-Key başlığı sunmuyor. Yalnızca şemasında açıkça idempotencyKey alanı bulunan marketplace operasyonu ve sadakat mutasyonlarını güvenle aynı anahtarla tekrar gönderin.
  • Anahtarı iş niyetinden üretin; ağ denemesi veya timestamp’ten üretmeyin.
  • Aynı anahtarı farklı payload için yeniden kullanmayın.
  • Diğer write mutasyonlarında belirsiz yanıttan sonra önce durumu okuyun; kör tekrar yapmayın.

Webhook

Ham gövdeyi imzadan önce değiştirmeyin

Ticibu JSON gövdesini HMAC-SHA256 ile imzalar. X-Ticibu-Signature değeri sha256=<hex> biçimindedir; ayrıca X-Ticibu-Event ve tekrarlar boyunca sabit kalan X-Ticibu-Delivery-Id gönderilir. Endpoint 10 saniye içinde 2xx dönmelidir. Teslimat en fazla beş kez denenir; tüketici delivery ID ile dedupe etmelidir. Aşağıdaki liste bugün dispatcher’a bağlı, fiilen yayımlanan olaylardır.

const rawBody = await request.text()
const received = request.headers.get('X-Ticibu-Signature')
const expected = 'sha256=' + hmacSha256Hex(WEBHOOK_SECRET, rawBody)

if (!timingSafeEqual(received, expected)) {
  return new Response('invalid signature', { status: 401 })
}
PRODUCT_CREATEDPRODUCT_UPDATEDPRODUCT_DELETEDORDER_CREATEDORDER_UPDATEDORDER_CANCELLEDORDER_SHIPPEDORDER_DELIVEREDCUSTOMER_CREATEDCUSTOMER_UPDATEDCATEGORY_CREATEDCATEGORY_UPDATEDCART_ABANDONEDSTOCK_LOWINTEGRATION_FAILED

Pagination

Sayfa numarası ve opaque cursor ayrıdır

Klasik katalog uçları page ve limit kullanır. Değişen kataloğu ardışık okuyan agent feed, kayıp/tekrar riskini azaltmak için opaque keyset cursor döndürür. Cursor’ı çözümlemeyin veya üretmeyin; nextCursor boşalana kadar aynen taşıyın.

GET /cdn/v1/products?page=1&limit=24

{
  "products": [ ... ],
  "pagination": {
    "page": 1,
    "limit": 24,
    "total": 132,
    "totalPages": 6
  }
}

GET /cdn/v1/agent-feed.json?limit=100&cursor=OPAQUE_CURSOR

Retry

Yalnız güvenli çağrıları otomatik tekrarlayın

Query/GET çağrılarında 429, 502, 503 ve 504 için jitter’lı exponential backoff uygulayın. 400/401/403/422 yanıtlarını tekrar etmeyin. Write çağrısını ancak mutasyon belgelenmiş bir idempotency anahtarı taşıyorsa otomatik tekrar edin.

async function ticibuRequest(url, init, attempt = 0) {
  const response = await fetch(url, init)
  if (![429, 502, 503, 504].includes(response.status) || attempt >= 4) return response

  const retryAfter = Number(response.headers.get('Retry-After'))
  const waitMs = Number.isFinite(retryAfter)
    ? retryAfter * 1000
    : Math.min(1000 * 2 ** attempt + Math.random() * 250, 8000)

  await new Promise(resolve => setTimeout(resolve, waitMs))
  return ticibuRequest(url, init, attempt + 1)
}

Sandbox fixtures

Gerçek müşteri verisi olmadan geliştirin

Aşağıdaki dosyalar sentetiktir ve sözleşme testi için sabit tutulur. Public katalog okumaları staging hostunda açıktır. Admin write sandbox tenant’ı ve kısa ömürlü giriş bilgileri yalnızca davet edilen entegrasyon ekibine güvenli kanaldan verilir; bu sayfada ortak parola yayınlanmaz. Fixture gövdeleri teslimatta gönderildiği haliyle verilir; event adı ve delivery ID HTTP header’larındadır.

Write sandbox erişimi gerekiyor mu?

Tenant, scope ve son kullanma tarihi birlikte tanımlanır.

Erişim isteyin

App ve extension politikası

Önce izin sınırı, sonra SDK

Ticibu app platformu henüz self-service token veya mağaza kurulumu açmıyor. Hazır olan kısım; tenant sahipliği, granular scope sözlüğü, merchant grant sınırı, HTTPS redirect ve secret kurallarını machine-tested bir manifest politikasıyla sabitlemek. Write, müşteri verisi ve webhook erişimi insan güvenlik incelemesine gider.

SınıfScopeKapı
Salt okunurcatalog:read · orders:read · themes:read · analytics:readOtomatik baseline
Mutationcatalog:write · orders:write · fulfillment:write · themes:writeİnsan güvenlik incelemesi
Hassas/egresscustomers:read · webhooks:manageAmaç, saklama ve endpoint doğrulaması

Uygulama kurulum/OAuth uçları açılana kadar bu bir yayınlanmış güvenlik sözleşmesidir; çalışan app marketplace iddiası değildir.