LLM-driven pentests are billed against the AI provider key you configure in the dashboard (LLM providers). The provider sends you the bill directly — TigerGate doesn’t mark up tokens. What TigerGate does is enforce caps so a runaway agent loop can’t drain your monthly quota in one bad scan.

Cap types

CapScopeDefaultHard / soft
Per-scan budgetOne scan$25Hard — scan stops at cap
Monthly org budgetAll scans this calendar monthunlimitedHard — new scans are queued, not started, until the cap resets
Monthly target budget (optional)All scans against one targetunlimitedHard
Provider rate limitsPer provider quota (TPM/RPM)provider-setSoft — the agent retries with backoff
Configure under Pentest → Settings → Budgets.

What happens when a cap fires

  1. In-flight LLM calls finish — we don’t kill mid-call, that wastes the partial spend.
  2. The agent receives a “budget exhausted” signal — it stops scheduling new tool calls.
  3. The scan is marked budget_exhausted in the dashboard, with the actual cost so far recorded.
  4. Findings already produced are kept. A budget_exhausted scan still ships its real findings; it just couldn’t do everything it wanted.
  5. Notifications fire if you’ve configured them — Slack/email gets a “scan ran out of budget” event.
The dashboard’s Pentest → Scans → <scan> page shows the exact LLM call where the cap was hit, so you can debug whether the cap was right or whether something pathological happened (e.g. an infinite-loop tool-call pattern).

Spend audit trail

Every LLM call is recorded with:
FieldWhat it is
timestampWall-clock when the call started
scan_idWhich scan made it
agentWhich sandbox agent (web/api/codebase/auth)
providerOpenAI / Anthropic / Gemini / Azure / self-hosted
modelThe exact model name
prompt_tokens / completion_tokensPer-call token counts
cost_usdComputed from the per-million-tokens price for the model
cache_hitWhether prompt-caching saved input tokens (Anthropic + OpenAI both expose this)
Browse under Pentest → Spend → Audit log. Filter by scan_id, target, agent, time range. Export as CSV.

Per-scan cap

Set on the scan config, not on the target — the same target may have a “quick” config ($5) and a “full” config ($50).
Pentest → Scan Configs → <name> → Edit → Per-scan budget (USD)
Override at scan-creation time too — when you click Start scan, the dialog lets you raise/lower the cap for just that run. Reasonable defaults by scope:
ScopeDefault cap
auth$5
api$15
auth+api$25
full$75
These assume gpt-4o for tool-use and gpt-4o-mini for cheap calls. If you’re on Anthropic or running a local model, the real cost per scope will differ — adjust the cap accordingly.

Monthly org cap

Pentest → Settings → Budgets → Monthly org budget (USD)
When the cap is reached:
  • In-flight scans finish (with their per-scan budget still applied).
  • New scans are queued in pending_budget state — visible in the dashboard, not started.
  • The cap resets at midnight UTC on the 1st of the next month, at which point queued scans start FIFO until the new cap is re-hit.
You can manually flush the queue (force-cancel all queued) under Pentest → Settings → Budgets → Flush queued.

Per-target cap

For a high-touch target you want to keep cheap:
Pentest → Targets → <name> → Edit → Monthly target budget (USD)
Useful for production reachable targets where you’ve scheduled a frequent recurring scan but want a hard ceiling so it can never run away.

Cost-control tips

  1. Use cheap models for boilerplate. A scan with cheap = gpt-4o-mini costs 5–10× less than one with cheap = gpt-4o for the same finding count.
  2. Pin scope to auth+api for routine recurring scans; reserve full for monthly deep-dives.
  3. Use forbidden_paths to keep the agent off paths that produce noisy 500s — every retry costs tokens.
  4. Enable prompt caching on Anthropic + OpenAI. Cached input tokens are 10× cheaper. The dashboard’s spend audit log shows your cache-hit rate.
  5. Schedule during off-hours so low-priority scans don’t compete with high-priority ad-hoc ones for monthly cap.

Notifications

Wire spend events to Slack/email/webhook under Notifications:
  • pentest.budget.exhausted — fires per scan that hits its per-scan cap
  • pentest.budget.monthly_warning — fires when monthly spend crosses 80% / 90% / 100%
  • pentest.budget.daily_burn_anomaly — fires when today’s spend is > 3× the trailing 7-day average