{"summary":"Whether each vendor refuses a repeated request, and where its key goes.","note":"An idempotency key only helps where the vendor honours it. Where \"enforced\" is false, retrying really can perform the action twice, whatever your code does.","vendors":[{"vendor":"stripe","placement":"Idempotency-Key header","max_length":255,"retention":"24 hours","enforced":true,"note":"Replays the original response, including errors. Scoped per API key."},{"vendor":"square","placement":"idempotency_key field in the request body","max_length":192,"retention":"24 hours on payments","enforced":true,"note":"Required rather than optional on payment endpoints."},{"vendor":"adyen","placement":"Idempotency-Key header","max_length":64,"retention":"about 1 hour","enforced":true,"note":"Short retention. Do not rely on it for slow retries."},{"vendor":"paypal","placement":"PayPal-Request-Id header","max_length":108,"retention":"about 72 hours","enforced":true,"note":"Applies to order and payment creation."},{"vendor":"sendgrid","placement":"custom_args, for your own reconciliation","max_length":100,"retention":"not deduplicated","enforced":false,"note":"SendGrid does NOT deduplicate on this. The gate stays advisory here; the key is only useful for matching sends back to effects afterwards."},{"vendor":"resend","placement":"Idempotency-Key header (Resend-Idempotency-Key over SMTP)","max_length":256,"retention":"24 hours","enforced":true,"note":"Replays the original response without sending again. Verified against Resend's idempotency documentation, 1 September 2026."},{"vendor":"shopify","placement":"idempotency key argument or directive on the mutation","max_length":255,"retention":"per endpoint; not universally documented","enforced":true,"note":"PARTIAL. Accepted on payment, subscription billing, inventory adjustment and refund operations — mandatory on some — and NOT on ordinary writes such as creating a product. Treat as enforced only for those operations."},{"vendor":"github","placement":"no idempotency mechanism; keep the key for reconciliation","max_length":255,"retention":"not deduplicated","enforced":false,"note":"The REST API documents no idempotency key. Creating an issue, a pull request or a comment twice creates two. Verified 1 September 2026."},{"vendor":"slack","placement":"no idempotency mechanism; keep the key for reconciliation","max_length":255,"retention":"not deduplicated","enforced":false,"note":"chat.postMessage documents no idempotency key. A retried post is a second message. Verified 1 September 2026."},{"vendor":"notion","placement":"no idempotency mechanism; keep the key for reconciliation","max_length":255,"retention":"not deduplicated","enforced":false,"note":"No idempotency key documented on page or block creation. Verified 1 September 2026."},{"vendor":"figma","placement":"no idempotency mechanism; keep the key for reconciliation","max_length":255,"retention":"not deduplicated","enforced":false,"note":"The REST API documents no idempotency key. Verified 1 September 2026."},{"vendor":"twilio","placement":"Idempotency-Key header, where the endpoint supports it","max_length":128,"retention":"varies by endpoint","enforced":false,"note":"Coverage is partial. Verify for the specific endpoint before relying on it."}],"detail":"https://ratchetgate.com/v1/vendors/{vendor}"}