Connecting a ZORT store
Getting credentials
In the ZORT portal: Settings, then Integration, then Add Integration. Choose ZORT Connect, then ZORT API, select the warehouse, and Generate. Older accounts show this as Settings, Integration, API Reference.
That gives you an apikey and an apisecret. With your storename they are the three headers every request carries.
A store can hold several keys, one per integration. That is why a change made through one key is not echoed back to a webhook registered under that same key.
storename
The reference lists storename as required but never says what it is. Vendor integration guides, like Ketshopweb and NOCNOC, ask for email plus apikey plus apisecret, so it is normally your ZORT account email.
If a connection is rejected with credentials you know are good, suspect this field first and try the store name or slug shown in the portal.
Warehouse binding
Key generation asks you to pick a warehouse, but every stock endpoint still takes warehousecode explicitly, which suggests the choice is a default rather than a boundary. Whether one key can address every warehouse is not documented. If you run several warehouses, check it on your own account, and connect one account per warehouse if a key turns out to be scoped.
Rate limits
Not published anywhere in the reference. Be conservative: page through large reads, and prefer a scheduled sweep to a tight poll. Assume a limit exists and that you have not found it yet.
Pagination
List endpoints take page, which is 1-based, and limit, capped at 500. Responses carry count, the total matching your filter, which is usually the number worth showing rather than the size of the page you fetched.
Webhooks
ZORT can POST to an endpoint you nominate, covering product, order, purchase order, return, transfer, contact, and warehouse events. Register the endpoint in the portal under Settings, Integration, API Reference, Webhook, or through the API's own webhook update call.
Two things to know. A change your own key makes is not sent back to a webhook registered under that key, so no feedback loops, but also no echo if you were counting on one. And requests carry reference keys rather than a signed payload, so treat the payload as a notification rather than as truth: take the id from it and re-fetch through the API before acting.
Amounts
Thai baht. Money arrives as strings in some places and numbers in others, and stock figures are strings too, so parse before comparing.