Bring your own key and storage
PR review is free, and the limits on it exist for one reason: inference is the marginal cost of a review, and those limits bound our spend on your behalf.
Connect your own model provider and there is nothing left for a limit to protect. Reviews stop being capped and always run at full depth. Connect your own storage as well and the durable copy of your review history lives in a bucket you own.
Both are free: in both cases the resource is yours.
Bring your own model connection
Section titled “Bring your own model connection”The connection is provider-neutral. Choose the API format the host accepts (OpenAI or Anthropic), then use that format’s official endpoint or enter a custom endpoint. Custom endpoints cover hosted providers, gateways and reachable local inference servers.
- Go to Settings → Usage.
- Under Bring your own, choose the API format and official/custom endpoint.
- Enter the model ID and, when the endpoint requires one, its API key. Leave the key blank for a keyless local endpoint.
- Save. BattleTest runs a real one-token model request in the selected format before accepting it.
BattleTest resolves known model prices from its bundled aggregate snapshot. If the model is not present, enter input, cached-input and output prices per million tokens. For local inference those overrides can all be 0.
What changes
Section titled “What changes”Every review runs at advanced depth, with no hourly or monthly cap. The public-repo hourly limit and the private-repo monthly allowance both stop applying: reviews are what cost us, and on your own key they cost us nothing.
Bring-your-own infrastructure is configured separately from your plan.
If the key stops working
Section titled “If the key stops working”If your configured provider rejects a request, the review fails and displays the error. It does not fall back to BattleTest credentials.
The last verification result is shown in Settings, including the reason for the most recent failure.
How the key is stored
Section titled “How the key is stored”Non-empty keys are encrypted at rest, decrypted per use, and never returned to a browser; the settings page shows only the last four characters. If the instance has no encryption key configured, saving a credential fails rather than writing it in cleartext. A deliberately blank key stores no secret.
Remove it at any time from the same screen. Removing it puts the organisation back on our inference and back within the free limits.
Bring your own storage
Section titled “Bring your own storage”Storage is the companion setting. It changes who holds the data rather than who pays for the compute.
- Go to Settings → Usage.
- Under Bring your own, enter your S3-compatible endpoint, region, bucket, access key ID and secret access key.
- Save. BattleTest verifies the credentials before accepting them.
Works with any S3-compatible storage: AWS S3, Cloudflare R2, MinIO, Ceph.
What changes
Section titled “What changes”When a review finishes, its record is written to your bucket and our copy is deleted. The durable form of your review history then exists only in storage you control.
After the BattleTest copy expires, report requests read from your bucket using the configured credentials.
Why verification writes, reads and deletes
Section titled “Why verification writes, reads and deletes”The check performs all three operations rather than only asking whether the bucket exists.
BattleTest performs all three in normal use: write at the end of a run, read when someone opens a report, delete to clean up and to let your own lifecycle rules work. A read-only key passes a bucket-exists check and then fails at the end of your first review, after the work is done and with the local copy already queued for deletion. So the check runs the real operations.
The probe object it writes is deleted as part of the check.
Using both together
Section titled “Using both together”They are independent and can be used separately, but together they are the configuration described in our pricing: reviews are unlimited because you pay your provider directly, and finished reports are stored in your bucket rather than ours.
BattleTest retains review counts and organisation metadata. See Security & Data Handling for retention details.
The same settings are available over the API:
| Method | Path | Purpose |
|---|---|---|
GET |
/api/v1/settings/byo?orgId= |
Current key and storage status for an organisation |
POST |
/api/v1/settings/byo/model-key |
Save or replace model credentials |
DELETE |
/api/v1/settings/byo/model-key?orgId= |
Remove model credentials |
POST |
/api/v1/settings/byo/storage |
Save or replace storage credentials |
DELETE |
/api/v1/settings/byo/storage?orgId= |
Remove storage credentials |
Saving through either route runs the same verification as the settings screen.
Related
Section titled “Related”- Limits and quotas: what the limits are when you are on our inference
- Fair-use compute limit: what happens as an organisation approaches it
- Security & Data Handling: what is accessed and retained