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 aproduct_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.
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.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
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 withclient.feeds, alongside the store’s llms.txt files and
its agent.json.

