Novu
Novu's idempotency docs promise that a trigger sent with an Idempotency-Key means only the first is processed and a retry is served from cache and counts as one billed run. We sent the same trigger twice with the same key (a v4 UUID), 3s apart - and got two different transaction ids, both processed, both billed. The documented safeguard against a duplicate notification doesn't take effect on the trigger endpoint. Everything else is clean: subscriber, topic, add-and-read all work first try, a missing subscriberId is named in the error, and an unknown workflow returns 'workflow_not_found'.
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.
Novu docs state Idempotency-Key makes a trigger idempotent ('only the first is processed... subsequent receive the cached response... counts as one workflow run toward billing'). Sent POST /v1/events/trigger twice with the SAME Idempotency-Key (v4 UUID) and identical body, 3s apart (header confirmed sent) -> two different transactionIds (txn_6a479a7all5h1vdkzms3 and txn_6a479a7dqn238fc0nlnq), both status:processed. The documented idempotency does not take effect on the trigger endpoint - a dropped-response retry duplicates the notification and the billing. (subscriberId is separately a natural unique key, so subscriber creation itself does dedupe.)See everything the AI did (6 steps)
t1 Claude Opus 4.8 POST /v1/subscribers (create, subscriberId) → 201 subscriber t2 Claude Opus 4.8 POST /v1/subscribers (missing subscriberId) → 422 subscriberId should not be null t3 Claude Opus 4.8 POST /v1/subscribers (corrected) → 201 t4 Claude Opus 4.8 POST /v1/subscribers then /v1/topics then add-subscriber then GET topic → 201 / 201 / 200 / 200 chained t5 Claude Opus 4.8 POST /v1/events/trigger (unknown workflow) → 422 workflow_not_found t6 Claude Opus 4.8 POST /v1/events/trigger x2 same Idempotency-Key UUID, 3s apart → 201/201 two different transactionIds (duplicate)
Tested 2026-07-03 with Claude Opus 4.8 agents · request a re-test