Skip to main content
The Ingest API is the write path for external systems — shop syncs, Make.com scenarios, transcription tools, scripts. It is a plain HTTPS endpoint on your Concierca AI app (not an MCP tool): one URL pattern for every ingest-enabled table, authenticated with a scoped API key.
<slug> is the table’s view slug (e.g. orders, suppliers, meeting_notes). Which tables are ingest-enabled is registry-driven — a newly registered table needs zero code, and the current set is always listed in Settings → Data Sources.

Generating a key

Keys are managed in Settings → Data Sources (Company-Admin only):
  1. Open the card of the table you want to fill and click Generate API Key.
  2. Give it a label (e.g. “Make.com Shopify Flow”) — the key is created scoped to exactly that table.
  3. Copy the key immediately. It is shown once; only a SHA-256 hash and the first characters (prefix) are stored.
Keys look like pk_ followed by 48 hex characters. A key’s scopes decide which slugs it may write: a per-table key is the least-privilege default; a key with the wildcard scope * is a Master Import Key that covers every ingest table, including tables added after the key was issued. Keys can be revoked at any time — a revoked key gets 401 on the next call.

Request semantics

  • One JSON record per request. Send arrays as one request per element.
  • Idempotent upsert on (tenant_id, external_id). Re-sending the same external_id updates the existing row — retries and re-deliveries are always safe. Use the source system’s stable id (Shopify gid, meeting id, PO line id) as external_id. Exception: Products upsert on identity_key = COALESCE(external_id, sku) so SKU-only integrations keep working.
  • Only registered columns are accepted. The payload is sanitized against the table’s registered column set; unknown fields are dropped, and values are coerced to the column type. Each table page in the Data Model section lists the accepted fields.
  • Tenant identity comes from the key. tenant_id and workspace_id are stamped from the API-key context — never send them in the body.
  • Schema discovery: GET /api/ingest/<slug> returns the expected columns, the required scope, and the conflict key for that table.

Responses

Failed imports

A record that reaches the database but fails to materialize (422/500) is never silently lost: it is written to the Failed Imports dead-letter with its raw payload and the error. Review them in the app or over MCP with failed_import_list, fix the payload, and re-send — the upsert semantics make the retry safe.

Make.com flow templates

For the Shopify-shaped tables (Orders, Customers, Products, Order Line Items), Settings → Data Sources offers a downloadable Make.com flow template (a ready-made scenario blueprint JSON). Import it into Make, paste your API key into the HTTP module, and the field mapping is pre-wired to the ingest schema.

Ingest-enabled tables

The computed views (Product Demand, Procurement Queue, Customer Reorder Due, Family Trend, Weekly Sales, Seasonality) have no ingest endpoints — they are derived automatically from the tables above. Procurement Config, Strategy, and SOP are maintained in the app or via MCP tools.
Your tenant may have additional ingest-enabled tables (e.g. Decisions) — Settings → Data Sources always shows the live set, and GET /api/ingest/<slug> describes any of them.