Catalog: products and categories
/api/v1/catalog/products — PUT
Section titled “/api/v1/catalog/products — PUT”Inserts or updates by item_ref (upsert). A product whose content did not change is not rewritten or re-embedded (unchanged). Up to 1000 items per batch; the same item_ref cannot appear twice in one request (422 duplicate_key). With full=true, products missing from the list are deactivated.
- Authentication:
Authorization: Bearer rz_live_… - Scope:
ingest:catalog - Plan feature: none (available on every plan)
- Idempotency-Key: optional (recommended for retries)
Parameters
Section titled “Parameters”| Name | In | Type | Limits | Meaning |
|---|---|---|---|---|
full | query | boolean | default false | true: records missing from the list are deactivated (ek- hand-added knowledge rows are kept). Send the full list in one request (≤1000). |
Request body (application/json)
Section titled “Request body (application/json)”Fields marked * are required. Unknown fields are rejected with 422.
ProductBatch
| Field | Type | Limits | Meaning |
|---|---|---|---|
items * | ApiProduct[] | min items 1, max items 1000 | 1–1000 records. |
ApiProduct
| Field | Type | Limits | Meaning |
|---|---|---|---|
item_ref * | string | min 1, max 200 | Permanent product/variant id on your site. |
urun_adi * | string | min 1, max 500 | Product name. |
urun_kodu | string | null | max 2000 | SKU; defaults to item_ref. |
model_adi | string | null | max 2000 | Model name; derived from the name if missing. |
marka | string | null | max 2000 | Brand. |
kategori | string | null | max 2000 | Category path, Parent > Child. |
fiyat | number | string | null | ≥ 0, ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$ | Selling price (TRY). |
normal_fiyat | number | string | null | ≥ 0, ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$ | Price before discount. |
indirimde | boolean | null | Whether it is on sale. | |
stokta | boolean | default true | In stock (default true). |
stok | string | null | max 2000 | Stock text read to the customer. |
renk | string | null | max 2000 | Colour. |
depolama | string | null | max 2000 | Storage. |
bellek | string | null | max 2000 | Memory. |
islemci | string | null | max 2000 | Processor. |
ekran | string | null | max 2000 | Screen. |
uyumluluk | string | null | max 4000 | Compatible models. |
durum | string | null | max 2000 | sıfır (new) / ikinci el (used) / teşhir (display); derived if missing. |
kargo_suresi | string | null | max 2000 | Shipping lead time. |
url | string | null | max 2000 | Product page URL. |
gorsel | string | null | max 2000 | Image URL. |
kisa_aciklama | string | null | max 4000 | Short description (HTML is converted to text). |
Example
Section titled “Example”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, "normal_fiyat": 2199.90, "stokta": true, "url": "https://magaza.example.com/urun/x2"}]}'Response 200
Section titled “Response 200”Schema: IngestResult
| Field | Type | Limits | Meaning |
|---|---|---|---|
dataset * | string | ||
inserted * | integer | ||
updated * | integer | ||
unchanged * | integer | ||
deactivated * | integer | ||
skipped * | integer |
{ "dataset": "urun", "inserted": 1, "updated": 0, "unchanged": 0, "deactivated": 0, "skipped": 0}Error statuses: 401, 403, 404, 413, 422, 429 — see Errors and limits.
/api/v1/catalog/products/{item_ref} — DELETE
Section titled “/api/v1/catalog/products/{item_ref} — DELETE”The product is not deleted but deactivated: the assistant stops suggesting it. Sending the same item_ref again reactivates it. 404 not_found if it does not exist.
- Authentication:
Authorization: Bearer rz_live_… - Scope:
ingest:catalog - Plan feature: none (available on every plan)
- Idempotency-Key: optional (recommended for retries)
Parameters
Section titled “Parameters”| Name | In | Type | Limits | Meaning |
|---|---|---|---|---|
item_ref * | path | string | Your permanent product/variant id. |
Example
Section titled “Example”curl -s -X DELETE "$RZ_API/api/v1/catalog/products/1234" -H "Authorization: Bearer $RZ_KEY"Response 200
Section titled “Response 200”Schema: IngestResult
| Field | Type | Limits | Meaning |
|---|---|---|---|
dataset * | string | ||
inserted * | integer | ||
updated * | integer | ||
unchanged * | integer | ||
deactivated * | integer | ||
skipped * | integer |
{ "dataset": "urun", "inserted": 0, "updated": 0, "unchanged": 0, "deactivated": 1, "skipped": 0}Error statuses: 401, 403, 404, 413, 422, 429 — see Errors and limits.
/api/v1/catalog/categories — PUT
Section titled “/api/v1/catalog/categories — PUT”Upsert by kategori_id. If yol (path) is missing it is derived from parent categories in the same request (Parent > Child).
- Authentication:
Authorization: Bearer rz_live_… - Scope:
ingest:catalog - Plan feature: none (available on every plan)
- Idempotency-Key: optional (recommended for retries)
Parameters
Section titled “Parameters”| Name | In | Type | Limits | Meaning |
|---|---|---|---|---|
full | query | boolean | default false | true: records missing from the list are deactivated (ek- hand-added knowledge rows are kept). Send the full list in one request (≤1000). |
Request body (application/json)
Section titled “Request body (application/json)”Fields marked * are required. Unknown fields are rejected with 422.
CategoryBatch
| Field | Type | Limits | Meaning |
|---|---|---|---|
items * | ApiCategory[] | min items 1, max items 1000 | 1–1000 records. |
ApiCategory
| Field | Type | Limits | Meaning |
|---|---|---|---|
kategori_id * | string | min 1, max 200 | Category id. |
kategori_adi * | string | min 1, max 300 | Category name. |
ust_kategori_id | string | null | max 2000 | Parent category id. |
yol | string | null | max 2000 | Full path; derived if missing. |
urun_sayisi | integer | null | ≥ 0 | Number of products. |
Example
Section titled “Example”curl -s -X PUT "$RZ_API/api/v1/catalog/categories?full=true" \ -H "Authorization: Bearer $RZ_KEY" -H "Content-Type: application/json" \ -d '{"items": [{"kategori_id": "1", "kategori_adi": "Ses"}, {"kategori_id": "12", "kategori_adi": "Kulaklık", "ust_kategori_id": "1", "urun_sayisi": 42}]}'Response 200
Section titled “Response 200”Schema: IngestResult
| Field | Type | Limits | Meaning |
|---|---|---|---|
dataset * | string | ||
inserted * | integer | ||
updated * | integer | ||
unchanged * | integer | ||
deactivated * | integer | ||
skipped * | integer |
{ "dataset": "kategori", "inserted": 2, "updated": 0, "unchanged": 0, "deactivated": 0, "skipped": 0}Error statuses: 401, 403, 404, 413, 422, 429 — see Errors and limits.
/api/v1/catalog/categories/{kategori_id} — DELETE
Section titled “/api/v1/catalog/categories/{kategori_id} — DELETE”Deactivates the category; sending the same id again reactivates it. 404 not_found if it does not exist.
- Authentication:
Authorization: Bearer rz_live_… - Scope:
ingest:catalog - Plan feature: none (available on every plan)
- Idempotency-Key: optional (recommended for retries)
Parameters
Section titled “Parameters”| Name | In | Type | Limits | Meaning |
|---|---|---|---|---|
kategori_id * | path | string | Category id. |
Example
Section titled “Example”curl -s -X DELETE "$RZ_API/api/v1/catalog/categories/12" -H "Authorization: Bearer $RZ_KEY"Response 200
Section titled “Response 200”Schema: IngestResult
| Field | Type | Limits | Meaning |
|---|---|---|---|
dataset * | string | ||
inserted * | integer | ||
updated * | integer | ||
unchanged * | integer | ||
deactivated * | integer | ||
skipped * | integer |
{ "dataset": "kategori", "inserted": 0, "updated": 0, "unchanged": 0, "deactivated": 1, "skipped": 0}Error statuses: 401, 403, 404, 413, 422, 429 — see Errors and limits.
© 2026 Erusoft