Skip to main content

Test lifecycle boundaries before Production

Use a dedicated Sandbox project, synthetic order references and inboxes you control. Never use real customer contact data in a recipe. Keep IDs and the exact request payload from each step so an uncertain response can be retried safely.

ScenarioProcedureExpected evidence
First authenticationQuickstart fixture with delivery:read200, stable fixture result and request ID
Address acceptedCreate a future-expiring confirmation; open its recipient URL and submit the proposed locationConfirmed immutable snapshot
Address correctedCreate another request; choose another valid location through the recipient flowCorrected snapshot; original proposal retained
CancellationCancel a fresh pending request through the address-confirmation APICancelled; old recipient capability cannot complete
ExpiryCreate a short-lived request, wait past expiresAt, then open its linkExpired/unavailable; no completed snapshot
Transit/depot/out for deliverySubmit the documented delivery commandsOrdered canonical event history
Failed attempt and RTSSubmit a failed-delivery resolution with RecipientUnavailable and attemptCount: 3One RTS return; duplicate evidence does not create another
Delivered with proofConfigure Signature/Photo, submit matching proof first, then CompleteDelivery with its proofIdDelivered; omitted/wrong proof rejected
Recipient returnLink a Delivered shipment with verified test contact; request pickup or drop-offReturn request enters its documented approval flow
Canonical customer returnCreate and approve a synthetic customer returnRequested then Approved; original outbound history unchanged
Pickup and receipt proofUpload separate synthetic signature PNGs for pickup and receiptEach event accepts only its corresponding proof
Wrong scopeIssue read-only key; attempt an event403; no mutation
Wrong environmentRead Sandbox resource with a separate environment keyResource inaccessible
Duplicate eventReplay exact stored event UUID and payloadNo second canonical event
Out-of-order eventComplete before required handover409; inspect/correct state rather than changing UUID
Webhook retryReceiver returns 503 before durable commit, then recoversRetry accepted once
Webhook duplicate/replayReplay an accepted synthetic deliverySame event ID; no duplicate business action
Pickup capability rotationIssue a second uncompleted pickup link and try the old oneOld capability rejected
Return write pauseWhen returns_paused is returned, retry later with the same IDsWrite succeeds after service resumes; reads remain available

The read-only fixture endpoint also accepts fault=error-403, error-404, error-409, error-429 and error-500 to exercise status handling. These faults simulate responses; they do not prove real lifecycle transitions or change data.