Integrator acceptance checklist — R1–R9

The acceptance bar for any integration that touches Dynamo settlement. Every item is testable, and most are enforced by machinery you can run yourself. Full-depth integration happens on testnet + PSP sandbox before real money exists anywhere — real-money rails are gated behind the external audit, so audit-clear day is switch-flip day, not integration-start day.

#RequirementWhere it bitesVerify with
R1Idempotent event handling — dedupe on the stable event id (x-dynamo-event-id)Your webhook consumermake demo-webhook-dupes
R2Credit on settlement.final onlycheckpointed is pending, never a credit signalConsumer + polling logicWebhooks · Merchant API
R3Duplicate/reorder tolerance — delivery is at-least-once; treat settlement amounts as cumulative monotone valuesYour webhook consumermake demo-webhook-dupes
R4Conformance-tested x402 surface — the full catalog including merchant protection, with the pinned report artifactAny 402-speaking endpoint you exposemake conformance
R5Use the serviceNode verification surface — verify allowances aimed at you; never trust a caller's self-reportYour serviceMerchant API
R6Self-contained onboarding per funding mode — Control needs nothing; escrow needs a wallet; card needs one Stripe TEST/platform onboardingYour ops runbookQuickstarts
R7Asset-denominated amounts — settled amounts are micro units of the funding asset; units price work, not moneyYour ledger mappingMerchant API
R8Versioned-interface discipline — pin schema versions; additive changes arrive as minor bumps with CHANGELOG entries; breaking changes carry deprecation notesYour parsersPackage CHANGELOGs
R9Sandbox/testnet parity — code written against Stripe TEST / anvil runs unchanged against production rails; only keys and endpoints changeYour deployment configTestnet · Card sandbox

The shape of a passing integration

  1. Verify offline, serve, meter async. Allowance credentials verify

in-process against pinned signers; the request path never blocks on a network call; failed verification is a 402, not a fallback.

  1. Never bill failed work. A failed call, failed delivery, or SLA-failed

unit costs the buyer nothing — use free pre-checks (headroom, estimateUnits) and two-phase metering (reserve/confirm/cancel) where delivery can fail.

  1. Reconcile to the unit. Every session ends with the engine's billed

total equal to the settlement layer's record. If your integration cannot produce that line, it is not done.

  1. Keep evidence. The evidence export gives you an

offline-verifiable bundle per session — the artifact you want already assembled when a counterparty dispute or card-network inquiry arrives.