ZERPY API v1
The ZERPY REST API connects a webshop — or any other system — to ZERPY. Read products, prices and stock, send orders in, and get notified by webhooks when stock changes, an order ships or an invoice is issued.
Typical uses:
- Webshop catalog sync — products, prices, images, translations and configurable options.
- Stock sync — show sellable stock in the shop, updated by webhook or by polling.
- Orders in — every shop order becomes a confirmed sales order in ZERPY (stock reserved, ready to ship and invoice).
- Shipment tracking back to the shop —
order.shippedwebhooks carry the carrier and tracking number. - Online payments — ask ZERPY for a Montonio payment link for an order; the payment is recorded automatically.
- Partner feeds — resellers pull your catalog with their prices into their shop (read-only keys).
Basics
| Base URL | https://zerpy.app/api/v1 |
| Format | JSON in, JSON out (GET /feed.csv returns CSV) |
| Authentication | Authorization: Bearer sk_live_… — see Authentication and errors |
| Rate limit | 120 requests per minute per key |
| Amounts | Decimal strings, e.g. "12.40" — never floats |
| Dates | ISO 8601, UTC (2026-11-07T10:00:00.000Z) |
Server-side only
An API key gives access to your company's data. Never put it in browser or mobile-app code. Call ZERPY from your shop's server (backend, server route, plugin running on the server). The API sends no CORS headers.
Quick start
- Create a key. In ZERPY, an owner or admin opens Integrations → API keys → New API key, gives it a name (e.g. "Website"), chooses the Webshop preset (all four scopes) and clicks Create key. The key (
sk_live_…) is shown once — copy it into your server configuration, e.g. an environment variableZERPY_API_KEY. - Make the first call:
bash
curl https://zerpy.app/api/v1/products?limit=2 \
-H "Authorization: Bearer $ZERPY_API_KEY"json
{
"data": [
{
"id": "37c8…", "sku": "P1", "name": "Widget", "description": null,
"translations": {}, "type": "stock", "unit": "pcs", "barcode": null,
"weight_kg": null, "category": "Gift sets", "images": [],
"price": { "net": "10.00", "vat_rate": "24", "gross": "12.40", "currency": "EUR" },
"options": [],
"stock": { "available": "6", "on_hand": "10" },
"active": true,
"updated_at": "2026-11-07T10:00:00.000Z"
}
],
"page": 1, "limit": 2, "total": 1, "has_more": false
}- Send a test order with
POST /orders(see Orders) and open it in ZERPY under Sales → Orders. - Add a webhook in Integrations → Webhooks so stock and tracking updates reach your shop (see Webhooks).
Endpoints
| Method | Path | Scope | Page |
|---|---|---|---|
GET | /products | products:read | Products |
GET | /products/{sku} | products:read | Products |
GET | /feed.csv | products:read | Products |
GET | /stock | stock:read | Stock |
POST | /orders | orders:write | Orders |
GET | /orders | orders:read | Orders |
GET | /orders/{id} | orders:read | Orders |
POST | /orders/{id}/cancel | orders:write | Orders |
POST | /orders/{id}/payment-link | orders:write | Orders |
Webhooks are configured in the ZERPY app (not through the API) — see Webhooks.
Versioning promise
The response shapes of API v1 are a contract:
- New fields may be added at any time — your code must ignore fields it does not know.
- Existing fields are never renamed or removed within v1. A breaking change would get a new version (
/api/v2). - New webhook event types may be added; only event types you subscribed to are sent (or all, if you chose All events).
Money and numbers
- Amounts are decimal strings with two decimals (
"12.40"); quantities and rates are decimal strings without trailing zeros ("2","0.5","24"). - Prices are net (without VAT) unless the field says
gross. Every price object hasnet,vat_rate,grossandcurrency. - Parse amounts with a decimal library (or as integers of cents) if you calculate with them.
Where to go next
- Authentication and errors — keys, scopes, rate limit, error codes, pagination, idempotency
- Products · Stock · Orders · Webhooks
- Partner product feed — read-only keys for your resellers
- Webshop integration — a step-by-step recipe
- Code samples — curl, Node.js, PHP, Python
- MCP connector — connecting Claude or ChatGPT to ZERPY