Ingest a batch of products
Push or sync a batch of products into your store from an external source. Accepts
JSON, XML, or CSV — declare the format with the Content-Type header
(application/json, application/xml, text/csv) or the ?format= query parameter.
Batch size. A request carries at most 12 products; a larger batch is rejected with
400 rather than applied in part. Send a large catalog as a sequence of batches, or
configure a scheduled feed pull, which is built for whole-catalog sync.
Upsert by SKU. A product whose sku already exists in your store is updated;
a new sku is created. Pass ?strategy=create_only to skip existing SKUs instead
of updating them.
Variants. Rows that share the same product_group value become variants of one
product (each row needs its own unique sku). Rows without a product_group are
single-variant products.
Partial success. Rows are validated and applied independently — one bad row never
fails the whole batch. The response always carries a summary with created / updated /
skipped / failed counts and an errors array describing every rejected row (its
position, SKU, the offending field, and a human-readable reason). If every row
fails validation the response status is 422.
Required headers (same signing scheme as orders and payments):
Idempotency-Key— a unique key per batch; retrying with the same key returns the original result instead of re-processing.X-Timestamp— unix time in seconds, within 5 minutes of server time.X-Signature— base64 HMAC-SHA256 of`${X-Timestamp}.${raw_body}`signed with your store’s signing secret (the Integrations page, Developer section).
Tip: validate your feed first with POST /v1/ingest/test (no key, no writes).
Authorizations
API Key Authentication
Use your API key in the Authorization header:
Key Types:
Secret Keys (Server-Side Only):
- Format:
tybrite_sk_live_*(production) ortybrite_sk_test_*(sandbox) - Full read/write access to all endpoints
- ⚠️ NEVER expose in client-side code or public repositories
- Required for: write operations, authentication, payment verification, AI recommendations
Publishable Keys (Client-Safe):
- Format:
tybrite_pk_live_*(production) ortybrite_pk_test_*(sandbox) - Read-only access (GET requests only, plus POST semantic search)
- ✅ Safe for client-side JavaScript, mobile apps, and public code
- Allowed for: browsing products, search, CMS content, pricing queries
Endpoint-Specific Requirements:
- Authentication endpoints (
/v1/auth/*): Secret key required - Payment verification (
POST /v1/payments/verify): Secret key required - AI Recommendations (
POST /v1/recommendations): Secret key required - Semantic Search (
POST /v1/search): Both key types allowed (read-only operation) - All write operations: Secret key required
- All read operations: Both key types allowed
Using a publishable key for restricted operations returns 403 Forbidden.
Headers
Unique key per batch; retrying with the same key returns the original result instead of re-importing.
Unix timestamp in seconds (current time). Must be within 5 minutes of server time. Used to prevent replay attacks.
Base64-encoded HMAC-SHA256 of the payload (${X-Timestamp}.${raw_body}), signed with your
HMAC secret from the Integrations page (Developer section). Required in addition to the secret key.
Query Parameters
Overrides the Content-Type for format detection.
json, xml, csv upsert_by_sku (default) updates existing SKUs; create_only skips them.
upsert_by_sku, create_only When true, validate and report without writing anything.
Body
A batch of products. For JSON use { "products": [ … ] } (or a bare array). For
CSV, the first row is a header; for XML, a <products> root with <product>
children. Field names are matched leniently (e.g. Product Name → name).
Response
Batch processed. May be a full success or a partial success — inspect summary
and errors. status is success (no failures) or partial (some rows failed).
The outcome of an ingestion batch.
success (no failures), partial (some rows failed, the rest applied), or
failed (every row failed; nothing written).
success, partial, failed json, xml, csv upsert_by_sku, create_only Per-batch counts.

