Product Catalog sync through API
This page will describe how you can use our GraphQL API to synchronize product catalog AI Knowledge with your systems, with the aim to use this knowledge in your generative AI bots.
Introduction
This feature allows to keep knowledge about products up to date, by allowing you to send updates, creations and deletion operations about the product information your system holds. Upon receiving these events, we'll index the new knowledge such that your bot can use the very latest information to answer your visitors' questions.
To do so, we'll look into how you can create a knowledge source (your product catalog), and insert, update and delete knowledge items (your products information).
Step 1: Recommended: Configure a product id custom data
Although this step is optional, we highly recommend you take the time to properly configure the custom data that holds the product id. This will enable the generative AI bots to automatically fetch the relevant product information based on the visitor's current page.
You'll find an article describing how to set up a custom data here. Take note of the custom data variable name, it will be useful during step 2.
Step 2: Create a new KnowledgeSource
This operation will only need to be done once, therefore there is no need to write any code for it.
It consists in using GraphQL to create a new KnowledgeSource, and taking note of the identifier that was attributed to it. This identifier will be used during step 3.
You can open the GraphQL mutation by clicking on this link. You'll need to:
Be logged in as an administrator.
Replace the variables in the bottom panel with the identifier of your project, the name of the knowledge you're about to create ("API sync product catalog" for instance), and put the name of the custom data variable.
Execute the query by clicking the KnowledgeSourceCreate blue button
Write down the identifier of the KnowledgeSource that will appear in the right panel
mutation KnowledgeSourceCreate(
$knowledgeSourceCreateInput: KnowledgeSourceCreateInput!
) {
knowledgeSourceCreate(knowledgeSourceCreateInput: $knowledgeSourceCreateInput) {
knowledgeSource {
id
name
}
}
}
{
"knowledgeSourceCreateInput": {
"details": {
"productApiSync": {
"customDataName": "<custom data name>"
}
},
"name": "<name>",
"projectId": <project id>
}
}Step3: Synchronize your products with us
Now you have a KnowledgeSource, you can add, update or delete items within that source. In order to do this, you'll need to react to events within your system and call our GraphQL API.
Create or update a product with upsert
You can use this mutation, bearing in mind you can submit up to 20 products in a single mutation.
When using the mutation knowledgeProductsUpsert to update a product, you need to send all the product's payload. If you want to only send fields which have changed (eg. price, availability, etc.), please refer to the knowledgeProductsPatch mutation described below.
Below is an example of request you can use to upsert products. This example only references a subset of fields you can set for products. Please refer to the definition of each available field in our GraphQL documentation and to get the expected type and values for each field.
Partially update products (patch)
Use this mutation when you only need to change a subset of fields for products that already exist in the knowledge source. Unlike knowledgeProductsUpsert, you do not send a full product payload: for each field, omit it to leave the stored value unchanged, pass null to clear it, or pass a value to set or replace it.
non-null value
the current field's value will be replaced with the new value. This behavior also impacts array fields (for example productDetails): setting a new value for the array will override the array. You can't just add or update one value of an array.
null value
field's value will be cleared
no value passed (not even null)
value will remain unchanged
Each object in products must include the product id plus at least one other patchable field (otherwise the request is rejected).
You can patch up to 100 products in a single mutation (compared to 20 for upsert).
Note: The response returns immediately with the list of products that were accepted for update, but indexing is asynchronous, like upsert. Respect the same rate limit (50 requests per second per IP address) when patching large catalogs.
Mutation
Variables
For example if you want to:
Set product 1's availability to OUT_OF_STOCK
Set product 2's price to 14.99 EUR and its availability to IN_STOCK
Remove product 3's brand information (a
nullvalue will remove the data)
Delete a product
Step 4: Read the products of your knowledge source
Before patching or deleting, you often need to know which products are currently stored in a knowledge source — for example to diff it against your own catalog and decide, product by product, whether to update or remove it.
Two queries are available for this. As with the mutations above, list only the fields you need — both queries return a KnowledgeProduct, whose full set of fields is described in our GraphQL documentation.
List the products of a knowledge source
knowledgeProducts returns the products of a knowledge source, paginated with a cursor-based connection. Use first together with after to walk through the whole catalog: pass the pageInfo.endCursor of the previous page as the next after, and repeat while pageInfo.hasNextPage is true.
The optional searchTerm in KnowledgeProductsSearchInput filters products whose id, item group id or title contains the term. It is meant for browsing, not for an exact lookup — for that, use knowledgeProduct below.
Fetch a single product by its id
knowledgeProduct returns one product matched exactly on its id within a knowledge source. This is the id you supplied when upserting the product (the same one used by knowledgeProductsPatch and knowledgeProductsDelete).
If no product matches the id in that knowledge source, the query returns null.
Last updated