Skip to content

Data API

Sites without a ready-made connection send their data themselves through the Data API; the same API lets you read the requests opened during calls and the calls themselves. All endpoints are under /api/v1/ and use a company API key (Authorization: Bearer rz_live_…). For authentication and scopes see Authentication; for endpoint details see the API reference.

DataEndpointScopePlan
ProductsPUT /api/v1/catalog/products, DELETE …/products/{item_ref}ingest:catalogevery plan
CategoriesPUT /api/v1/catalog/categories, DELETE …/categories/{kategori_id}ingest:catalogevery plan
Knowledge contentPUT /api/v1/kb/articlesingest:kbevery plan
OrdersPUT /api/v1/ordersingest:ordersevery plan
CartsPUT / GET /api/v1/sepetler, DELETE …/sepetler/{dis_id}ingest:carts, read:cartsData API + Carts
CustomersPUT /api/v1/musteriler, DELETE …/musteriler/{dis_id}ingest:customersData API + Carts
Requests (read)GET /api/v1/requestsread:requestsData API
Calls and topics (read)GET /api/v1/cagrilar, GET /api/v1/konular/istatistikcalls:readData API (+ Topic analytics)

Ingestion endpoints (products, categories, knowledge, orders) are on in every plan, because the assistant works with this data. Some paths and fields are Turkish words: sepetler = carts, musteriler = customers, urun_adi = product name, fiyat = price.

  • Upsert: records are inserted or updated by your own id (item_ref, kategori_id, id, external_id, dis_id). A record whose content didn’t change isn’t rewritten (unchanged).
  • Batches: 1–1000 records per request (items); the same id cannot appear twice in one request (422 duplicate_key: …). Unknown fields return 422.
  • Full sync (?full=true): records missing from the list are deactivated. The full list must be sent in one request (≤1000); for larger catalogs push incrementally and deactivate removed items with DELETE.
  • Out-of-order requests: an order payload whose modified_at is older than the stored version isn’t written; newer data is never overwritten.
  • Embeddings: vectors for semantic search are generated in the background for changed products and knowledge; the request doesn’t wait.
  • Limits: 120 requests per minute per key, body up to 5 MB. Errors and limits →
Terminal window
export RZ_API="https://<your-console-host>"
export RZ_KEY="rz_live_xxx"
curl -s -X PUT "$RZ_API/api/v1/catalog/products" \
-H "Authorization: Bearer $RZ_KEY" -H "Content-Type: application/json" \
-H "Idempotency-Key: urunler-2026-09-27-1" \
-d '{"items": [{"item_ref": "1234", "urun_adi": "Kablosuz Kulaklık X2", "marka": "Ornek",
"kategori": "Ses > Kulaklık", "fiyat": 1899.90, "stokta": true,
"url": "https://magaza.example.com/urun/x2"}]}'
# {"dataset":"urun","inserted":1,"updated":0,"unchanged":0,"deactivated":0,"skipped":0}

GET /api/v1/requests returns requests in ascending updated_at order. Store next_cursor and send it as cursor next time; has_more=false means nothing new for now. Calls (/api/v1/cagrilar) are pulled the same way in created_at order.

cursor = load_cursor() # None the first time
while True:
r = s.get(f"{API}/api/v1/requests", params={"cursor": cursor, "limit": 100}, timeout=30).json()
for item in r["items"]:
handle(item)
cursor = r["next_cursor"]
save_cursor(cursor)
if not r["has_more"]:
break

For instant notification use webhooks instead.