Resend
We dropped the response after a send and retried. With no idempotency key, all three retries went out as separate emails. Add the Idempotency-Key header and the duplicates collapse into one - but nothing requires it, so an agent that just retries triple-sends. Everything else is clean: one call sends an email, a missing 'to' is a named error, a multi-step audience/contact flow chains cleanly, and the free-tier send limit returns a clear 403 with the fix.
Cross-validated onClaude Opus 4.8
The five tasks
Getting started from the docs aloneNailed it
Fixing its own mistake after an errorNailed it
Following a multi-step flowNailed it
Handling an unclear edge caseNailed it
Not double-charging on a retryHalf-nailed it
Here’s the receipt — what actually happened, not our summary of it.
Simulated a dropped-response retry. With no idempotency key, 3 retries -> 3 separate sends (id 11212c14 / a217fdf9 / 060fd5f1). With a client-supplied Idempotency-Key header, 2 sends -> the same id 427e6db2 (deduped). The mechanism exists but is off by default, so a naive retry triple-sends.
See everything the AI did (6 steps)
t0 Claude Opus 4.8 POST /emails (cold-start) → 200 id 61e5b604
t1 Claude Opus 4.8 POST /emails (missing to) -> corrected → 422 missing_required_field -> 200
t2 Claude Opus 4.8 POST /audiences -> POST /audiences/{id}/contacts -> GET contact → chain ok (audience 982b1977, contact a6d2071c)
t3 Claude Opus 4.8 POST /emails (to non-account address) → 403 validation_error
t4 Claude Opus 4.8 POST /emails x3 (no idempotency key) → 200 x3, three different ids
t5 Claude Opus 4.8 POST /emails x2 (same Idempotency-Key) → 200 x2, same id 427e6db2 (deduped)Tested 2026-06-27 with Claude Opus 4.8 agents · request a re-test