Best practices
The handful of habits that separate an integration that ages well from one that pages somebody.
- Keep the key on a server. A browser, a handheld scanner and a mobile app all call *your* service; your service calls Nomi. Keys, secrets and tokens stay in the server environment and never reach a page.
- Send only what a credential needs.
attributesaccepts anything; a whole personnel or customer record does not belong in one. See Recipients. - Send an
Idempotency-Keyon every write, derived from something stable on your side — an order number, a student id and a term, a payroll run. - Pace a long run. One queue with backoff, not many connections racing each other.
- Be told rather than poll. Subscribe to
credential.*instead of asking for a credential every thirty seconds. - Verify webhooks before acting, and make the handler idempotent.
- Suspend before you revoke when the relationship might resume. Revocation is permanent.
- Preview a policy before applying it.
POST /v1/policies/{id}/previewanswers who it would affect. - Watch
credential.channel.failed. A credential that is valid and a pass that never rendered look identical from a dashboard that only reads the credential. - Deactivate, do not delete. The history of what somebody held has to keep naming them.