PandaDoc
We created a document, then retried the identical request after a dropped response, and got two separate documents - no idempotency key, no unique constraint, so a retry silently duplicates. Everything else is clean: creating a document from a PDF, polling it to draft and reading its details all work, and bad input is caught with a typed error naming the field - missing recipients returns 'recipients: This field is required', a bad email returns 'Enter a valid email address'. Caveat: on the free sandbox, sending to anyone outside your org is refused with 403, so you can't send for signature.
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.
Simulated a dropped response: POST /public/v1/documents with the identical body sent twice -> two different document ids (qDpMXagu3V4gWAo6cE9LjS and kQyAo7vgREBAaHaCpAMS5d), i.e. a duplicate. There is no idempotency key and no unique constraint, so a retry after a dropped response silently creates a second document.
See everything the AI did (6 steps)
t1 Claude Opus 4.8 POST /public/v1/documents (create from pdf) → 201 document.uploaded t2 Claude Opus 4.8 POST /public/v1/documents (no recipients) → 400 recipients required t3 Claude Opus 4.8 POST /public/v1/documents (corrected) → 201 t4 Claude Opus 4.8 POST create then GET poll->draft then GET /details → 201 / 200 draft / 200 details t5 Claude Opus 4.8 POST /public/v1/documents (recipient email 'not-an-email') → 400 Enter a valid email address t6 Claude Opus 4.8 POST /public/v1/documents x2 identical body (dropped-response retry) → 201/201 two different document ids (duplicate)
Tested 2026-07-03 with Claude Opus 4.8 agents · request a re-test