Avrix grants production access against evidence that your integration handles failure paths — not
only the happy path. Run every case in sandbox, capture requestId and the response, and keep a
one-line note of how your system behaved.
Use Environments for host and key rules, and Go-live for the cutover checklist after certification passes.
Evidence format#
For each case record:
- Case number and name
requestIdfrom the response (orX-Request-Id)- HTTP status and error
codeif any - One line describing your system's behaviour (refund issued, webhook deduped, catalog delisted, …)
A test-suite log or structured log excerpt is enough. The goal is demonstrable behaviour, not a formal document.
Required test cases#
Catalog#
| # | Case | Expected | Fixture |
|---|---|---|---|
| 1 | Cold-start sync | Full sellable catalog persisted with cursor | — |
| 2 | Incremental sync | Deltas applied, cursor advanced | — |
| 3 | Tombstone handling | Removed SKU delisted from storefront | — |
| 4 | Allocation merge | Allocation-only SKUs present in sellable set | — |
| 5 | Unsellable SKU excluded | Shared-but-unallocated SKU has no buy button | SANDBOX-NOALLOC-001 |
| 6 | Non-live product excluded | Not offered for sale | SANDBOX-LIFECYCLE-001 |
Case 4 verifies you did not build the catalog from /products alone. See
Catalog and allocations.
Orders#
| # | Case | Expected | Fixture |
|---|---|---|---|
| 7 | Happy path | Order fulfilled; key delivered and persisted | SANDBOX-ALWAYS-001 |
| 8 | Preview gating | No charge when canFulfill is false | — |
| 9 | Sold out after payment | 409; buyer refunded at your PSP | SANDBOX-NOKEYS-001 |
| 10 | Price drift | Mismatch handled; no silent repricing | — |
| 11 | Territory rejection | Handled before or at checkout | — |
| 12 | Idempotent replay | Same key + same body → original response, one fulfilment | — |
| 13 | Idempotency conflict | Same key + different body → IDEMPOTENCY_KEY_MISMATCH | — |
| 14 | Unknown outcome | Timeout → replay same key; no double charge, no double pull | — |
Case 14 is the highest-value test. Simulate by killing the connection mid-request. See Order lifecycle.
Fulfilment#
| # | Case | Expected |
|---|---|---|
| 15 | Key persistence | Key written to durable storage before responding to the buyer |
| 16 | Key non-recovery | Confirm GET /orders never returns plaintext keys |
Webhooks#
| # | Case | Expected |
|---|---|---|
| 17 | Valid signature | Accepted and processed |
| 18 | Invalid signature | Rejected — deliberately corrupt one |
| 19 | Stale timestamp | Rejected beyond 300 seconds |
| 20 | Duplicate delivery | Second delivery ignored via event id |
| 21 | Webhook before response | Handler tolerates an unrecorded order |
| 22 | Secret rotation | Both secrets accepted during overlap window |
Case 18 is the one integrations most often skip. An endpoint that accepts every signature is worse than no verification.
Refunds#
| # | Case | Expected |
|---|---|---|
| 23 | Key return | Keys quarantined using persisted keyIds from the order response |
| 24 | Refund recorded | Refund status retrievable via GET /refunds |
Operations#
| # | Case | Expected |
|---|---|---|
| 25 | Rate limit | 429 handled with Retry-After |
| 26 | Server error | 5xx retried with backoff and the same idempotency key |
| 27 | Request correlation | requestId logged on every error |
| 28 | Reconciliation | Scheduled job compares local orders against GET /orders |
Approval#
Submit your evidence package (the 28 cases above, with request ids and timestamps) to your Avrix partner contact or support@avrix.io.
After review, Avrix enables production Seller API access on your company. Until that happens,
production keys on api.avrix.io receive 403 PRODUCTION_ACCESS_NOT_APPROVED even after you
have signed the API Revenue Share Channel Terms and created a production key. Sandbox continues
to work for regression testing.
Typical review turnaround is measured in business days — ask your contact for the current SLA when
you schedule cutover. If a case fails review, fix it and resubmit only the failed rows with fresh
requestIds.