Per-venue activation
Activation happens on both sides and only takes effect when both are done.Directional. Field names, enum values, headers and JSON structures on this page
show which information is exchanged, not the final names. None of them has been
aligned with OnlinePOS yet. REKOM will adopt whatever OnlinePOS has by default for
its webhooks (header names, signature format), and does not require any of these specific names.
Request signing
Proposed — for OnlinePOS confirmation. Bearer tokens are the fallback if OnlinePOS’s HTTP client cannot sign requests.
The digest is computed as:
- Parse
tandv1. Reject with401 invalid_signatureif either is missing. - Reject with
401 stale_timestampiftdiffers from the server clock by more than 300 seconds. - Recompute
v1over the exact bytes received, with every active secret (see Secrets below), and compare in constant time. Reject with401 invalid_signatureon mismatch.
whsec_test, timestamp 1791456000, body {"calculationId":"…"}):
calculationId in the body are sufficient, since OnlinePOS initiated the request.
Secrets
- One secret per environment (staging, production), generated by REKOM and handed over out of band (password manager share, never e-mail).
- No scheduled rotation is planned. Instead REKOM asks for access to update the secret itself in OnlinePOS’s webhook configuration (the self-service registration from V1 §10), so a compromised or expiring secret can be swapped without a ticket.
- When a secret is swapped, REKOM keeps both the old and the new secret active with an overlap until OnlinePOS’s side is confirmed on the new one, so there is no interruption. Signatures are verified against every active secret.
- Secrets are at least 32 random bytes, presented base64 or hex.
Transport
- TLS 1.2 or newer; HTTPS only; HSTS on the REKOM hosts.
- Certificates from a public CA; no pinning required.
- The REKOM backend publishes a stable set of egress IPs for its REST sync calls if OnlinePOS wants to allowlist them, and asks OnlinePOS for the same if REKOM is to allowlist inbound traffic (open point).
Environments and hosts
Both hosts are TBC until DNS is live. They will be confirmed in the API reference.
- Separate secrets per environment.
- A venue mapped to one environment that calls the other host is answered
422 venue_not_configured; the POS treats it asfailed. - The staging host returns the same latency characteristics as production, so timing can be measured there.
Limits
Proposed — for OnlinePOS confirmation.
Timestamps and clocks
- All timestamps in payloads are RFC 3339 / ISO 8601 with UTC offset, e.g.
2026-10-08T21:14:03+02:00or2026-10-08T19:14:03Z. - Signature timestamps (
t) are Unix seconds, UTC. - Terminals and POS hosts must be NTP-synchronised; a skew beyond 300 s makes
signatures fail. Open — OnlinePOS: confirm NTP on Windows POS hosts and the
timezone semantics of the REST API’s
datetimefields used in the sync.
Logging and support
- Both sides log
X-Request-Id,calculationId, venue, status and timings for every call, retained for at least 90 days. - The REKOM backend returns
X-Request-Id(echoed) andServer-Timingon every response. - Support path: OnlinePOS raises issues with the GUID; REKOM answers with the stored request/response pair. Nexi has offered a shared Slack channel once work starts (open point).
- No card data, PAN or token ever reaches the REKOM backend; the only identifier is the loyalty ID.