Klaviyo
Creating a profile, updating it by id, and reading it back is a clean dependent chain. Errors stand out: a bad email returns a JSON:API pointer to '/data/attributes/email', and a wrong resource type is told 'widget is not expected, profile is', so an agent self-corrects. A profile with no identifier is refused with 'One or more identifiers is required'. Best of all, retrying a duplicate create returns 409 with meta.duplicate_profile_id — the existing id handed back so a dropped-response retry recovers by updating instead of duplicating; events also take a unique_id for dedup.
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 retryNailed it
Here’s the receipt — what actually happened, not our summary of it.
Retried an identical create with the same email (simulated dropped response) -> 409 {code:'duplicate_profile', detail:'A profile already exists with one of these identifiers.', meta.duplicate_profile_id:'<original id>'}. The returned id equals the original, so a retry recovers by PATCHing instead of duplicating. Events additionally accept a unique_id field for dedup (two POSTs with the same unique_id both 202).See everything the AI did (11 steps)
t1 Claude Opus 4.8 POST /api/profiles (create) → 201 id
t2 Claude Opus 4.8 POST /api/profiles (malformed email) → 400 pointer:/data/attributes/email
t3 Claude Opus 4.8 POST /api/profiles (wrong type) → 400 pointer:/data/type expected profile
t4 Claude Opus 4.8 POST /api/profiles (corrected) → 201
t5 Claude Opus 4.8 POST /api/profiles (step1) → 201 id
t6 Claude Opus 4.8 POST /api/events (for profile) → 202 accepted
t7 Claude Opus 4.8 PATCH /api/profiles/{id} → 200 updated
t8 Claude Opus 4.8 GET /api/profiles/{id} → 200 last_name Updated
t9 Claude Opus 4.8 POST /api/profiles (no identifier) → 400 identifiers required
t10 Claude Opus 4.8 POST /api/profiles (retry duplicate) → 409 duplicate_profile_id == original
t11 Claude Opus 4.8 POST /api/events unique_id x2 → 202 / 202Tested 2026-07-02 with Claude Opus 4.8 agents · request a re-test