Configure scanning

AI providers and cost

Connect AI models, route each AI task to a model for the system or one team, keep code on-premise, and track AI cost.

View as Markdown

Every AI feature runs on models you connect here: AI Native SAST, dependency checks, secrets verification, proof-of-concept generation, the AI Pentest, AI DAST and drafting custom rules. Until a model answers the default route, AI scans cannot start.

The setup has three parts, in this order:

CardWhat it holds
AI connectionsWhere requests go: an endpoint and its key. One connection can carry several models.
AI modelsA model on a connection, with how it is asked: its reasoning level, output and context limits, and whether it can call tools.
Task routingWhich model answers each AI task, and which models take over when it does not answer.

A fourth card, AI usage by task, shows what each task has spent.

System AI and a team's own models

The same four cards appear in two places:

ScopeWhereWho sets it upWho uses it
System AISystem Settings → Shared servicesA system administratorEvery team, unless the team chooses otherwise. Teams see the system models by name only, never the connection, endpoint or key behind them.
A team's own modelsTeams → AI tabA team adminThat team only.

On the team's AI tab, the AI provider card has one field, Use:

ChoiceEffectWhen to choose it
The system AI, set up by a system administratorThe default for a new team. The team uses the system models. The Task routing card shows them by name, read-only. If no system AI is set up, the team has no AI.Most teams.
This team's own modelsThe team adds its own connections and models and routes its own tasks. The system AI is never used for this team, not even when the team's models fail.The team must keep code with its own provider, or pay for AI separately.
No AI: turn AI features off for this teamAI scans, verification and proof-of-concept generation stop. Classic scanners still run.A team that must not send anything to a model.

Click Save after changing it. Only team admins can change the team's AI; other members see the settings read-only. A team's models never fall back to the system's, and the system's never fall back to a team's.

Saving needs a recent sign-in

Changing a connection, model or route asks you to sign in again if your session is not fresh: Sign in again to change the AI settings. Scans already queued keep the AI configuration they started with; a change applies to new scans only.

Connect your first AI provider

This sets up the system AI, which every team uses by default. To give one team its own models instead, do the same steps on Teams → AI after setting Use to This team's own models and clicking Save.

Before you start

PrerequisiteHow to check it
A system administrator accountThe sidebar shows System Settings under Admin.
An endpoint the server can reachFrom the server, curl -sS -o /dev/null -w "%{http_code}" <YOUR_AI_URL>/models prints an HTTP status code (200 or 401), not a connection error.
A key for that endpointCreated in your provider's console. For Vertex AI, a service account key in JSON with access to the Claude models.
The model IDAs the provider names it, for example gpt-4o or claude-sonnet-4-6. For Azure OpenAI, the deployment name.
PlaceholderWhat it isWhere it comes from
<YOUR_AI_URL>The OpenAI-compatible base address, for example https://api.openai.com/v1 or http://llm.internal.example.com:8000/v1. Leave it empty for the OpenAI API itself.Your provider's documentation, or whoever runs the model server.
<YOUR_MODEL_ID>The model the provider serves.Your provider's model list; for Azure OpenAI, the deployment name.
<YOUR_API_KEY>The key for the endpoint.Your provider's console. Typed by a person into the form, never pasted into a chat.

Steps

  1. Open System Settings (sidebar, Admin) and the Shared services tab.

    Check: the System AI, Task routing, AI connections and AI models cards are shown. Task routing says No model answers the default route yet: AI scans cannot start until one does.

  2. In AI connections, click Add connection. Enter a Name (for example Main), choose the Kind (OpenAI-compatible or Vertex AI (Claude)) and fill in the fields of that kind (see Connection fields).

  3. A person types the API key or pastes the service account key into the form. An OpenAI-compatible server at its own API URL that takes no key, such as vLLM or Ollama inside the network, is saved with the key left empty.

  4. Click Save.

    Check: the connection is listed with Key saved, or No key for a server without one.

  5. In AI models, click Add model. Enter a Name (for example Strong), choose the Connection you just saved, enter the Model ID, and click Save.

    Check: the model is listed as Usable, and the Task routing card now shows it on the Default row. The first model you add answers the default route, which every task falls back to.

  6. Click Test beside the model.

    Check: it says Answered in N s followed by the model's reply.

  7. In the System AI card, click Test connection.

    Check: it says The system AI answered.

Every team that uses the system AI can now run AI scans. A team admin can confirm it for one team with Teams → AI → Test connection: AI answered, using the system AI.

If it does not work

What you seeWhat to do
The connection is refused on Save: needs its own keyThe public OpenAI API (API URL left empty) and Vertex AI need a key; Vertex AI in System Settings can use the deployment's own identity instead. Enter the key, or the API URL of your own server.
An OpenAI-compatible URL must be an HTTP or HTTPS addressEnter the full base address with http:// or https://. A user name or password in the address, a query string and a #fragment are refused.
Test says No answerCheck the Model ID, the key, and that the server can reach the endpoint (the curl check above). The scan log of an AI scan gives the provider's error.
The model shows Cannot be usedHover the label for the reason, for example a missing key or Google Cloud project ID, then edit the connection or model.
The system AI did not answer. Check the settings and the key.The first model of the default route did not answer. Test each model on its own to find which one fails.
AI is not available for this team (team Test connection)The team uses the system AI and none is set up, or the team's own models do not answer.

Connection fields

The Add connection form. Fields marked system only appear only in System Settings.

FieldWhat it doesDefaultWhen to change it
NameA label for the connection, shown in the model form.Empty, requiredName it after the endpoint, for example Azure prod.
KindOpenAI-compatible (OpenAI, Azure OpenAI, vLLM, Ollama, LM Studio, gateways) or Vertex AI (Claude) (Claude models on Google Cloud).OpenAI-compatibleChoose Vertex AI (Claude) for Claude on Google Cloud.
API URLOpenAI-compatible: the base address of the API. http:// and https:// are both accepted.Empty: the OpenAI APIAny provider other than OpenAI itself.
API keyOpenAI-compatible: the key sent with each request. Stored encrypted and never shown again; leave it empty when editing to keep the saved one.NoneOn the first save, unless the API URL points to a server that takes no key; to rotate a key.
Google Cloud project IDVertex AI: the project that serves the models.Empty, requiredAlways for Vertex AI.
Vertex AI regionVertex AI: the region of the endpoint.globalWhen your Claude quota is in one region.
Service account key (JSON)Vertex AI: the key of a service account allowed to call the models. Stored encrypted.NoneAlways for Vertex AI, unless the system uses the deployment's identity.
Use the deployment's own identity (no key)Vertex AI, system only: call Vertex AI as the service account the installation runs as, with no key stored.OffScanSuite runs on Google Cloud with a service account that may call Vertex AI.
CA bundle pathSystem only: a PEM file of extra certificate authorities to trust for this endpoint, as a path inside the containers, for example /key/internal-ca.pem.Empty: the standard authoritiesAn internal authority signed the endpoint's certificate, or a proxy inspects TLS.
Requests at once, all scansHow many requests every running scan together may send to this connection at the same time. 0 to 64.0: no capThe provider rate-limits you, or a local server overloads.
In useUnticked, the connection and its models are skipped.OnTo take an endpoint out of service without deleting it.

Model fields

FieldWhat it doesDefaultWhen to change it
NameHow the model is shown in routes, logs, usage and prices. Teams see a system model by this name only.Empty, requiredName it by its role, for example Strong or Fast.
ConnectionThe connection the model is reached through.The first connectionWhen you have several.
Model IDThe model as the provider knows it; for Azure OpenAI, the deployment name.Empty, requiredAlways.
ReasoningAuto sends no reasoning setting. Low, Medium and High ask for more reasoning (extended thinking for Claude). Off turns it off.AutoA reasoning model you want to make cheaper (Low) or more thorough (High). Keep Auto for models without reasoning, such as GPT-4o.
Maximum output tokensThe longest answer the model may write.Empty: ScanSuite's defaultThe model allows longer answers and findings are cut short.
Context window, tokensThe largest request the model takes. A request clearly larger goes to the next model of its route. At least 1000.Empty: no size checkSmaller local models, so that large files go to a model that fits them.
Requests at onceA cap for this model alone, under the connection's cap. 0 to 64.0: only the connection's capProviders that limit each model, such as Azure deployments.
Supports tool callingWhether the model can call tools. Tasks marked as tool loops ask such models first.OnUntick for a model without tool calling.
In useUnticked, the model is skipped in every route.OnTo take a model out without deleting it.

Each model in the list shows its status — Usable, Cannot be used (with the reason) or Turned off — how many routes use it, and Test, Edit and Delete.

Task routing

The Task routing card lists the tasks with the model that answers each one, under Answered by. A route is a First model and, under Then, the models to try next when it does not answer.

  • The Default route answers every task without a route of its own, and is every task's last fallback. It cannot be emptied once set.
  • The feature rows are AI SAST, Dependency checks, Secrets verification, PoC generation, AI pentest, AI DAST and Custom rules. A feature without its own route uses the Default route.
  • Show the steps expands a feature into its steps. Each step is marked needs a strong model, a mid model is enough or a fast model is enough; a step without its own route uses the feature's.
  • A step marked Tool loop asks models with tool calling first.

To route a task, click Change on its row, pick the First model and any Then models, and click Save. Use the route above removes the task's own route again.

A practical split

Start with one strong model on the Default route. Once AI usage by task shows where the tokens go, route the steps marked a fast model is enough to a cheaper model. Results and cost change; nothing else needs reconfiguring.

When a model does not answer the availability check at the start of a scan, it is set aside for that scan and the next model of the route answers instead. The scan log names the model that answered, and the scan page lists the model that answered each AI task. When no model of a step the scan cannot do without answers, the scan stops and its log gives the provider's error.

AI usage by task

The AI usage by task card lists, per Task and Model, the Requests, Tokens and Cost, USD over every scan and page request. Cost appears once the model is priced (see Cost below). The tasks that spend most on a strong model are the ones worth trying on a cheaper one.

Keeping code on-premise

AI Native SAST sends source code to the model, so this is the decision that matters most for static analysis.

A cloud-hosted model means source code is sent to the provider. For sensitive code, connect an OpenAI-compatible model served inside your own network (vLLM, Ollama, LM Studio and similar). The rest of the platform works the same, fully offline.

  • Plain http:// addresses are accepted, for a model server inside your network. Over HTTP the key and the prompts, including source code, travel unencrypted: use it only on a network you trust.
  • TLS verification cannot be turned off. If an internal certificate authority issued the model's certificate, or a proxy inspects TLS, put the model on the system AI and fill in CA bundle path: the system administrator copies the authority's PEM file to /opt/scansuite/key on the server and enters its path as the containers see it, for example /key/internal-ca.pem. Teams cannot name a CA bundle.

Model choice

Results are written by the model, so they vary a little between runs. Larger models give more consistent results; for local models, 30B parameters is the practical floor if you want reproducible findings rather than suggestions.

Cost

Token usage is counted per team, including usage through a team's own models. Two monthly limits apply, and the lower one wins:

LimitWhereWho sets itDefault
Tokens a monthTeams → AI → Monthly token budgetA team adminEmpty: no team limit
AI tokens a monthSystem Settings → Teams, the team's limitsA system administratorEmpty: no limit

When the month's tokens are used up, AI features pause and AI scanners report that AI is unavailable until the next month or a higher limit. The Monthly token budget card shows what the team has used.

Spend is shown in US dollars once the models are priced. A system administrator fills in the LLM prices card under System Settings → Shared services: a JSON table keyed by model name, with the price per million prompt and completion tokens, for example {"Strong (system)": {"prompt": 3, "completion": 15}}. Use the names listed under Models your teams used; a system model is listed as teams see it. Scan History, the scan page, the Products pages, the Top 10 LLM Token Consuming Targets panel and AI usage by task then show the cost. Changing a price re-prices past scans; token counts never change.

FeatureWhat drives its cost
AI Native SASTGrows with the number of files in scope. Reachability analysis adds cost per finding. The scope is the main control.
Dependency reachabilityOnly dependency findings with exploitation evidence are analysed, so the cost follows the number of exploitable findings, not of dependencies.
Secrets verificationCheap.
AI DAST and AI PentestBounded by the scan's cycle and time budget.

Incremental Scan, Custom Scope and Monitor Changes on the Static Code Analysis page make a re-scan cost what the change costs rather than what the codebase costs.

Other AI settings of a team

The How AI handles findings card on the team's AI tab holds two settings that team admins and operators can change:

SettingWhat it doesDefault
Close findings that are verified as fixedWhen a scan no longer reports an AI SAST finding, the finding is closed only with file and line evidence that the problem is gone. See Rescans and fix verification.On
Language of AI-written textThe language of finding descriptions and proof-of-concept notes: English or Russian.English

Where this fits

The other integrations of a team and the system — DefectDojo, Securitm, alerts, Nessus — are in API keys for external systems. Who may change what is in Teams and roles.

Last reviewed 2026-10-19