Two ways in, for two different kinds of content.
Sync — for anything you already hold
Use this for policies, hours, FAQs, delivery terms: text that lives in your
product and that a merchant edits there.
Full replace. Send the complete set every time — anything absent is
deleted. That is what lets you avoid tracking our ids: your external_id is
the identity, and the diff is ours to work out.
Re-sending unchanged text is free. The body is checksummed, so unchanged
items skip re-embedding entirely and a nightly full sync of a large merchant
costs almost nothing.
Cards — for anything authored here
Individually managed notes. Use these if you build an editor into your own
admin. Cards written by sync are namespaced separately and will not collide
with these.
Documents and websites
Both are asynchronous. A 2xx means accepted, not indexed — extraction,
chunking and embedding happen after the response. Do not show your merchant a
green tick on the strength of the status code; poll the job first, or the
merchant sees “ready” over an empty index.
Grounding
Knowledge is what stops the assistant inventing answers. It is retrieved per
turn and the assistant is instructed not to state a price, policy or timeline
that is not in it. The more precise your sync, the fewer times an assistant has
to say “the team will confirm”.