Katalog API
Katalog modülünün tüm işlemleri (25) ve veri modelleri (9): adresler, izinler, girdiler, ön koşullar, olaylar ve örnekler.
Sattığınız veya randevuya açtığınız her şey — ürünler, hizmetler, fiyatlar, kategoriler ve markalar.
Modül kodu catalog · 25 işlem · 9 veri modeli · 19 olay. Bir anahtar ya da token, arkasındaki kişinin bu modülde yapabildiğinden fazlasını asla yapamaz; satır düzeyindeki güvenlik uygulamadakiyle birebir aynıdır. Yetki kapsamları: catalog (hepsi), catalog:read (yalnız okuma) ya da catalog:<yetenek>.
Kaynaklar
| Kaynak | Tablo | Listeleme ve okuma | POST | PATCH | DELETE |
|---|---|---|---|---|---|
brands | item_brand | /api/v1/brands | catalog.save_brand | ||
categories | item_category | /api/v1/categories | catalog.update_category | ||
product_components | item_component | /api/v1/product_components | |||
product_files | item_file | /api/v1/product_files | |||
product_option_values | item_option_value | /api/v1/product_option_values | |||
product_options | item_option | /api/v1/product_options | |||
products | item | /api/v1/products | catalog.create_item | catalog.update_item | |
variant_options | item_variant_option | /api/v1/variant_options | |||
variants | item_variant | /api/v1/variants | catalog.save_variant |
Listeler limit (en çok 200), cursor, order (ör. -created_at), fields ve q alır; diğer her sorgu parametresi bir sütun süzgecidir: ?status=paid, ?total[gte]=100, ?id[in]=a,b, ?x=null.
İşlemler
| İşlem | Gereken izin | Ne yapar |
|---|---|---|
catalog.activate | catalog:write | Yeniden sun |
catalog.assign_images | catalog:write | Görsel ata |
catalog.attach_file | catalog:write | Görsel veya dosya ekle |
catalog.bulk_update_items | catalog:write | Birden çok ürünü değiştir |
catalog.create_category | catalog:manage | Kategori ekle |
catalog.create_item | catalog:write | Kataloğa ekle |
catalog.deactivate | catalog:delete | Sunmayı durdur |
catalog.delete_items | catalog:delete | Ürünleri sil |
catalog.detach_file | catalog:write | Eki kaldır |
catalog.email_product_export | catalog:export | Ürün dışa aktarımını e-postayla gönder |
catalog.move_category | catalog:manage | Kategoriyi taşı |
catalog.publish | catalog:write | Yayımla |
catalog.remove_variant | catalog:delete | Varyantı kaldır |
catalog.reorder_files | catalog:write | Görselleri sırala |
catalog.save_brand | catalog:manage | Marka ekle veya düzenle |
catalog.save_variant | catalog:write | Varyant ekle veya düzenle |
catalog.set_brand_visibility | catalog:manage | Markayı göster veya gizle |
catalog.set_options | catalog:write | Varyant seçeneklerini belirle |
catalog.set_package_contents | catalog:write | Paketin içeriğini belirle |
catalog.set_price | catalog:write | Fiyat belirle |
catalog.unpublish | catalog:write | Yayından kaldır |
catalog.update_category | catalog:manage | Kategoriyi düzenle |
catalog.update_file | catalog:write | Görseli tanımla |
catalog.update_item | catalog:write | Katalog kaydını düzenle |
catalog.update_item_metadata | catalog:write | Ürün ek bilgilerini düzenle |
catalog.activate
Yeniden sun — Listeye geri koyar.
Gereken izin catalog:write · veriyi değiştirir
https://app.getera.io/api/v1/products/{id}/actions/activate- Asıl adres:
POST /api/v1/actions/catalog.activate
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Kalem · kimliği: item |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
not_found | Kayıt bulunmalı. |
already_active | Listede olmamalı. |
Yayımladığı olaylar: catalog.activated
Neye yazar: item (update) — Marks it active
curl -X POST https://app.getera.io/api/v1/products/PRODUCT_ID/actions/activate \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{}'{
"ok": true,
"result": "…",
"events": [
"catalog.activated"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.products.activate("PRODUCT_ID")era products activate PRODUCT_ID{
"name": "era__catalog__activate",
"arguments": {
"id": "PRODUCT_ID"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 not_found, already_active · 429 çok sık istek
catalog.assign_images
Görsel ata — Seçilen görseli seçili her hizmet ya da ürüne ekler; mevcut galeriler korunur.
Gereken izin catalog:write · veriyi değiştirir
https://app.getera.io/api/v1/product_files/actions/assign_images- Asıl adres:
POST /api/v1/actions/catalog.assign_images
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
ids | object / array | evet | Seçili kayıtlar |
fileId | uuid | evet | Görsel · kimliği: file |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
no_items | 1 ila 500 ürün veya hizmet seçin. |
file_not_found | Bu dosya çalışma alanında erişilebilir değil. |
image_required | Bir görsel seçin. |
not_found | Seçilen ürün veya hizmetlerden bazılarına artık erişilemiyor. |
Yayımladığı olaylar: catalog.files_changed
Neye yazar: item_file (insert) — Appends an image, keeping the existing gallery
curl -X POST https://app.getera.io/api/v1/product_files/actions/assign_images \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"ids":{},"fileId":"FILE_ID"}'{
"ok": true,
"result": "…",
"events": [
"catalog.files_changed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.productFiles.assignImages({
ids: {},
fileId: "FILE_ID"
})era product_files assign_images --data '{"ids":{},"fileId":"FILE_ID"}'{
"name": "era__catalog__assign_images",
"arguments": {
"ids": {},
"fileId": "FILE_ID"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 no_items, file_not_found, image_required, not_found · 429 çok sık istek
catalog.attach_file
Görsel veya dosya ekle — Bir fotoğraf, video, teknik belge veya indirme — ürüne ya da tek bir varyanta.
Gereken izin catalog:write · veriyi değiştirir
https://app.getera.io/api/v1/product_files/actions/attach_file- Asıl adres:
POST /api/v1/actions/catalog.attach_file
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
itemId | uuid | evet | Kalem · kimliği: item |
fileId | uuid | Dosya · kimliği: file | |
externalUrl | string | Harici URL · en çok 1000 | |
variantId | uuid | Varyant · kimliği: item_variant | |
role | string (enum) | Rol · İzin verilen değerler: image, video, datasheet, download | |
alt | string | Alternatif metin · en çok 250 | |
sortOrder | number | Sipariş |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
not_found | Ürün bulunmalı. |
nothing_to_attach | Bir dosya veya harici bir URL gerekli. |
file_not_found | Dosya bulunmalı. |
variant_not_on_item | Varyant bu ürüne ait olmalı. |
Yayımladığı olaylar: catalog.files_changed
Neye yazar: item_file (insert) — Attaches the file
curl -X POST https://app.getera.io/api/v1/product_files/actions/attach_file \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"itemId":"ITEM_ID"}'{
"ok": true,
"result": "…",
"events": [
"catalog.files_changed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.productFiles.attachFile({
itemId: "ITEM_ID"
})era product_files attach_file \
--item-id "ITEM_ID"{
"name": "era__catalog__attach_file",
"arguments": {
"itemId": "ITEM_ID"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 not_found, nothing_to_attach, file_not_found, variant_not_on_item · 429 çok sık istek
catalog.bulk_update_items
Birden çok ürünü değiştir — Listeden yayımla, yayından kaldır, listeye koy veya çıkar ya da bir kategoriye taşı.
Gereken izin catalog:write · veriyi değiştirir
https://app.getera.io/api/v1/products/actions/bulk_update_items- Asıl adres:
POST /api/v1/actions/catalog.bulk_update_items
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
itemIds | object / array | evet | Öğe |
operation | string (enum) | evet | İşlem · İzin verilen değerler: publish, unpublish, activate, deactivate, set_category |
categoryId | uuid | Kategori · kimliği: item_category |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
no_items | En az bir ürün seçilmeli. |
not_found | Her ürün bulunmalı. |
category_not_found | Kategori bulunmalı. |
Yayımladığı olaylar: catalog.published, catalog.unpublished, catalog.activated, catalog.deactivated, catalog.item_updated
Neye yazar: item (update) — Writes the change on each item it applies to
curl -X POST https://app.getera.io/api/v1/products/actions/bulk_update_items \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"itemIds":{},"operation":"publish"}'{
"ok": true,
"result": "…",
"events": [
"catalog.published",
"catalog.unpublished",
"catalog.activated",
"catalog.deactivated",
"catalog.item_updated"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.products.bulkUpdateItems({
itemIds: {},
operation: "publish"
})era products bulk_update_items --data '{"itemIds":{},"operation":"publish"}'{
"name": "era__catalog__bulk_update_items",
"arguments": {
"itemIds": {},
"operation": "publish"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 no_items, not_found, category_not_found · 429 çok sık istek
catalog.create_category
Kategori ekle — Kataloğu bu ekranda ve mağaza sitesinde gruplar.
Gereken izin catalog:manage · veriyi değiştirir
https://app.getera.io/api/v1/categories/{id}/actions/create_category- Asıl adres:
POST /api/v1/actions/catalog.create_category
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
name | string | evet | Ad · en çok 200 |
slug | string | Adres · en çok 200 | |
description | string | Açıklama · en çok 2000 | |
content | object / array | Sayfa içeriği | |
icon | string | Simge · en çok 64 | |
imageFileId | uuid | Görsel · kimliği: file | |
parentId | uuid | Doldurulduğu yer: adresteki {id} · İçeride · kimliği: item_category | |
isActive | boolean | Görünür | |
sortOrder | number | Sipariş | |
seoTitle | string | Arama başlığı · en çok 200 | |
seoDescription | string | Arama açıklaması · en çok 500 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
invalid_name | Ad kullanılabilir bir adres üretmeli. |
slug_taken | Adres bu çalışma alanında boşta olmalı. |
parent_not_found | Üst kategori bulunmalı. |
Yayımladığı olaylar: catalog.category_created
Neye yazar: item_category (insert) — Creates the category
curl -X POST https://app.getera.io/api/v1/categories/CATEGORY_ID/actions/create_category \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"name":"Name"}'{
"ok": true,
"result": "…",
"events": [
"catalog.category_created"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.categories.createCategory("CATEGORY_ID", {
name: "Name"
})era categories create_category CATEGORY_ID \
--name "Name"{
"name": "era__catalog__create_category",
"arguments": {
"parentId": "CATEGORY_ID",
"name": "Name"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 invalid_name, slug_taken, parent_not_found · 429 çok sık istek
catalog.create_item
Kataloğa ekle — Satılabilecek veya rezerve edilebilecekler listesine ilk varyantıyla yeni bir şey koyar.
Gereken izin catalog:write · veriyi değiştirir
https://app.getera.io/api/v1/products/actions/create_item- REST kısayolu:
POST /api/v1/products - Asıl adres:
POST /api/v1/actions/catalog.create_item
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
name | string | evet | Ad · en çok 200 |
slug | string | Adres · en çok 200 | |
kind | string (enum) | Tür · Hizmetin bir süresi olur; ürün kargoyla gönderilir. Paket, bunlardan birkaçını içerir. · İzin verilen değerler: service, product, package, gift_card | |
fulfilment | string (enum) | Teslim şekli · İzin verilen değerler: appointment, home_service, group_class, shipping, digital | |
categoryId | uuid | Kategori · kimliği: item_category | |
brandId | uuid | Marka · kimliği: item_brand | |
description | string | Açıklama · en çok 4000 | |
summary | string | Kısa açıklama · en çok 500 | |
content | object / array | Sayfa içeriği | |
sortOrder | number | Sipariş | |
model | string | Model · en çok 200 | |
sku | string | Stok kodu · en çok 100 | |
priceAmount | number (money) | Fiyat (küçük birim) · “Bize sorun” için boş bırakın — mevcut kataloğun %55,4’ü bu şekilde fiyatlandırılmış. · en az 0 | |
durationMinutes | number | Süre (dakika) · en az 5 · en çok 1440 | |
capacity | number | Kontenjan · 1’den fazlası onu bir sınıf yapar. · en az 1 | |
inShop | boolean | Mağazaya koy · Hemen yayımlanır ve mağaza para biriminde fiyatlandırılır. Mağaza yoksa → store_missing; ardından retail.set_item_listing (kanalsız) onu listeler. | |
imageFileId | uuid | Resim · Yüklenmiş bir dosya — ör. sohbette eklenen fotoğraf. · kimliği: file |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
invalid_name | Ad kullanılabilir bir adres üretmeli. |
store_missing | Mağazan yok — açayım mı? |
file_not_found | Görsel bu çalışma alanındaki bir dosya olmalı. |
slug_taken | Adres bu çalışma alanında boşta olmalı. |
fulfilment_not_allowed_for_kind | Bir ürün randevu almaz. |
duration_on_product | Bir ürünün süresi yoktur. |
category_not_found | Kategori bulunmalı. |
brand_not_found | Marka bulunmalı. |
Yayımladığı olaylar: catalog.item_created, catalog.files_changed, catalog.published
Neye yazar: item (insert) — Creates the catalogue entry; item_variant (insert) — Creates its default variant; item_file (insert) — Attaches the picture, when one is given
curl -X POST https://app.getera.io/api/v1/products/actions/create_item \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"name":"Name"}'{
"ok": true,
"result": "…",
"events": [
"catalog.item_created",
"catalog.files_changed",
"catalog.published"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.products.create({
name: "Name"
})era products create \
--name "Name"{
"name": "era__catalog__create_item",
"arguments": {
"name": "Name"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 invalid_name, store_missing, file_not_found, slug_taken, fulfilment_not_allowed_for_kind, duration_on_product, category_not_found, brand_not_found · 429 çok sık istek
catalog.deactivate
Sunmayı durdur — Listeden çıkarır; onun için alınmış randevuları belirtir.
Gereken izin catalog:delete · siler ya da geri alınamaz · Era çalıştırırken bir kişiye onaylatır
https://app.getera.io/api/v1/products/{id}/actions/deactivate- Asıl adres:
POST /api/v1/actions/catalog.deactivate
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Kalem · kimliği: item |
force | boolean | Yine de devre dışı bırak |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
not_found | Kayıt bulunmalı. |
already_inactive | Hâlâ listede olmalı. |
has_upcoming | Listeden çıkarılmadan önce alınmış randevular belirtilir. |
Yayımladığı olaylar: catalog.deactivated
Neye yazar: item (update) — Marks it inactive
curl -X POST https://app.getera.io/api/v1/products/PRODUCT_ID/actions/deactivate \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"force":true}'{
"ok": true,
"result": "…",
"events": [
"catalog.deactivated"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.products.deactivate("PRODUCT_ID", {
force: true
})era products deactivate PRODUCT_ID \
--force true{
"name": "era__catalog__deactivate",
"arguments": {
"id": "PRODUCT_ID",
"force": true
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:delete izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 not_found, already_inactive, has_upcoming · 429 çok sık istek
catalog.delete_items
Ürünleri sil — Kalıcı olarak kaldırır. Siparişler dondurulmuş adlarını korur; randevu ve paketler buna izin vermez.
Gereken izin catalog:delete · siler ya da geri alınamaz · Era çalıştırırken bir kişiye onaylatır
https://app.getera.io/api/v1/products/actions/delete_items- Asıl adres:
POST /api/v1/actions/catalog.delete_items
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
itemIds | object / array | evet | Öğe |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
no_items | En az bir ürün seçilmeli. |
not_found | Her ürün bulunmalı. |
item_in_use | Bir randevunun, paketin veya dersin bağlı olduğu hiçbir şey silinmez. |
Yayımladığı olaylar: catalog.item_deleted
Neye yazar: item (delete) — Removes the items and their variants
curl -X POST https://app.getera.io/api/v1/products/actions/delete_items \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"itemIds":{}}'{
"ok": true,
"result": "…",
"events": [
"catalog.item_deleted"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.products.deleteItems({
itemIds: {}
})era products delete_items --data '{"itemIds":{}}'{
"name": "era__catalog__delete_items",
"arguments": {
"itemIds": {}
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:delete izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 no_items, not_found, item_in_use · 429 çok sık istek
catalog.detach_file
Eki kaldır — Kaldırılmak üzere sıraya koyar.
Gereken izin catalog:write · dışarıya ulaşır (gönderir, yayımlar ya da ücret alır) · Era çalıştırırken bir kişiye onaylatır
https://app.getera.io/api/v1/product_files/{id}/actions/detach_file- Asıl adres:
POST /api/v1/actions/catalog.detach_file
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Ek · kimliği: item_file |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
attachment_not_found | Ek bulunmalı ve hâlâ ekli olmalı. |
Yayımladığı olaylar: catalog.files_changed
Neye yazar: item_file (update) — Marks it for removal
curl -X POST https://app.getera.io/api/v1/product_files/PRODUCT_FILE_ID/actions/detach_file \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{}'{
"ok": true,
"result": "…",
"events": [
"catalog.files_changed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.productFiles.detachFile("PRODUCT_FILE_ID")era product_files detach_file PRODUCT_FILE_ID{
"name": "era__catalog__detach_file",
"arguments": {
"id": "PRODUCT_FILE_ID"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 attachment_not_found · 429 çok sık istek
catalog.email_product_export
Ürün dışa aktarımını e-postayla gönder — Seçilen XLSX dosyasını arka planda hazırlar ve e-postaya ek olarak gönderir.
Gereken izin catalog:export · dışarıya ulaşır (gönderir, yayımlar ya da ücret alır)
https://app.getera.io/api/v1/actions/catalog.email_product_exportGirdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
email | string | evet | Alıcı · en çok 320 |
fields | object / array | evet | Alanlar |
filter | object / array | Geçerli filtreler |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
invalid_export_email | Alıcı geçerli bir e-posta adresi olmalı. |
invalid_export_fields | Dışa aktarma için en az bir ürün alanı seçilmeli. |
Yayımladığı olaylar: catalog.export_queued
curl -X POST https://app.getera.io/api/v1/actions/catalog.email_product_export \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"email":"Recipient","fields":{}}'{
"ok": true,
"result": "…",
"events": [
"catalog.export_queued"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.actions.run("catalog.email_product_export", {
email: "Recipient",
fields: {}
})era catalog email_product_export --data '{"email":"Recipient","fields":{}}'{
"name": "era__catalog__email_product_export",
"arguments": {
"email": "Recipient",
"fields": {}
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:export izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 invalid_export_email, invalid_export_fields · 429 çok sık istek
catalog.move_category
Kategoriyi taşı — Bir kategoriyi başka birinin içine ya da en üst seviyeye koyar.
Gereken izin catalog:manage · veriyi değiştirir
https://app.getera.io/api/v1/categories/{id}/actions/move_category- Asıl adres:
POST /api/v1/actions/catalog.move_category
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Kategori · kimliği: item_category |
parentId | uuid | İçeride · kimliği: item_category |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
not_found | Kategori bulunmalı. |
parent_not_found | Üst kategori bulunmalı. |
cycle | Bir kategori kendi içine taşınamaz. |
Yayımladığı olaylar: catalog.category_moved
Neye yazar: item_category (update) — Moves the category
curl -X POST https://app.getera.io/api/v1/categories/CATEGORY_ID/actions/move_category \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"parentId":"ITEM_CATEGORY_ID"}'{
"ok": true,
"result": "…",
"events": [
"catalog.category_moved"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.categories.moveCategory("CATEGORY_ID", {
parentId: "ITEM_CATEGORY_ID"
})era categories move_category CATEGORY_ID \
--parent-id "ITEM_CATEGORY_ID"{
"name": "era__catalog__move_category",
"arguments": {
"id": "CATEGORY_ID",
"parentId": "ITEM_CATEGORY_ID"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 not_found, parent_not_found, cycle · 429 çok sık istek
catalog.publish
Yayımla — Mağaza sitesine koyar.
Gereken izin catalog:write · dışarıya ulaşır (gönderir, yayımlar ya da ücret alır)
https://app.getera.io/api/v1/products/{id}/actions/publish- Asıl adres:
POST /api/v1/actions/catalog.publish
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Kalem · kimliği: item |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
not_found | Kayıt bulunmalı. |
already_published | Hâlâ taslak olmalı. |
no_variant | Satılacak bir şey olmalı. |
no_price | Hediye kartının bir değeri olmalı. |
Yayımladığı olaylar: catalog.published
Neye yazar: item (update) — Stamps published_at
curl -X POST https://app.getera.io/api/v1/products/PRODUCT_ID/actions/publish \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{}'{
"ok": true,
"result": "…",
"events": [
"catalog.published"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.products.publish("PRODUCT_ID")era products publish PRODUCT_ID{
"name": "era__catalog__publish",
"arguments": {
"id": "PRODUCT_ID"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 not_found, already_published, no_variant, no_price · 429 çok sık istek
catalog.remove_variant
Varyantı kaldır — Bir varyantı bırakır; sonuncusu değilse veya ona bağlı bir şey yoksa.
Gereken izin catalog:delete · siler ya da geri alınamaz · Era çalıştırırken bir kişiye onaylatır
https://app.getera.io/api/v1/variants/{id}/actions/remove_variant- Asıl adres:
POST /api/v1/actions/catalog.remove_variant
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Varyant · kimliği: item_variant |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
variant_not_found | Varyant bulunmalı. |
last_variant | Bir ürünün her zaman en az bir varyantı kalır. |
variant_in_use | Ona bağlı randevu ve paketler önce belirtilir. |
Yayımladığı olaylar: catalog.variant_removed
Neye yazar: item_variant (delete) — Removes the variant
curl -X POST https://app.getera.io/api/v1/variants/VARIANT_ID/actions/remove_variant \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{}'{
"ok": true,
"result": "…",
"events": [
"catalog.variant_removed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.variants.removeVariant("VARIANT_ID")era variants remove_variant VARIANT_ID{
"name": "era__catalog__remove_variant",
"arguments": {
"id": "VARIANT_ID"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:delete izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 variant_not_found, last_variant, variant_in_use · 429 çok sık istek
catalog.reorder_files
Görselleri sırala — Mağaza sitesinin onları gösterdiği sıra.
Gereken izin catalog:write · veriyi değiştirir
https://app.getera.io/api/v1/product_files/actions/reorder_files- Asıl adres:
POST /api/v1/actions/catalog.reorder_files
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
itemId | uuid | evet | Kalem · kimliği: item |
attachmentIds | object / array | evet | Ekler |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
not_found | Ürün bulunmalı. |
attachment_not_on_item | Her ek bu ürüne ait olmalı. |
Yayımladığı olaylar: catalog.files_changed
Neye yazar: item_file (update) — Writes the order
curl -X POST https://app.getera.io/api/v1/product_files/actions/reorder_files \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"itemId":"ITEM_ID","attachmentIds":{}}'{
"ok": true,
"result": "…",
"events": [
"catalog.files_changed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.productFiles.reorderFiles({
itemId: "ITEM_ID",
attachmentIds: {}
})era product_files reorder_files --data '{"itemId":"ITEM_ID","attachmentIds":{}}'{
"name": "era__catalog__reorder_files",
"arguments": {
"itemId": "ITEM_ID",
"attachmentIds": {}
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 not_found, attachment_not_on_item · 429 çok sık istek
catalog.save_brand
Marka ekle veya düzenle — Ürünün kime ait olduğu — kendi sayfası, sitesi ve logosuyla.
Gereken izin catalog:manage · veriyi değiştirir
https://app.getera.io/api/v1/brands/{id}/actions/save_brand- REST kısayolu:
PATCH /api/v1/brands/{id} - Asıl adres:
POST /api/v1/actions/catalog.save_brand
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | Doldurulduğu yer: adresteki {id} · Marka · kimliği: item_brand | |
name | string | evet | Ad · en çok 200 |
slug | string | Adres · en çok 200 | |
description | string | Açıklama · en çok 2000 | |
websiteUrl | string | Web sitesi · en çok 500 | |
parentId | uuid | Parçası olduğu · kimliği: item_brand | |
isFeatured | boolean | Vitrinde göster | |
isActive | boolean | Görünür | |
sortOrder | number | Sipariş | |
imageFileId | uuid | Logo · kimliği: file |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
invalid_name | Ad kullanılabilir bir adres üretmeli. |
slug_taken | Adres bu çalışma alanında boşta olmalı. |
parent_not_found | Üst marka bulunmalı. |
cycle | Bir marka kendi üstü olamaz. |
not_found | Düzenlerken marka bulunmalı. |
Yayımladığı olaylar: catalog.brand_created, catalog.brand_updated
Neye yazar: item_brand (upsert) — Writes the brand
curl -X POST https://app.getera.io/api/v1/brands/BRAND_ID/actions/save_brand \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"name":"Name"}'{
"ok": true,
"result": "…",
"events": [
"catalog.brand_created",
"catalog.brand_updated"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.brands.saveBrand("BRAND_ID", {
name: "Name"
})era brands save_brand BRAND_ID \
--name "Name"{
"name": "era__catalog__save_brand",
"arguments": {
"id": "BRAND_ID",
"name": "Name"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 invalid_name, slug_taken, parent_not_found, cycle, not_found · 429 çok sık istek
catalog.save_variant
Varyant ekle veya düzenle — Gerçekte satılan şey: stok kodu, fiyat, süre, kapasite ve seçenekler.
Gereken izin catalog:write · veriyi değiştirir
https://app.getera.io/api/v1/variants/{id}/actions/save_variant- REST kısayolu:
PATCH /api/v1/variants/{id} - Asıl adres:
POST /api/v1/actions/catalog.save_variant
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | Doldurulduğu yer: adresteki {id} · Varyant · kimliği: item_variant | |
itemId | uuid | Kalem · kimliği: item | |
name | string | Varyant adı · en çok 200 | |
sku | string | Stok kodu · en çok 100 | |
priceAmount | number (money) | Fiyat (küçük birim) · en az 0 | |
costPriceAmount | number (money) | Maliyet (küçük birim) · en az 0 | |
durationMinutes | number | Süre (dakika) · en az 5 · en çok 1440 | |
capacity | number | Kontenjan · en az 1 | |
weightGrams | number | Ağırlık (g) · en az 0 | |
quantityLimitPerCustomer | number | Müşteri başına sınır · en az 1 | |
trackInventory | boolean | Stoku takip et | |
sortOrder | number | Sipariş | |
optionValueIds | string | Seçenek değerleri · Virgülle ayrılmış seçenek değeri kimlikleri — her eksen için bir tane. · en çok 2000 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
not_found | Ürün bulunmalı. |
variant_not_found | Varyant bulunmalı. |
sku_taken | Bir stok kodu tek bir varyanta aittir. |
weight_on_unshipped | Yalnızca kargoyla gönderilen bir şeyin ağırlığı olur. |
duration_on_product | Bir ürünün süresi yoktur. |
option_value_not_on_item | Her seçenek değeri bu ürüne ait olmalı. |
variant_combination_exists | İki varyant aynı kombinasyonu paylaşamaz. |
Yayımladığı olaylar: catalog.variant_changed
Neye yazar: item_variant (upsert) — Writes the variant; item_variant_option (upsert) — Writes which axes it sits on
curl -X POST https://app.getera.io/api/v1/variants/VARIANT_ID/actions/save_variant \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"itemId":"ITEM_ID"}'{
"ok": true,
"result": "…",
"events": [
"catalog.variant_changed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.variants.saveVariant("VARIANT_ID", {
itemId: "ITEM_ID"
})era variants save_variant VARIANT_ID \
--item-id "ITEM_ID"{
"name": "era__catalog__save_variant",
"arguments": {
"id": "VARIANT_ID",
"itemId": "ITEM_ID"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 not_found, variant_not_found, sku_taken, weight_on_unshipped, duration_on_product, option_value_not_on_item, variant_combination_exists · 429 çok sık istek
catalog.set_brand_visibility
Markayı göster veya gizle — Ürün geçmişini korurken markanın seçicilerde ve vitrinlerde görünüp görünmeyeceğini belirler.
Gereken izin catalog:manage · veriyi değiştirir
https://app.getera.io/api/v1/brands/{id}/actions/set_brand_visibility- Asıl adres:
POST /api/v1/actions/catalog.set_brand_visibility
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Marka · kimliği: item_brand |
isActive | boolean | evet | Görünür |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
not_found | Marka bulunmalı. |
Yayımladığı olaylar: catalog.brand_updated
Neye yazar: item_brand (update) — Changes storefront visibility
curl -X POST https://app.getera.io/api/v1/brands/BRAND_ID/actions/set_brand_visibility \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"isActive":true}'{
"ok": true,
"result": "…",
"events": [
"catalog.brand_updated"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.brands.setBrandVisibility("BRAND_ID", {
isActive: true
})era brands set_brand_visibility BRAND_ID \
--is-active true{
"name": "era__catalog__set_brand_visibility",
"arguments": {
"id": "BRAND_ID",
"isActive": true
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 not_found · 429 çok sık istek
catalog.set_options
Varyant seçeneklerini belirle — Bir varyantı diğerinden ayıran şey — beden, renk, uzunluk.
Gereken izin catalog:write · veriyi değiştirir
https://app.getera.io/api/v1/product_options/actions/set_options- Asıl adres:
POST /api/v1/actions/catalog.set_options
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
itemId | uuid | evet | Kalem · kimliği: item |
options | object / array | evet | Seçenekler · [{ "name": "Size", "values": [{ "label": "S" }, { "label": "M" }] }] |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
not_found | Ürün bulunmalı. |
invalid_options | Her seçeneğin bir adı ve etiketli değerleri olmalı. |
option_in_use_by_variant | Bir varyantın bağlı olduğu seçenek kaybolamaz. |
Yayımladığı olaylar: catalog.options_changed
Neye yazar: item_option (upsert) — Replaces the axes; item_option_value (upsert) — Replaces their values
curl -X POST https://app.getera.io/api/v1/product_options/actions/set_options \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"itemId":"ITEM_ID","options":{}}'{
"ok": true,
"result": "…",
"events": [
"catalog.options_changed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.productOptions.setOptions({
itemId: "ITEM_ID",
options: {}
})era product_options set_options --data '{"itemId":"ITEM_ID","options":{}}'{
"name": "era__catalog__set_options",
"arguments": {
"itemId": "ITEM_ID",
"options": {}
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 not_found, invalid_options, option_in_use_by_variant · 429 çok sık istek
catalog.set_package_contents
Paketin içeriğini belirle — Paketin içeriğini değiştirir — varyantlar, miktarlarıyla ve sırasıyla.
Gereken izin catalog:write · veriyi değiştirir
https://app.getera.io/api/v1/product_components/actions/set_package_contents- Asıl adres:
POST /api/v1/actions/catalog.set_package_contents
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
packageItemId | uuid | evet | Paket · kimliği: item |
contents | string | evet | İçerik · Virgülle ayrılmış varyant kimlikleri, isteğe bağlı olarak id:quantity — ör. on seans için “…:10”. · en çok 4000 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
not_found | Paket bulunmalı. |
not_a_package | Kayıt “paket” türünde olmalı. |
package_empty | Paketin en az bir satırı olmalı. |
invalid_quantity | Miktar bir veya daha büyük bir tam sayıdır. |
component_not_found | Her satır gerçek bir varyantı göstermeli. |
self_component | Bir paket kendini içeremez. |
component_is_package | Paketler iç içe olmaz. |
Yayımladığı olaylar: catalog.package_changed
Neye yazar: item_component (upsert) — Replaces the package contents
curl -X POST https://app.getera.io/api/v1/product_components/actions/set_package_contents \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"packageItemId":"ITEM_ID","contents":"Contents"}'{
"ok": true,
"result": "…",
"events": [
"catalog.package_changed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.productComponents.setPackageContents({
packageItemId: "ITEM_ID",
contents: "Contents"
})era product_components set_package_contents \
--package-item-id "ITEM_ID" \
--contents "Contents"{
"name": "era__catalog__set_package_contents",
"arguments": {
"packageItemId": "ITEM_ID",
"contents": "Contents"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 not_found, not_a_package, package_empty, invalid_quantity, component_not_found, self_component, component_is_package · 429 çok sık istek
catalog.set_price
Fiyat belirle — Bir varyantın liste fiyatı. İmzalanmış sözleşmeler onunla değişmez.
Gereken izin catalog:write · veriyi değiştirir
https://app.getera.io/api/v1/variants/{id}/actions/set_price- Asıl adres:
POST /api/v1/actions/catalog.set_price
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
variantId | uuid | evet | Doldurulduğu yer: adresteki {id} · Varyant · kimliği: item_variant |
priceAmount | number (money) | Fiyat (küçük birim) · en az 0 | |
currency | string | Para birimi · en çok 3 | |
costPriceAmount | number (money) | Maliyet (küçük birim) · en az 0 | |
priorPriceAmount | number (money) | Önceki fiyat · AB Omnibus. · en az 0 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
variant_not_found | Varyant bulunmalı. |
currency_mismatch | Tek katalog, tek para birimi. |
Yayımladığı olaylar: catalog.price_changed
Neye yazar: item_variant (update) — Writes the price
curl -X POST https://app.getera.io/api/v1/variants/VARIANT_ID/actions/set_price \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"priceAmount":1}'{
"ok": true,
"result": "…",
"events": [
"catalog.price_changed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.variants.setPrice("VARIANT_ID", {
priceAmount: 1
})era variants set_price VARIANT_ID \
--price-amount 1{
"name": "era__catalog__set_price",
"arguments": {
"variantId": "VARIANT_ID",
"priceAmount": 1
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 variant_not_found, currency_mismatch · 429 çok sık istek
catalog.unpublish
Yayından kaldır — İç listeden çıkarmadan taslağa geri alır.
Gereken izin catalog:write · dışarıya ulaşır (gönderir, yayımlar ya da ücret alır)
https://app.getera.io/api/v1/products/{id}/actions/unpublish- Asıl adres:
POST /api/v1/actions/catalog.unpublish
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Kalem · kimliği: item |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
not_found | Kayıt bulunmalı. |
not_published | Yayımlanmış olmalı. |
Yayımladığı olaylar: catalog.unpublished
Neye yazar: item (update) — Clears published_at
curl -X POST https://app.getera.io/api/v1/products/PRODUCT_ID/actions/unpublish \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{}'{
"ok": true,
"result": "…",
"events": [
"catalog.unpublished"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.products.unpublish("PRODUCT_ID")era products unpublish PRODUCT_ID{
"name": "era__catalog__unpublish",
"arguments": {
"id": "PRODUCT_ID"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 not_found, not_published · 429 çok sık istek
catalog.update_category
Kategoriyi düzenle — Kategorinin metnini, adresini, içeriğini ve sitede görünürlüğünü günceller.
Gereken izin catalog:manage · veriyi değiştirir
https://app.getera.io/api/v1/categories/{id}/actions/update_category- REST kısayolu:
PATCH /api/v1/categories/{id} - Asıl adres:
POST /api/v1/actions/catalog.update_category
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Kategori · kimliği: item_category |
name | string | Ad · en çok 200 | |
slug | string | Adres · en çok 200 | |
description | string | Açıklama · en çok 2000 | |
content | object / array | Sayfa içeriği | |
icon | string | Simge · en çok 64 | |
imageFileId | uuid | Görsel · kimliği: file | |
isActive | boolean | Görünür | |
sortOrder | number | Sipariş | |
seoTitle | string | Arama başlığı · en çok 200 | |
seoDescription | string | Arama açıklaması · en çok 500 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
not_found | Kategori bulunmalı. |
invalid_name | Ad kullanılabilir bir adres üretmeli. |
slug_taken | Adres bu çalışma alanında boşta olmalı. |
Yayımladığı olaylar: catalog.category_updated
Neye yazar: item_category (update) — Updates the category
curl -X POST https://app.getera.io/api/v1/categories/CATEGORY_ID/actions/update_category \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"name":"Name"}'{
"ok": true,
"result": "…",
"events": [
"catalog.category_updated"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.categories.updateCategory("CATEGORY_ID", {
name: "Name"
})era categories update_category CATEGORY_ID \
--name "Name"{
"name": "era__catalog__update_category",
"arguments": {
"id": "CATEGORY_ID",
"name": "Name"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 not_found, invalid_name, slug_taken · 429 çok sık istek
catalog.update_file
Görseli tanımla — Alternatif metni ve hangi varyantı gösterdiği.
Gereken izin catalog:write · veriyi değiştirir
https://app.getera.io/api/v1/product_files/{id}/actions/update_file- Asıl adres:
POST /api/v1/actions/catalog.update_file
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Ek · kimliği: item_file |
alt | string | Alternatif metin · en çok 250 | |
variantId | uuid | Varyant · kimliği: item_variant |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
attachment_not_found | Ek bulunmalı ve hâlâ ekli olmalı. |
variant_not_on_item | Varyant aynı ürüne ait olmalı. |
Yayımladığı olaylar: catalog.files_changed
Neye yazar: item_file (update) — Writes the alt text and variant
curl -X POST https://app.getera.io/api/v1/product_files/PRODUCT_FILE_ID/actions/update_file \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"alt":"Alt text"}'{
"ok": true,
"result": "…",
"events": [
"catalog.files_changed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.productFiles.updateFile("PRODUCT_FILE_ID", {
alt: "Alt text"
})era product_files update_file PRODUCT_FILE_ID \
--alt "Alt text"{
"name": "era__catalog__update_file",
"arguments": {
"id": "PRODUCT_FILE_ID",
"alt": "Alt text"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 attachment_not_found, variant_not_on_item · 429 çok sık istek
catalog.update_item
Katalog kaydını düzenle — Adı, adresi, gruplaması, metni ve SEO bilgisi.
Gereken izin catalog:write · veriyi değiştirir
https://app.getera.io/api/v1/products/{id}/actions/update_item- REST kısayolu:
PATCH /api/v1/products/{id} - Asıl adres:
POST /api/v1/actions/catalog.update_item
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Kalem · kimliği: item |
name | string | Ad · en çok 200 | |
slug | string | Adres · en çok 200 | |
categoryId | uuid | Kategori · kimliği: item_category | |
brandId | uuid | Marka · kimliği: item_brand | |
description | string | Açıklama · en çok 4000 | |
summary | string | Kısa açıklama · en çok 500 | |
content | object / array | Sayfa içeriği | |
model | string | Model · en çok 200 | |
seoTitle | string | SEO başlığı · en çok 200 | |
seoDescription | string | SEO açıklaması · en çok 500 | |
isFeatured | boolean | Öne çıkan | |
fulfilment | string (enum) | Teslim şekli · İzin verilen değerler: appointment, home_service, group_class, shipping, digital | |
externalReference | string | Harici anahtar · en çok 200 | |
sortOrder | number | Sipariş | |
features | object / array | Özellikler · Madde işaretleriyle gösterilen kısa satırlardan oluşan bir liste. |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
not_found | Kayıt bulunmalı. |
invalid_name | Ad kullanılabilir bir adres üretmeli. |
slug_taken | Adres bu çalışma alanında boşta olmalı. |
fulfilment_not_allowed_for_kind | Bir ürün randevu almaz. |
category_not_found | Kategori bulunmalı. |
brand_not_found | Marka bulunmalı. |
Yayımladığı olaylar: catalog.item_updated
Neye yazar: item (update) — Updates the catalogue entry
curl -X POST https://app.getera.io/api/v1/products/PRODUCT_ID/actions/update_item \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"name":"Name"}'{
"ok": true,
"result": "…",
"events": [
"catalog.item_updated"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.products.updateItem("PRODUCT_ID", {
name: "Name"
})era products update_item PRODUCT_ID \
--name "Name"{
"name": "era__catalog__update_item",
"arguments": {
"id": "PRODUCT_ID",
"name": "Name"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 not_found, invalid_name, slug_taken, fulfilment_not_allowed_for_kind, category_not_found, brand_not_found · 429 çok sık istek
catalog.update_item_metadata
Ürün ek bilgilerini düzenle — Kaydın anahtar → değer ek bilgilerini, herkese açık veya gizli olarak yeniden yazar.
Gereken izin catalog:write · veriyi değiştirir
https://app.getera.io/api/v1/products/{id}/actions/update_item_metadata- Asıl adres:
POST /api/v1/actions/catalog.update_item_metadata
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Kalem · kimliği: item |
metadata | object / array | Meta veri | |
privateMetadata | object / array | Özel meta veri |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
not_found | Kayıt bulunmalı. |
Yayımladığı olaylar: catalog.item_updated
Neye yazar: item (update) — Writes the metadata
curl -X POST https://app.getera.io/api/v1/products/PRODUCT_ID/actions/update_item_metadata \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"metadata":{}}'{
"ok": true,
"result": "…",
"events": [
"catalog.item_updated"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.products.updateItemMetadata("PRODUCT_ID", {
metadata: {}
})era products update_item_metadata PRODUCT_ID --data '{"metadata":{}}'{
"name": "era__catalog__update_item_metadata",
"arguments": {
"id": "PRODUCT_ID",
"metadata": {}
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde catalog:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 not_found · 429 çok sık istek
Veri modelleri
ItemBrand
Tablo item_brand · Kaynak brands
GET /api/v1/brandsGET /api/v1/brands/{id}PATCH /api/v1/brands/{id}→catalog.save_brand
| Sütun | Tür | Boş olabilir | İzin verilen değerler | Bağlı olduğu tablo |
|---|---|---|---|---|
id | string (uuid) · uuid | |||
organization_id | string (uuid) · uuid | organization | ||
workspace_id | string (uuid) · uuid | workspace | ||
name | string · text | |||
slug | string · text | |||
description | string · text | evet | ||
website_url | string · text | evet | ||
image_file_id | string (uuid) · uuid | evet | file | |
parent_id | string (uuid) · uuid | evet | item_brand | |
is_active | boolean · bool | |||
is_featured | boolean · bool | |||
sort_order | integer · int4 | |||
created_at | string (date-time) · timestamptz | |||
updated_at | string (date-time) · timestamptz |
Birincil anahtar: id
Tekil: workspace_id, slug
ItemCategory
Tablo item_category · Kaynak categories
GET /api/v1/categoriesGET /api/v1/categories/{id}PATCH /api/v1/categories/{id}→catalog.update_category
| Sütun | Tür | Boş olabilir | İzin verilen değerler | Bağlı olduğu tablo |
|---|---|---|---|---|
id | string (uuid) · uuid | |||
organization_id | string (uuid) · uuid | organization | ||
workspace_id | string (uuid) · uuid | workspace | ||
name | string · text | |||
slug | string · text | |||
description | string · text | evet | ||
icon | string · text | evet | ||
image_file_id | string (uuid) · uuid | evet | file | |
content | object · jsonb | evet | ||
sort_order | integer · int4 | |||
is_active | boolean · bool | |||
parent_id | string (uuid) · uuid | evet | item_category | |
created_at | string (date-time) · timestamptz | |||
updated_at | string (date-time) · timestamptz | |||
seo_title | string · text | evet | ||
seo_description | string · text | evet |
Birincil anahtar: id
Tekil: workspace_id, slug
ItemComponent
Tablo item_component · Kaynak product_components
GET /api/v1/product_componentsGET /api/v1/product_components/{id}
| Sütun | Tür | Boş olabilir | İzin verilen değerler | Bağlı olduğu tablo |
|---|---|---|---|---|
id | string (uuid) · uuid | |||
organization_id | string (uuid) · uuid | organization | ||
workspace_id | string (uuid) · uuid | workspace | ||
parent_item_id | string (uuid) · uuid | item | ||
sort_order | integer · int4 | |||
item_variant_id | string (uuid) · uuid | item_variant | ||
quantity | integer · int4 |
Birincil anahtar: id
Tekil: parent_item_id, item_variant_id
Denetimler:
CHECK ((quantity >= 1))
ItemFile
Tablo item_file · Kaynak product_files
GET /api/v1/product_filesGET /api/v1/product_files/{id}
| Sütun | Tür | Boş olabilir | İzin verilen değerler | Bağlı olduğu tablo |
|---|---|---|---|---|
id | string (uuid) · uuid | |||
organization_id | string (uuid) · uuid | organization | ||
workspace_id | string (uuid) · uuid | workspace | ||
item_id | string (uuid) · uuid | item | ||
variant_id | string (uuid) · uuid | evet | item_variant | |
file_id | string (uuid) · uuid | evet | file | |
role | string · text | image, video, datasheet, download | ||
alt | string · text | evet | ||
external_url | string · text | evet | ||
to_remove | boolean · bool | |||
sort_order | integer · int4 | |||
created_at | string (date-time) · timestamptz |
Birincil anahtar: id
Denetimler:
CHECK (((file_id IS NOT NULL) OR (external_url IS NOT NULL)))
ItemOptionValue
Tablo item_option_value · Kaynak product_option_values
GET /api/v1/product_option_valuesGET /api/v1/product_option_values/{id}
| Sütun | Tür | Boş olabilir | İzin verilen değerler | Bağlı olduğu tablo |
|---|---|---|---|---|
id | string (uuid) · uuid | |||
organization_id | string (uuid) · uuid | organization | ||
workspace_id | string (uuid) · uuid | workspace | ||
option_id | string (uuid) · uuid | item_option | ||
label | string · text | |||
swatch | string · text | evet | ||
file_id | string (uuid) · uuid | evet | file | |
sort_order | integer · int4 |
Birincil anahtar: id
Tekil: option_id, label
ItemOption
Tablo item_option · Kaynak product_options
GET /api/v1/product_optionsGET /api/v1/product_options/{id}
| Sütun | Tür | Boş olabilir | İzin verilen değerler | Bağlı olduğu tablo |
|---|---|---|---|---|
id | string (uuid) · uuid | |||
organization_id | string (uuid) · uuid | organization | ||
workspace_id | string (uuid) · uuid | workspace | ||
item_id | string (uuid) · uuid | item | ||
name | string · text | |||
sort_order | integer · int4 |
Birincil anahtar: id
Tekil: item_id, name
Item
Tablo item · Kaynak products
GET /api/v1/productsGET /api/v1/products/{id}POST /api/v1/products→catalog.create_itemPATCH /api/v1/products/{id}→catalog.update_item
| Sütun | Tür | Boş olabilir | İzin verilen değerler | Bağlı olduğu tablo |
|---|---|---|---|---|
id | string (uuid) · uuid | |||
organization_id | string (uuid) · uuid | organization | ||
workspace_id | string (uuid) · uuid | workspace | ||
category_id | string (uuid) · uuid | evet | item_category | |
name | string · text | |||
slug | string · text | |||
description | string · text | evet | ||
features | string[] · text[] | evet | ||
fulfilment | string · text | appointment, home_service, group_class, shipping, digital | ||
is_active | boolean · bool | |||
sort_order | integer · int4 | |||
created_at | string (date-time) · timestamptz | |||
updated_at | string (date-time) · timestamptz | |||
kind | string · text | product, service, package, gift_card | ||
summary | string · text | evet | ||
content | object · jsonb | evet | ||
seo_title | string · text | evet | ||
seo_description | string · text | evet | ||
published_at | string (date-time) · timestamptz | evet | ||
is_featured | boolean · bool | |||
model | string · text | evet | ||
rating | number · float4 | evet | ||
tax_class_id | string (uuid) · uuid | evet | ||
external_reference | string · text | evet | ||
brand_id | string (uuid) · uuid | evet | item_brand | |
default_variant_id | string (uuid) · uuid | evet | item_variant | |
is_public | boolean · bool | evet | ||
metadata | object · jsonb | |||
private_metadata | object · jsonb |
Birincil anahtar: id
Tekil: workspace_id, slug
Denetimler:
CHECK ( CASE kind WHEN 'service'::text THEN (fulfilment = ANY (ARRAY['appointment'::text, 'home_service'::text, 'group_class'::text])) WHEN 'product'::text THEN (fulfilment = ANY (ARRAY['shipping'::text, 'digital'::text])) ELSE true END)
ItemVariantOption
Tablo item_variant_option · Kaynak variant_options
GET /api/v1/variant_optionsGET /api/v1/variant_options/{id}
| Sütun | Tür | Boş olabilir | İzin verilen değerler | Bağlı olduğu tablo |
|---|---|---|---|---|
id | string (uuid) · uuid | |||
organization_id | string (uuid) · uuid | organization | ||
workspace_id | string (uuid) · uuid | workspace | ||
variant_id | string (uuid) · uuid | item_variant | ||
option_id | string (uuid) · uuid | item_option | ||
option_value_id | string (uuid) · uuid | item_option_value |
Birincil anahtar: id
Tekil: variant_id, option_id
ItemVariant
Tablo item_variant · Kaynak variants
GET /api/v1/variantsGET /api/v1/variants/{id}PATCH /api/v1/variants/{id}→catalog.save_variant
| Sütun | Tür | Boş olabilir | İzin verilen değerler | Bağlı olduğu tablo |
|---|---|---|---|---|
id | string (uuid) · uuid | |||
organization_id | string (uuid) · uuid | organization | ||
workspace_id | string (uuid) · uuid | workspace | ||
item_id | string (uuid) · uuid | item | ||
name | string · text | |||
sku | string · text | evet | ||
price_amount | string (int64) · int8 | evet | ||
price_currency | string · bpchar | evet | en çok 3 | |
cost_price_amount | string (int64) · int8 | evet | ||
prior_price_amount | string (int64) · int8 | evet | ||
duration_minutes | integer · int4 | evet | ||
capacity | integer · int4 | |||
weight_grams | string (int64) · int8 | evet | ||
quantity_limit_per_customer | integer · int4 | evet | ||
track_inventory | boolean · bool | |||
external_reference | string · text | evet | ||
is_active | boolean · bool | |||
sort_order | integer · int4 | |||
created_at | string (date-time) · timestamptz | |||
updated_at | string (date-time) · timestamptz |
Birincil anahtar: id
Denetimler:
CHECK ((capacity >= 1))CHECK (((cost_price_amount IS NULL) OR (cost_price_amount >= 0)))CHECK (((duration_minutes IS NULL) OR ((duration_minutes >= 5) AND (duration_minutes <= 1440))))CHECK (((price_amount IS NULL) OR (price_amount >= 0)))CHECK (((quantity_limit_per_customer IS NULL) OR (quantity_limit_per_customer >= 1)))CHECK (((weight_grams IS NULL) OR (weight_grams >= 0)))
Olaylar
İş akışları ve webhook'lar bu olaylara tepki verir.
| Olay | Ne olur | Taşıdığı alanlar |
|---|---|---|
catalog.activated | Bir katalog kaydı yeniden satışa açıldı. | id |
catalog.brand_created | Bir marka eklendi. | id, slug |
catalog.brand_updated | Bir marka düzenlendi. | id, slug |
catalog.category_created | Bir kategori eklendi. | id, name, slug |
catalog.category_moved | Bir kategorinin üst kategorisi değişti. | id, parentId |
catalog.category_updated | Bir kategori düzenlendi. | id, slug |
catalog.deactivated | Bir katalog kaydı satıştan kaldırıldı. | id, keptAppointments |
catalog.export_queued | Ürün Excel dosyası e-postayla gönderilmek üzere sıraya alındı. | jobId, email, fields |
catalog.files_changed | Bir görsel ya da dosya eklendi veya kaldırıldı. | id, attachmentId |
catalog.item_created | Kataloğa bir şey eklendi. | id, name, slug, kind, variantId |
catalog.item_deleted | Bir katalog kaydı silindi. | id |
catalog.item_updated | Bir katalog kaydı düzenlendi. | id, slug |
catalog.options_changed | Varyant eksenleri değişti. | id, count |
catalog.package_changed | Bir paketin içeriği değiştirildi. | id, count |
catalog.price_changed | Bir liste fiyatı değişti. | variantId, itemId, amount, currency |
catalog.published | Bir katalog kaydı vitrinde yayımlandı. | id, slug |
catalog.unpublished | Bir katalog kaydı taslağa döndü. | id |
catalog.variant_changed | Bir varyant eklendi ya da düzenlendi. | id, itemId |
catalog.variant_removed | Bir varyant kaldırıldı. | id, itemId |