SKUU Connect: product and inventory integration
Start here to implement SKUU Connect products, inventory, authentication, testing and activation.
A simple customer guide for integrating a custom commerce platform with
SKUU Connect API v1.
This page covers the Phase-1 product and inventory integration. For exact field
rules, schemas and response examples, use the API Reference in this portal.
Overview
SKUU connects a customer's catalogue and physical stock to the SKUU retail
network.
The integration has three API connections:
| Connection | Direction | Purpose |
|---|---|---|
GET /products | SKUU → customer | Read the complete product catalogue and stock per location |
inventory.updated webhook | Customer → SKUU | Send real-time absolute stock changes |
PUT /inventory | SKUU → customer | Update availability at the customer's SKUU_Network location |
The customer remains the source of truth for physical stock. SKUU is the only
system allowed to write quantities at the virtual SKUU_Network location.
What to implement
1. Product catalogue
Expose a cursor-paginated endpoint:
GET https://api.customer.example/skuu/v1/products?limit=100
Authorization: Bearer <token>
Accept: application/jsonExample response:
{
"products": [
{
"product_id": "P-123",
"title": "Wool Coat",
"brand": "Example Brand",
"variants": [
{
"variant_id": "V-123-38",
"barcode": "8712345678901",
"sku": "WC-38",
"size": "38",
"colour": "black",
"price": 249.95,
"currency": "EUR",
"inventory": [
{
"location_id": "1",
"available_quantity": 3
},
{
"location_id": "900",
"available_quantity": 0
}
]
}
]
}
],
"next_cursor": null
}Important rules:
- Product and variant IDs must be stable and unique.
- Every variant needs a barcode, SKU, or title/size/colour matching route.
inventorymust include every agreed physical location and the
SKUU_Networklocation.- Include explicit zero quantities; do not omit an out-of-stock location.
- Quantities are absolute non-negative integers, never deltas.
- Return
next_cursorwhen another page exists. SKUU sends that value back as
the nextcursorquery parameter. - A successfully completed catalogue is authoritative. Never return a partial
catalogue as the final page.
2. Real-time inventory updates
Send one webhook for each changed (variant_id, location_id) pair:
POST {skuu_webhook_url}
Content-Type: application/json
X-SKUU-Signature: sha256=<hmac>{
"spec_version": "1",
"event": "inventory.updated",
"event_id": "evt_01JABC123",
"occurred_at": "2026-07-24T10:00:00Z",
"data": {
"variant_id": "V-123-38",
"location_id": "1",
"available_quantity": 2,
"changed_at": "2026-07-24T09:59:58Z"
}
}Important rules:
available_quantityis the new absolute quantity.- Send one event per variant and location;
datais one object, not an array. - Give every logical event a globally unique string
event_id. - A retry must reuse the same event ID, body and source timestamps.
- Sign the exact raw JSON bytes sent over the wire.
- Stop after HTTP
200. - Retry network failures and
5xxresponses with exponential backoff. - Treat
401as a configuration or signature problem; do not retry blindly. - Treat
413as permanent and fix the payload before sending a new event.
HTTP 200 acknowledges delivery; it does not by itself prove that the stock
change was applied. SKUU confirms durable acceptance during testing.
SKUU provides a complete webhook URL for each environment before testing.
Do not derive, reuse or hardcode a URL from another environment.
3. SKUU network inventory writes
Expose an endpoint where SKUU can update one variant at the virtual
SKUU_Network location:
PUT https://api.customer.example/skuu/v1/inventory
Authorization: Bearer <token>
Content-Type: application/json
X-SKUU-Signature: sha256=<hmac>{
"variant_id": "V-123-38",
"location_id": "900",
"available_quantity": 4
}A successful response echoes the accepted values:
{
"variant_id": "V-123-38",
"location_id": "900",
"available_quantity": 4,
"success": true
}The endpoint must:
- accept only the agreed
SKUU_Networklocation; - replace its current quantity with the supplied absolute value;
- return success when the same value is sent again;
- create no extra side effect for an identical repeated write; and
- show the updated network quantity in the next
GET /productsresponse.
Virtual SKUU_Network location
SKUU_Network locationCreate one virtual inventory location per environment.
- SKUU and the customer agree its numeric
location_id. - Every catalogue variant includes this location.
- Its initial quantity is
0. - SKUU exclusively owns quantity writes to it.
- Customer physical stock always has priority.
- Network availability is used only when the customer's own sellable stock is
zero according to the agreed physical-location topology.
Authentication
| Request | Authentication |
|---|---|
SKUU → customer GET /products | Bearer token |
SKUU → customer PUT /inventory | Bearer token and HMAC signature |
| Customer → SKUU webhook | HMAC signature |
Body-bearing requests use:
X-SKUU-Signature: sha256=<lowercase hex HMAC-SHA256>Calculate the digest over the exact raw UTF-8 request body:
HMAC-SHA256(shared_secret, exact_raw_request_body_bytes)Use a constant-time comparison when verifying signatures. Bearer tokens and
HMAC secrets are different for testing and production and are exchanged only
through an approved secret channel.
Technical requirements
- HTTPS with TLS 1.2 or newer
- UTF-8 JSON request and response bodies
Content-Type: application/json- RFC 3339 timestamps with an explicit timezone
- Stable opaque product, variant and event IDs
- Canonical numeric location IDs transmitted as strings
- Absolute non-negative integer stock quantities
- Separate testing and production URLs and credentials
- A stable catalogue snapshot during one pagination traversal
SKUU normally performs a full catalogue reconciliation every 12 hours; the
final cadence is agreed per customer.
Rate limits and retries
Tell SKUU about request limits, maintenance windows or IP allow-list
requirements before testing.
- For SKUU → customer catalogue and inventory requests, SKUU retries network
failures,429and5xxresponses and honours a numericRetry-After
header. Other4xxresponses are permanent. - For customer → SKUU webhooks, retry network failures and
5xxresponses
using the same event. Stop on200,401and413.
Security best practices
- Give SKUU a token scoped only to the required catalogue and network-inventory
operations. - Store tokens and HMAC secrets in a secret manager or protected environment
configuration. - Never put credentials in source control, ordinary chat or documentation.
- Verify HMAC before parsing JSON or performing a side effect.
- Keep testing and production credentials fully separate.
- Rotate credentials through a coordinated cutover with both teams.
What SKUU needs from you
- Testing API root and bearer token
- One shared HMAC secret per environment, generated and exchanged through the
agreed secure channel - Production API root and credentials later, before production activation
- The complete physical-location ID list
- The assigned
SKUU_Networklocation ID - Currency and catalogue pagination limits
- IP allow-list or rate-limit requirements
- A technical contact for testing and incident coordination
Environments, testing and activation
Phase 1 is activated in controlled steps:
- Confirm URLs, locations and credentials for testing.
- Fetch and validate every catalogue page in read-only mode.
- Import the accepted catalogue into SKUU's testing environment.
- Send one signed
inventory.updatedevent and one identical replay. - Verify that the first event is accepted and the replay is deduplicated.
- Test a reversible
SKUU_Networkwrite:0 → 1 → identical 1 → 0. - Read the catalogue after every write and confirm physical stock is unchanged.
- Exchange bilateral Phase-1 sign-off.
Production remains disabled until testing has passed and both teams explicitly
approve the production activation window.
Full reference
Use the API Reference in this portal for the machine-readable contract,
endpoint schemas and response examples.
Questions or platform-specific constraints can be discussed with your SKUU
integration contact before implementation.
Next: orders and fulfilment
After Phase 1 is signed off, continue with the
Phase 2 orders and fulfilment guide. The
customer may implement the contract immediately; traffic remains
activation-gated until bilateral testing is complete.
Next: returns
After completing the Phase 2 implementation, continue with the
Phase 3 returns guide. It is an
implementation-ready preview; return traffic remains disabled until both
teams pass a coordinated TESTING conformance window.
Updated about 7 hours ago
