callbotagent.aiDokumentacja
v1 · Contract draft
ENPL
Otwórz panel
Zapowiedź

Dokumentacja poglądowa. Interfejs jest w trakcie udostępniania — przykłady mają charakter zapowiedzi, a finalne wartości potwierdzimy przy starcie.

Produkty, warianty, kategorie

Katalog to podstawa rozmów: bez aktualnego produktu, ceny i dostępności system nie zbuduje poprawnego skryptu. Zasób Products utrzymujesz jako lustro sklepu — zwykle jednym zbiorczym uploadem, a potem aktualizacjami przyrostowymi.

Base URL: https://api.callbotagent.ai/api/v1/commerce. Każde żądanie podpisujesz nagłówkami HMAC (X-CBA-Key-Id, X-CBA-Timestamp, X-CBA-Signature); mutacje dodają Idempotency-Key. Budowa podpisu: ./authentication.md, semantyka powtórzeń: ./idempotency.md.

Model produktu

Ciało w JSON snake_case. Ceny to decimal string z osobnym kodem waluty ISO 4217.

Pole Typ Opis
external_product_id string Twój identyfikator produktu (klucz upsertu).
title string Nazwa produktu widoczna w skrypcie rozmowy.
category string Kategoria/ścieżka katalogowa używana przez reguły sprzedaży.
status enum active | draft | archived.
availability enum in_stock | out_of_stock | preorder.
variants[] array Do 100 wariantów na produkt.
archived_at string | null Znacznik RFC 3339 UTC ustawiany przy archiwizacji.

Wariant (variants[]): external_variant_id (SKU), price (decimal string, np. "149.00"), currency (ISO 4217), inventory (integer; 0 = brak dostępności), min_quantity, max_quantity (integer | null).

Operacje

POST /products/batch

Idempotentny upsert do 500 produktów na żądanie (po 100 wariantów każdy). Scope catalog:write. Powtórzenie z tym samym Idempotency-Key zwraca ten sam wynik.

curl -X POST https://api.callbotagent.ai/api/v1/commerce/products/batch \
  -H "X-CBA-Key-Id: cba_test_••••••••" \
  -H "X-CBA-Timestamp: 2026-07-10T12:34:56Z" \
  -H "X-CBA-Signature: v1=9f8c2a...e41" \
  -H "Idempotency-Key: catalog-sync-2026-07-10-01" \
  -H "Content-Type: application/json" \
  -d '{
    "products": [{
      "external_product_id": "SKU-ROUTER-01", "title": "Router Mesh Home",
      "category": "sieci/routery", "status": "active", "availability": "in_stock",
      "variants": [{ "external_variant_id": "SKU-ROUTER-01-BLK",
        "price": "349.00", "currency": "PLN",
        "inventory": 42, "min_quantity": 1, "max_quantity": 5 }]
    }]
  }'
# 200 OK → { "accepted": 1, "rejected": 0,
#   "results": [{ "external_product_id": "SKU-ROUTER-01", "outcome": "upserted" }] }

GET /products

Lista z paginacją opaque cursor (?cursor=…&limit=50, maks. 200) i filtrami (status, availability, category). Scope catalog:read.

GET /products/{externalProductId}

Zwraca pojedynczy produkt z wariantami; brak zasobu → 404 resource_not_found.

DELETE /products/{externalProductId}

Archiwizacja (tombstone), nigdy hard delete. Produkt dostaje status: archived i archived_at, znika z nowych rozmów, ale pozostaje powiązany z historycznymi zamówieniami i regułami. Operacja jest idempotentna; wariant z inventory: 0 nie jest oferowany w rozmowie.