Skip to main content

Idempotency

Two layers:

  1. HTTP. shared-idempotency IdempotencyFilter, and communication.idempotency_keys for email sends. Clients that retry a create send the same idempotency key.
  2. Events. event_id on the envelope. Inbox handlers and notification consumers treat a repeated id as already done.

Refreshing a token is not idempotent in the "return the same body" sense: rotation invalidates the presented refresh token. Retrying a refresh with the same token is a replay and is rejected.

Guest bill invite tokens are hashed with SPLICK_BILL_INVITE_PEPPER. A retry of claim must not create a second split owner.