Developer docs contents
Sending prices
Create and update products in batches of up to 1,000, in the right order, with the wording you want.
Send prices with PUT /v1/stores/{store}/products. A product code not yet in the store is created; one that is already there is updated.
curl -X PUT https://api.eslana.com/v1/stores/STORE-014/products \
-H 'Authorization: Bearer esl_test_…' \
-H 'Content-Type: application/json' \
-d '{
"products": [
{ "barcode": "4011", "priceCents": 199, "name": "Bananas", "changedAt": "2026-10-30T09:00:00Z" },
{ "barcode": "5000112637922", "priceCents": 129, "isPromo": true, "changedAt": "2026-10-30T09:00:00Z" }
]
}'Fields
| Field | Required | Meaning |
|---|---|---|
barcode | Yes | Your product code, up to 100 characters. It is what a label is paired with, so it should match the barcode on the shelf. |
priceCents | Yes | The shelf price in whole cents of your company currency. 199 is 1.99. |
name | For new codes | Up to 200 characters. For an existing product, leave it out to keep the current name. |
description | No | Up to 1,000 characters. Shown only if your label template includes it. null clears it; leaving it out keeps it. |
isPromo | No | Draws the label on your promotion template. Leaving it out means not on promotion. |
changedAt | Recommended | When the price changed in your POS, as ISO 8601. See ordering below. |
Batch your writes
Every request costs one token from your key’s rate limit, whatever it carries. Sending 1,000 prices in one request is 1,000 times cheaper than sending them one at a time, and reaches the shelf just as fast.
A request with any invalid product is refused whole with 400, listing every problem by its position in your array. Nothing in it is queued, so you never have to work out which half landed.
Ordering with changedAt
Requests sent close together can arrive in a different order from the one they were sent in. Send changedAt with every product and an older change can never overwrite a newer one: it is reported as stale and ignored. Without it, the last request to arrive wins.
Names and descriptions
Each key has a name policy, set on the POS API page, for what a name or description sent for an existing product does:
| Policy | Effect |
|---|---|
| Replace (default) | Your POS wording replaces what is on the shelf. |
| Review | The price changes at once; the new wording waits for someone to accept it on the Products page. |
| Keep shelf names | Wording from the POS is ignored for products that already exist. |
Unchanged products cost nothing
If you resend your whole catalogue, only products whose price, promotion or wording actually changed are sent to the labels. The rest are reported as unchanged.