Swoop Developers

Quality & Performance Standards

Production access is gated on a validated integration: the conformance tables below must pass against your implementation, on a test binding, before your live location is provisioned. This is the same bar Swoop's own connectors are held to — the tables run in Swoop's CI on every commit.

Production requirements

Standard Requirement
Order injection Every orders.notification you receive must resolve to an accept or deny — silence past the location's SLA (ackTimeoutSeconds, typically 690 s) escalates to Swoop staff and counts against your integration.
Webhook acknowledgment Acknowledge every webhook with a 2xx within 5 seconds; do the work after. Signature verification (X-Swoop-Signature) is mandatory — unsigned processing fails certification.
Duplicate safety Webhooks are at-least-once and unordered. Duplicate events (same event_id) and replayed status POSTs must cause no visible double-processing.
Recovery Poll created-orders (and created-deliveries for operators) as your recovery path. A webhook-only integration with no poll fallback does not pass.
Menu mapping Push your menu snapshot before go-live — unmapped items dead-letter orders.
Status fidelity Lifecycle pushes must reflect reality (an order marked ready must be ready). The platform's rank guard tolerates replays, not fiction.

The conformance tables

Certification is code, not a checklist: the same black-box tables Swoop runs in CI are runnable against your implementation over plain HTTP — auth semantics (401 / foreign-404), resource shapes, accept/deny, idempotent replays, the full status walks for both the Order and Delivery suites, and correct 400s for bad enums.

PARTNER_CERT_BASE_URL=<your adapter host> \
PARTNER_CERT_TOKEN=<your bearer> \
PARTNER_CERT_ORDER_ID=<a created test order> \
go test ./api/partner/ -run TestCertifyDeployed -v

Delivery-operator standards

Two non-negotiables beyond the shared bar:

Go-live

Certification runs against a test binding (test: true): the full pipeline executes, but nothing you do reaches a member. Once the tables pass, go-live is one provisioning call flipping your real location — see Getting Started and the API Changelog for what's changed recently.