Skip to main content
The IngestionService class (accessed via client.ingestion) pushes or syncs an external product catalog into your store. When the merchant’s own system — an ERP, a PIM, another storefront, or a spreadsheet export — is the source of truth for products, you send batches here as JSON, XML, or CSV instead of entering products by hand. For the full conceptual guide (matching rules, formats, scheduled sync), see Catalog Ingestion.

Overview

Galactic Core matches each incoming row to your existing catalog by SKU: an existing SKU is updated in place, a new SKU is created. Rows that share a product_group become variants of one product. Every batch returns a summary of counts and a per-row errors array, so one bad row never fails the whole import.
Secret key + request signature required. ingestProducts is a write — initialize the SDK with a secret key (tybrite_sk_*). A publishable key returns 403. The SDK signs the request for you; if you call the endpoint directly, you must add the signing headers yourself (see Signing a request).

ingestProducts

Push or sync a batch of products into your store. Parameters: Product fields (each entry in products): Field names are matched leniently on case, spaces, underscores and hyphens, and several accept alternative spellings: title for name, qty or quantity for stock, cost for cost_price, handle or parent for product_group, and image_url or image_link for image. A row also carries catalog identifiers, shipping dimensions, channel taxonomy and storefront metadata: gtin, mpn, condition, weight_grams, dimensions_cm, google_product_category, meta_product_category, tags, seo_title, seo_description, seo_keywords, is_online_enabled, online_price and online_sale_price. See Catalog identity and channel fields. A column matching none of the fields above is matched against the store’s custom fields by label, and recorded on the product where one matches; a column matching none is ignored. cost_price is what margin is calculated from, so a product imported without it books no cost against its sales. A feed registered for scheduled sync decides per field whether the feed or the merchant owns it on a re-sync, so a merchant’s edit can stand rather than being rewritten. That is a property of the registered source: a push applies the values in the batch as sent. See Which side owns a field. Signed example — one standalone product and one multi-variant product (its rows share a product_group):
Response
The SDK signs the request when initialized with your secret key. To push a raw body yourself (curl, another language, a serverless handler), add the X-Timestamp, X-Signature, and Idempotency-Key headers — see Signing a request.
Response fields: summary counts: errors entries:

getIngestSample

Returns a valid sample product feed you can copy to model your own. No API key required. The sample includes a single-variant product and a multi-variant product so you can see exactly how product_group expresses variants. Rate-limited to 60 requests/hour per IP. Parameters:
Response

testIngest

Parses and validates a feed without writing anything to your store, returning the same summary and errors a real import would — plus a normalized_preview showing how Galactic Core interpreted each row. No API key required, so you can perfect your feed format before integrating. Rate-limited to 60 requests/hour per IP. Parameters:
Response
Response fields:

Publishing a catalog

Ingestion brings products in. The opposite direction — a store’s catalog published as a public JSON or XML feed that another store can pull and ingest with no field mapping — is read with client.feeds, alongside the store’s llms.txt files and its agent.json.

Response Codes