Run your workspace
Orders without a plugin
Orders without a plugin
Let the AI employee see a verified customer's orders, whatever your shop runs on: connect your shop system's API once, or send the orders yourself through the order webhook (from Zapier, Make, n8n or your own code) or a CSV file.
This is part of customer memory: it only works while customer memory is on for your workspace, and only for a verified customer, someone who confirmed their e-mail address with a code in the chat or whom your site signed in. A visitor who merely types an order number, a postcode or an address never sees an order.
Which way to choose
- Your shop runs on WooCommerce, Shopify, Lightspeed, Magento, PrestaShop or Shopware: connect its API under Settings › Integrations › Orders without a plugin. The AI employee looks up the customer's last orders by their e-mail address when their chat starts.
- Another system (CCV Shop, Mijnwebwinkel, a custom shop): send each order to the order webhook when it is placed and whenever its status changes, through an automation tool or your own code.
- A one-off or a nightly export: import a CSV file with the same fields.
You can combine them: a connected shop is asked first, and when it does not answer, the orders you sent are used.
Connecting a shop system
Under Settings › Integrations › Orders without a plugin,
click Connect next to your shop system and paste what it asks
for. Keys are stored encrypted and never shown again; the shop's address
must start with https://.
| Shop system | Where to make the key | Rights it needs |
|---|---|---|
| WooCommerce (REST API) | WooCommerce › Settings › Advanced › REST API › Add key | Read |
| Shopify | Settings › Apps and sales channels › Develop apps (the Shopify orders card) | read_orders, read_customers; read_all_orders for orders older than 60 days |
| Lightspeed eCom | Settings › Developers › API keys; cluster EU1 or US1 and the shop language | Read customers and orders |
| Magento 2 / Adobe Commerce | System › Integrations › Add New Integration, then activate it | Sales › Operations › Orders |
| PrestaShop | Advanced Parameters › Webservice › Add new key | GET on customers, orders, order_states, currencies |
| Shopware 6 | Settings › System › Integrations › Add integration | Read orders |
To check a connection, open a verified customer on the Customers page: their last orders appear there when the shop answers.
The order webhook
Under Settings › Integrations › Orders without a plugin, click Make a key. The card shows the webhook address, which ends in your workspace's id, and the key.
POST https://your-domain/api/v1/orders/<workspace id>
Authorization: Bearer whk_…
Content-Type: application/json
{
"order_number": "1001",
"email": "anna@example.com",
"status": "shipped",
"placed_at": "2026-11-01T10:00:00+01:00",
"total": "59.90",
"currency": "EUR",
"items": [
{ "name": "Boston Thermo", "quantity": 2, "variant": "43-46", "sku": "BT-43" }
],
"tracking_url": "https://tracking.example.com/1001",
"url": "https://www.your-shop.com/account/orders/1001",
"return_open": false
}
| Field | Required | What it is |
|---|---|---|
order_number | yes | The number the customer knows. Sending the same number again updates that order, so send it on every status change. |
email | yes | The customer's e-mail address. Only a keyed fingerprint of it is stored, never the address itself. |
status | yes | In your own words: "paid", "shipped", "verzonden". The AI employee repeats it. |
placed_at | no | A date, ISO 8601 preferred. |
total, currency | no | An amount like 59.90 or 59,90 and a three-letter code like EUR. |
items | no | A list of {name, quantity, variant, sku}, or a text like 2 x Boston Thermo; Walking. At most 50 lines. |
tracking_url, url | no | The track-and-trace link and the customer's order page. |
return_open | no | true while a return is in progress. |
Common other names are understood too, so a shop's own export usually
works as it is: number or order_id for the
number, customer_email for the address,
created_at for the date, total_price for the
total, line_items for the items.
Send up to 100 orders at once as {"orders": [ … ]}. Instead
of the Bearer key, your own code may sign the raw body:
X-AI-Assistant-Signature: sha256=<HMAC-SHA256 of the body with the key>.
Answers
200with{"created": 1, "updated": 0, "errors": []}; in a batch,errorsnames each order that was not stored by its position (index) and field.401for a wrong key, a webhook that is off, or an unknown address — the same answer for all three.403while customer memory is off for the workspace: nothing is stored.422when no order could be stored, with the reason per field.
Zapier
- Trigger: your shop's app, event New Order (add a second Zap with Updated Order if your app has it, so status changes come in too).
- Action: Webhooks by Zapier › POST.
- URL: the webhook address from the card. Payload type: JSON.
- Data:
order_number,email,statusand the other fields, each mapped to the order's value. - Headers:
Authorization=Bearer whk_…(your key). - Test the step: Zapier shows
"created": 1.
Make
- Trigger: your shop's module, Watch Orders.
- Add HTTP › Make a request: method POST, the webhook address as URL.
- Headers:
Authorization=Bearer whk_…. - Body type: Raw, content type JSON (application/json), and the order as JSON with the fields above, mapped from the trigger.
- Run once: the response body shows
"created": 1.
n8n
- Trigger: your shop's node (or a Schedule plus a node that reads new orders).
- Add an HTTP Request node: method POST, the webhook address as URL.
- Authentication: Generic Credential Type › Header Auth, name
Authorization, valueBearer whk_…. - Send Body: JSON, with the fields above mapped from the trigger.
- Execute the node: the output shows
"created": 1.
CSV import
Under Settings › Integrations › Orders without a plugin › Import
a CSV file. The first row names the columns:
order_number, email and status are
required, placed_at, total,
currency, items, tracking_url,
url and return_open are optional, and the Dutch
names bestelnummer, e-mailadres,
datum and totaal work too. Columns may be
separated by commas or semicolons (Excel's Dutch export). An order number
that is already there is updated; at most 5,000 rows per file. After the
import the card lists any row that was skipped, with its line number and
the reason.
Without any of these
When no order of the customer is available, the AI employee says plainly that it cannot see orders in the chat and points the customer to your customer service, with the contact details from your knowledge. It never guesses a status, a delivery date or a tracking link, and an order number or postcode typed in the chat never counts as proof of who someone is.
Privacy
- Orders you send are stored with a keyed fingerprint of the e-mail address, never the address itself, and never a delivery address or payment details.
- They are only read for a verified customer, and only shown to that customer.
- When a customer asks to be forgotten, their orders go too. Delete all on the card removes every order you sent; deleting the workspace removes them as well.
- A connected shop's orders are not stored at all: the AI employee keeps a copy for ten minutes while the chat is open.