Apply for access
- Sign in and open Profile.
- Find Reseller program.
- Describe your service in 10 to 2,000 characters. Do not include personal data.
- Enter your expected customer count, from 1 to 1,000,000.
- Accept the customer ID contract and submit your application.
Submitting an application does not enable reseller access. Only approval does. If the Customers link has not appeared after approval, refresh your account or sign in again. You can also open Customers directly.
Identify each customer
Send exactly oneX-Floodgate-Customer-Id header with a stable reference for the end customer making the request.
Floodgate stores the customer reference you send. Keep the mapping between that reference and your customer in your own service. Do not use a conversation ID as a replacement for a stable customer ID.
For approved resellers, the header is required by default on these endpoints:
This requirement depends on the endpoint, not the model or routing group. Floodgate administrators can change the required endpoint list.
An empty, invalid, or duplicate header is rejected on every model API endpoint for an approved reseller, including endpoints where the header is optional. If your account is not approved, the header has no effect.
Dashboard Playground requests are exempt. On Playground and optional endpoints without a customer ID, provider refusals use account-level enforcement. Leaving out the ID does not bypass account safeguards.
Send a request
Use your model API key, not your Personal Access Token. This example identifiescustomer_42 in a Responses request:
Customer restrictions and account cooldowns
The rules below are the defaults introduced with the program. Administrators can change thresholds and durations. Use the actual expiry in an API error or the Customers page when deciding when to retry. Restrictions apply to Standard Claude/GPT across all of your API keys. They run before safety screening and model dispatch. Other models and routing groups remain subject to their own availability and policies.Safety screening blocks
Floodgate can check a request before sending it to the model. A screening block counts against the identified customer. It does not start an account cooldown or count toward the shared safety pause.
The screening ladder only receives blocks when screening is enabled and the request is in its configured scope. A screening service failure is separate from a policy block.
Model safety refusals
A model safety refusal happens after a request reaches a model route. Qualifying refusals on protected Claude/GPT routes count toward customer restrictions, account cooldowns, and the shared safety pause.
Account counts combine all of your customers and keys. Changing customer IDs, API keys, or conversations does not reset them. When an approved reseller has no customer ID on an exempt request, a qualifying refusal starts an account cooldown directly. That cooldown also counts toward repeated account cooldowns.
Refusals for other model families do not enter these Claude/GPT counters. Those requests still follow their own safety policies.
Repeated restrictions
A customer’s third separate level 3 restriction within seven days becomes a seven-day restriction, level 4. Level 3 restrictions from either screening blocks or model refusals count toward this rule. An active restriction of the same or a higher level is not stacked or extended by another event. A higher-level restriction can still replace the effective limit with a longer restriction. An active account cooldown is not restarted by duplicate refusals. Expiration ends that timed restriction. It does not make a paused route available, clear another active restriction, or erase recent events from rolling counts. If five distinct customers on your account receive restrictions within 24 hours, Floodgate alerts administrators to review possible ID rotation. The alert is limited to once per reseller per 24 hours. It is a review signal, not proof that you changed IDs.Shared Standard safety pause
Floodgate also has a shared safety pause for Standard Claude/GPT. By default, three qualifying model refusals within a rolling hour across all users trigger it. This includes accounts outside the reseller program. The pause affects Standard Claude/GPT for everyone. It has no automatic end time and noRetry-After date. Only a root administrator can resume access. Waiting for your own customer restriction or account cooldown to expire does not lift the shared pause.
You can use another available routing group that permits your request. Other Standard model families remain available under their usual rules. After administrators resume Standard Claude/GPT, earlier refusal events do not immediately trigger the newly reset pause.
Check your customers
Open Customers to see:- Your account cooldown status, remaining time, and end time.
- Your recent qualifying refusal count and account threshold.
- The number of customers with active restrictions.
- Restrictions with the customer ID, reason, level, expiry, and status.
- Recent violations with their time, customer ID, reason, model, and request ID.
Notifications
Customer restriction notices use your configured notification channel, such as email, webhook, Bark, or Gotify. A notice includes the customer ID, reason, level, and expiry. Webhook integrations can receive thecustomer_restriction event. Notification limits apply per reseller and customer, so one customer’s notices do not suppress another customer’s notices. Repeated notices for the same customer can be limited.
Administrators can disable these notifications. Delivery is best effort, so use the Customers page or API as your source of current status.
Conversation reuse and privacy
Keep Responses conversations attached to the same customer. If another customer on your account sends aprevious_response_id belonging to the first customer, Floodgate can flag an informational link for administrator review. This also applies when continuing through Responses compaction.
This signal does not block a request, restrict a customer, or prove evasion. It is independent of the chat ID header.
Detection covers native Responses routes that return the original response ID to your client. It does not cover Chat Completions, Messages, or conversions that create replacement IDs or hide the original ID.
For this detection, Floodgate stores a keyed hash of the response ID, not the plaintext ID or conversation messages. Response ownership expires after 30 days by default. Administrators can set retention from 1 to 90 days or disable tracking. Detection is best effort and can miss events. Expired ownership is ignored; physical deletion can happen later. Customer links and restriction histories are retained separately.
Handle errors
Read the HTTP status, error code, and message. For timed restrictions, honorRetry-After, which gives the remaining wait in seconds. The customer restriction message includes the customer, reason, level, and expiry.
The request that triggers a refusal can report the refusal itself. Later requests can report the resulting restriction or pause. If a refusal arrives after streaming has started, the HTTP status already sent cannot change to a later 403. Floodgate can still record the event and restrict future requests.
Accounts outside the reseller program retain ordinary account enforcement. One qualifying model refusal starts a one-hour Standard Claude/GPT cooldown. Adding a customer header without approval does not change that behavior.
Moving from the old reseller program
The previous reseller keys andreseller_* account groups are retired. The release removes legacy reseller API keys and moves those accounts to the default account group. Those keys cannot be reused.
Create and configure ordinary API keys, then apply through Profile for the current customer identification program. Approval does not restore the old reseller wallet, membership, or pricing program.