Abuse Checks
Every end-user route your application calls is rate-limited per identity and answers 429 with a Retry-After header. Sign-in realms are provisioned with brute-force protection, workspace invitations have a budget, and every write that matters carries an idempotency key. Risk scores and allow, challenge or block policies are planned.
Available in part — Abuse Checks: Today Abuse Checks is a set of always-on protections rather than a scoring product: rate limits on end-user and billing routes, brute-force protection on sign-in realms, an invitation budget per workspace and idempotent writes. Items listed as planned below cannot be enabled yet. What Paycux provides today.
Status
How it works
Every end-user call is charged to a token bucket for the calling identity. A client in a loop drains the bucket and is refused until it refills; a client calling at a normal pace never notices.
If the deployment declares which proxies to trust, the client address gets its own bucket. If not, Paycux refuses to guess, because a wrong guess would rate-limit every tenant behind one proxy.
A refused request answers 429 RATE_LIMITED with a Retry-After header and writes nothing. Retry after the interval with the same Idempotency-Key and the request is simply processed.
Damping, not quotas
Abuse damping and plan quotas are different things, and Paycux keeps them apart. A 429 means a client is calling too fast. A usage decision with LIMIT_EXCEEDED means the billing account has used its entitlement. The second is the one your product logic should act on.
Safe retries
Networks fail between your request and the response. Because usage events, checkouts and plan changes require an Idempotency-Key, retrying with the same key returns the original result instead of a second event, a second checkout or a second plan swap.
On today
Each of these is part of the API as deployed. There is nothing to enable and nothing to pay for separately.
On the wire
The same usage event sent twice, a refusal with its Retry-After header, and an invitation that counts against the workspace budget.
1curl -X POST https://api.paycux.com/v1/usage/events \2 -H "Authorization: Bearer <realm access token>" \3 -H "Idempotency-Key: report-export-<order id>-0001" \4 -H "Content-Type: application/json" \5 -d '{6 "projectId": "<project id>",7 "environmentId": "<environment id>",8 "realmId": "<realm id>",9 "billingAccountId": "<billing account id>",10 "meterKey": "report_exports",11 "quantity": 1,12 "occurredAt": "2026-10-13T09:00:00Z"13 }'1415# 200 OK16{17 "allowed": true,18 "reason": "WITHIN_LIMIT",19 "consumed": 12,20 "limit": 100,21 "eventId": "<event id>",22 "duplicate": false23}
Transparent pricing
In part No separate price for what works today.Workspace plans
Included in every workspace plan. Limits (projects, provider connections, members, usage events) are listed on the pricing page.
Questions
No. A 429 RATE_LIMITED means a client is calling faster than the damping allows and nothing was written. A plan limit answers 402 PLAN_LIMIT_EXCEEDED on creates, and a usage quota comes back inside a usage decision as LIMIT_EXCEEDED. Only the last two are about what the account is entitled to.
Behind a proxy every request arrives from the proxy's address. Counting that address would let one tenant's flood lock out every other tenant, so per-source damping is switched on only when the deployment declares its proxy topology with PAYCUX_TRUSTED_PROXIES. Per-identity damping is always on.
Not per workspace today. The buckets are set to stop runaway clients rather than to meter normal traffic, and a deployment can scale all of them with PAYCUX_RATE_LIMIT_MULTIPLIER. If your application hits them in normal operation, that is worth a conversation.
No. The realm temporarily refuses further attempts after repeated failures and accepts a correct password once the wait has passed. It is a slow-down, not a permanent lockout, and it applies to the hosted sign-in of every environment.
They are planned and there is no committed date. Until they exist, this page will keep describing only the protections that are on.
Keep exploring
Create a workspace, connect your provider and send your first usage event. The damping described here is already in front of it.