Pipedrive
Creating a contact, tying it to an organization, opening a deal for it, and reading the deal back is a clean dependent chain, and a missing name is caught with a plain 'Name must be given'. Two gaps show up under stress. First, retrying a create after a dropped response makes a second identical contact - there is no idempotency key, so a hiccup quietly doubles your records. Second, a clearly broken email like 'not-an-email' is stored as-is with no validation, so garbage data lands in the CRM without complaint. Both mean an agent needs to guard its own retries and inputs.
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 retryChoked
Here’s the receipt — what actually happened, not our summary of it.
Re-creating a person with the same name (simulated dropped response) returned two different ids (7 vs 8), i.e. two duplicate contacts. There is no idempotency key, so a dropped-response retry duplicates the CRM record.
See everything the AI did (9 steps)
t1 Claude Opus 4.8 POST /persons (create) → 201 id 3 t2 Claude Opus 4.8 POST /persons (missing name) → 400 Name must be given t3 Claude Opus 4.8 POST /persons (corrected) → 201 t4 Claude Opus 4.8 POST /persons (invalid email) → 201 stored unvalidated t5 Claude Opus 4.8 POST /organizations → 201 org_id 3 t6 Claude Opus 4.8 POST /persons (org_id=3) → 201 person_id 6 t7 Claude Opus 4.8 POST /deals (person+org) → 201 deal_id 2 t8 Claude Opus 4.8 GET /deals/2 → 200 person_id 6 org_id 3 t9 Claude Opus 4.8 POST /persons same name x2 → 201/201 ids 7,8 duplicate
Tested 2026-07-03 with Claude Opus 4.8 agents · request a re-test