{"name": "AI Security Guard", "version": "1.2.0", "description": "Security advice for AI agents. Scans content, explains what's concerning, and lets agents ask follow-up questions. Built for AI agents and their operators.", "base_url": "https://aisecurityguard.io", "requirements": {"quote": {"required": true, "description": "All /v1/guard requests require X-Quote-ID header", "sources": ["POST /v1/guard/quote (content-length based)", "POST /v1/guard/quote/url (URL-based, we fetch content)"], "ttl_seconds": 300, "size_tolerance": 0.1}, "intent_contract": {"required": true, "description": "All /v1/guard requests require an intent_contract object"}, "content": {"required": "conditional", "description": "Required for content-based quotes. Optional for URL-based quotes (content retrieved from cache)"}}, "endpoints": [{"method": "POST", "path": "/v1/guard/quote", "summary": "Get price quote for content scanning", "description": "Get a price quote for content scanning (content-length based).\n\nProvide `content_length` to get a quote, then submit content in\nPOST /v1/guard with X-Quote-ID header.\n\nFor URL-based quotes (we fetch content for you), use POST /v1/guard/quote/url instead.\n\nThe returned quote_id can be used in the X-Quote-ID header when calling /guard."}, {"method": "POST", "path": "/v1/guard/quote/url", "summary": "Get price quote by fetching URL content", "description": "Get a price quote by fetching URL content.\n\nWe fetch the content, cache it, and return a quote based on actual size.\nContent is cached for 10 minutes.\n\n**Rate limited to 10/minute** to prevent abuse (fetch has compute cost).\n\nUse cases:\n- MCP tool definitions hosted on GitHub/IPFS\n- Remote API responses to pre-check before processing\n- Any content where the agent wants pre-flight security check\n\nAfter receiving the quote, call POST /v1/guard with X-Quote-ID header\n(no content body needed - we use the cached content)."}, {"method": "POST", "path": "/v1/guard/batch/quote/url", "summary": "Get batch price quote by fetching multiple URLs", "description": "Get a batch quote by fetching multiple URLs.\n\nWe fetch each URL concurrently, cache successful content, and return a quote.\n**Failed URLs are skipped** (too large, blocked, timeout) and reported separately.\n\n**Rate limited to 5/minute** - batch URL fetching has significant compute cost.\n\n**Response includes:**\n- `successful_items`: URLs fetched successfully with pricing\n- `failed_items`: URLs that failed (with error details)\n- `total_price`: Sum of successful items only\n- `can_proceed`: True if at least one URL succeeded\n\nAfter receiving the quote, call POST /v1/guard/batch with X-Batch-Quote-ID header."}, {"method": "POST", "path": "/v1/guard", "summary": "Scan content for security threats", "description": "Scan content for security threats.\n\n**REQUIRES a valid quote.** First call POST /v1/guard/quote to get a quote_id,\nthen include it in the X-Quote-ID header.\n\n**Two modes:**\n\n1. **Content-based**: Provide content in request body with X-Quote-ID header.\n\n2. **URL-based**: Use a URL-based quote (content already cached). Just provide\n   X-Quote-ID header - no content body needed. We use the cached content from\n   the URL fetch.\n\nPerforms multi-expert analysis including:\n- Intent drift detection (content vs. declared purpose)\n- Prompt injection patterns\n- Credential exfiltration attempts\n- Hidden content revelation\n\nAccepts content as a string or messages array (conversation format).\n\n**Response Headers:**\n- `X-Session-ID`: Use this for follow-up questions via POST /v1/qa\n\n**Privacy & Data Retention:**\n- Content is **not stored permanently** - only held for 15 minutes to enable follow-up Q&A\n- Content is hashed (SHA-256) so it is never readable by us; the hash enables faster repeat scans of identical content (retained 7 days)\n- After 15 minutes, the original content is automatically deleted\n- Session metadata (verdict, threat summary) remains available for 1 hour\n\n**Follow-up Q&A Window:** Ask follow-up questions within 15 minutes of this scan."}, {"method": "POST", "path": "/v1/guard/batch/quote", "summary": "Get price quote for batch scanning", "description": "Get a price quote for batch scanning.\n\nProvide content lengths for all items to get total batch price.\nThe returned batch_quote_id is used in X-Batch-Quote-ID header when submitting.\n\n**Pricing:**\n- Each item priced based on content size tier\n- Total price is sum of individual item prices\n- No additional batch fees"}, {"method": "POST", "path": "/v1/guard/batch", "summary": "Submit batch scan request", "description": "Submit a batch of items for scanning.\n\n**REQUIRES a valid batch quote.** First call POST /v1/guard/batch/quote,\nthen include the batch_quote_id in the X-Batch-Quote-ID header.\n\n**Processing:**\n- Items are queued for parallel processing\n- Poll GET /v1/guard/batch/{batch_id} for status and results\n- Each successful item returns scan_id and session_id for Q&A\n\n**Failure Handling:**\n- Failed items include a retry_token for free retry within 1 hour\n- Skipped items (validation errors) are not retryable"}, {"method": "GET", "path": "/v1/guard/batch/{batch_id}", "summary": "Get batch scan status and results", "description": "Get status and results for a batch scan.\n\n**Polling:**\n- Poll this endpoint until status is 'complete', 'partial', or 'failed'\n- Results are available incrementally as items complete\n- Batch results expire after 2 hours\n\n**Status values:**\n- `queued`: Batch accepted, waiting to start\n- `processing`: Items being scanned\n- `complete`: All items succeeded\n- `partial`: Some items failed (check retry_tokens)\n- `failed`: Batch-level error (including timeout)\n\n**Timeout behavior:**\n- Batches with no progress for 120s are automatically failed\n- This prevents infinite polling when workers are unavailable\n- Timed-out items have error_code='batch_timeout'\n\n**Results:**\n- Each item includes scan_id and session_id for Q&A follow-ups\n- Failed items include retry_token for free retry"}, {"method": "POST", "path": "/v1/guard/batch/url", "summary": "Submit batch URL scan (content already cached)", "description": "Submit a batch of URLs for scanning (content already fetched).\n\n**REQUIRES a URL batch quote.** First call POST /v1/guard/batch/quote/url,\nthen include the batch_quote_id in the X-Batch-Quote-ID header.\n\nThe URLs were fetched and cached during the quote phase. Just provide\nintent contracts for each URL.\n\n**Processing:**\n- Items are queued for parallel processing\n- Poll GET /v1/guard/batch/{batch_id} for status and results\n- Each item scans both the URL string AND fetched content\n- Each successful item returns scan_id and session_id for Q&A\n\n**URL String Scanning:**\n- Each URL is scanned for encoded payloads (base64, injection attempts)\n- Findings are merged with content scan results"}, {"method": "GET", "path": "/v1/skill.md", "summary": "Get SDK/PTI quick reference (Markdown)", "description": "Returns simplified skill documentation focused on SDK and PTI usage.\n\nFor comprehensive HTTP API documentation, see /v1/api.md instead."}, {"method": "GET", "path": "/v1/skill", "summary": "Get integration info (JSON)", "description": "Returns integration info for quick discovery.\n\nFor full API specification, see /v1/api instead."}, {"method": "GET", "path": "/v1/api", "summary": "Get full API specification (JSON)", "description": "Returns agent-consumable API summary in JSON format.\n\nIncludes:\n- Service info and version\n- Available endpoints\n- Supported threat categories\n- Content types and intent types\n- Pricing tiers\n- Link to full OpenAPI spec"}, {"method": "GET", "path": "/v1/api.md", "summary": "Get full API documentation (Markdown)", "description": "Returns API documentation as markdown text (cached).\n\nSuitable for:\n- Copy-paste into agent context\n- Human reading\n- Static file generation"}, {"method": "GET", "path": "/v1/risk-wizard/activities", "summary": "Get available activities for risk wizard", "description": "Get the list of available activities for the risk assessment wizard.\n\nReturns activity IDs, labels, and base risk scores to help users\nunderstand what to select."}, {"method": "POST", "path": "/v1/risk-wizard", "summary": "Activity-based risk assessment (Educational)", "description": "Educational risk assessment based on agent activities.\n\nThis wizard helps both humans and AI agents understand their security risks\nby analyzing what activities they perform. It provides:\n\n- **Risk score and level** based on selected activities\n- **Detailed threat analysis** with educational explanations\n- **DIY mitigations** - free actionable advice you can implement yourself\n- **AI Security Guard protection** - how scanning helps for each threat\n- **General best practices** - security fundamentals for all AI systems\n- **Recommended scan configuration** - optimal settings for the use case\n\n**Available activities:**\n- summarizing_web_content\n- using_mcp_servers\n- consuming_apis\n- agent_to_agent\n- downloading_skills\n- processing_user_files\n- executing_generated_code\n- reading_emails\n\nCall GET /v1/risk-wizard/activities for full list with descriptions."}, {"method": "POST", "path": "/v1/qa", "summary": "Ask follow-up question about scan (PAID)", "description": "Ask a follow-up question about a previous scan.\n\n    Use this to dig deeper into scan results, understand specific\n    threats, or get clarification on recommendations.\n\n    **Requires**: session_id from a previous /v1/guard scan\n    (obtained from X-Session-ID response header)\n\n    **Payment**: $0.0125 USDC per question\n\n    ---\n\n    **15-Minute Window**: Follow-up questions work best within 15 minutes of the scan.\n    During this window, the LLM has access to your original content for detailed analysis.\n\n    **After 15 minutes**: The original content is automatically deleted for privacy.\n    You can still ask questions, but answers will be based only on the scan metadata\n    (verdict, threat types, locations) rather than the full content.\n\n    **Privacy**: Your content is never stored permanently and is never readable by us."}, {"method": "POST", "path": "/v1/advisory", "summary": "Get security advisory (PAID)", "description": "Ask general security questions without a prior scan.\n\n    Use this for:\n    - Learning about security best practices for AI agents\n    - Understanding threat types (prompt injection, tool abuse, etc.)\n    - Getting guidance on securing your AI/LLM applications\n    - Remediation advice for specific vulnerability classes\n\n    **No scan required** - answers are powered by our threat intelligence\n    knowledge base with 60+ documented attack patterns and mitigations.\n\n    **Payment**: $0.01 USDC per question\n\n    ---\n\n    **Example questions**:\n    - \"How do I prevent prompt injection in my chatbot?\"\n    - \"What are the risks of using MCP tools with untrusted content?\"\n    - \"Explain indirect prompt injection and how to defend against it\"\n    - \"Best practices for input validation before LLM processing\"\n\n    **Tip**: Provide context about your setup for more tailored advice."}, {"method": "POST", "path": "/v1/calculator", "summary": "Cost calculator (FREE)", "description": "Calculate projected monthly costs based on scan volume.\n\n    **This endpoint is FREE** - rate limited by IP.\n\n    ## Input Formats\n\n    **Simple Format** (quick estimates):\n    ```json\n    {\"daily_scans\": 100, \"primary_tier\": \"standard\"}\n    ```\n    Just specify daily volume and your typical content size tier.\n\n    **Detailed Format** (precise planning):\n    ```json\n    {\"scan_estimates\": {\"micro\": 500, \"standard\": 2000, \"large\": 100}}\n    ```\n    Specify monthly counts per content size tier.\n\n    ## Size Tiers & Pricing\n    **Text Scanning (by content size):**\n    - Micro (0-500 chars): $0.0035\n    - Standard (501-2K chars): $0.0095\n    - Large (2K-25K chars): $0.025\n    - Bulk (25K-100K chars): $0.055\n\n    **Document Scanning (PDF/DOCX):**\n    - Extraction fee: $0.12/document\n    - Block scanning: standard tier pricing per extracted block\n    - Typical document: ~20 blocks (10 pages \u00d7 2)\n\n    **Preflight Validation (URLs, prices, integers, addresses, hashes):**\n    - $0.0075/validation\n\n    **Advisory (Follow-up Q&A):** $0.025/question\n\n    ## Example Response\n    The calculator returns monthly projections including scan costs,\n    advisory costs, and a suggested budget configuration."}, {"method": "POST", "path": "/v1/support", "summary": "Pre-sales support Q&A (FREE, LLM-powered)", "description": "Ask questions about the service before making paid requests.\n\n    **This endpoint is FREE** - rate limited by IP.\n\n    Uses LLM for intelligent, context-aware answers with rule-based fallback\n    for reliability.\n\n    Good questions to ask:\n    - \"How does the scanning work?\"\n    - \"What threats can you detect?\"\n    - \"How do I integrate with x402 payments?\"\n    - \"What's the best workflow for high-volume scanning?\""}, {"method": "GET", "path": "/v1/support/faq", "summary": "Get frequently asked questions (FREE)", "description": "Get pre-defined answers to frequently asked questions.\n\n    **This endpoint is FREE** - rate limited by IP.\n\n    Useful for:\n    - Building agent knowledge bases\n    - Quick reference without LLM calls\n    - Displaying help content in UIs"}, {"method": "GET", "path": "/v1/pricing", "summary": "Get pricing information (FREE)", "description": "Get complete pricing information for all services.\n\n    **This endpoint is FREE** - rate limited by IP.\n\n    Returns:\n    - Content scanning pricing tiers (micro, standard, large, bulk)\n    - Size boundaries for each tier\n    - Additional services (Q&A, advisory, document scanning, preflight validation)\n    - Batch volume discounts (up to 15% off for 200+ items)\n    - Relevant endpoint references\n\n    Use this endpoint to:\n    - Display pricing in UIs\n    - Build internal cost calculators\n    - Integrate pricing data into agent budgeting systems"}, {"method": "POST", "path": "/v1/budget/register", "summary": "Register and get API key (FREE)", "description": "Register to enable budget tracking. Returns an API key.\n\n    **IMPORTANT:**\n    - The API key is shown ONLY ONCE during registration\n    - Save it securely - you cannot retrieve it again\n    - Use this API key as your X-Agent-ID in ALL subsequent requests\n\n    **Flow:**\n    1. Call this endpoint with a unique seed (e.g., your wallet address)\n    2. Save the returned API key\n    3. Use the API key as X-Agent-ID header for all paid endpoints\n    4. Your spending is tracked automatically\n    5. View your budget anytime at GET /v1/budget/status\n\n    If the seed is already registered, returns 409 Conflict."}, {"method": "GET", "path": "/v1/budget/status", "summary": "Get budget status (FREE, requires registration)", "description": "Get current spending status.\n\n    **This endpoint is FREE** - requires X-Agent-ID header (your API key from registration).\n\n    Register first at POST /v1/budget/register to get your API key.\n\n    Returns:\n    - Total and monthly spending\n    - Scan counts\n    - Budget utilization (if budget configured)\n    - Alerts when approaching or exceeding limits\n\n    **IMPORTANT:** Budget limits are INFORMATIONAL ONLY. API calls are never blocked\n    when budget is exceeded. Agents can use this data to make informed decisions\n    about API usage, but enforcement is left to the agent's discretion."}, {"method": "POST", "path": "/v1/budget/config", "summary": "Set budget configuration (FREE, requires registration)", "description": "Configure budget limits and alerts.\n\n    **This endpoint is FREE** - requires X-Agent-ID header (your API key from registration).\n\n    Register first at POST /v1/budget/register to get your API key.\n\n    Set:\n    - Monthly spending limit\n    - Alert threshold percentage\n    - Optional daily limit\n\n    **IMPORTANT:** Budget limits are INFORMATIONAL ONLY. API calls are never blocked\n    when budget is exceeded. Use this to enable spending awareness and self-governance."}, {"method": "GET", "path": "/v1/budget/tracking-config", "summary": "Generate tracking config file (FREE, requires registration)", "description": "Generate a configuration file that agents can save locally\n    to track their budget settings.\n\n    **This endpoint is FREE** - requires X-Agent-ID header (your API key from registration).\n\n    Register first at POST /v1/budget/register to get your API key."}, {"method": "GET", "path": "/v1/research-feed", "summary": "Get Research Feed", "description": "Get AI Security Guard research articles from Moltx.\n\nReturns cached data if available and fresh (< 30 minutes old).\nIncludes social proof stats (agents reached, interactions)."}, {"method": "GET", "path": "/v1/articles", "summary": "Get Articles", "description": "Get all published articles from local storage.\n\nArticles are synced from the marketing CRM via DO Spaces, enabling\nself-hosted article serving with full SEO benefits.\n\nReturns:\n    List of articles with metadata (truncated content for list view)"}, {"method": "GET", "path": "/v1/articles/{slug}/image", "summary": "Get Article Image", "description": "Serve article image as binary response.\n\nReturns the image for an article, suitable for use in <img> tags.\nReturns 404 if article or image not found."}, {"method": "GET", "path": "/v1/research/{slug}", "summary": "Get Article Page", "description": "Serve an individual article page as HTML.\n\nRenders articles for SEO-friendly, self-hosted serving.\nArticles are loaded from local JSON file (synced from DO Spaces).\n\nArgs:\n    slug: URL-friendly article identifier\n\nReturns:\n    Rendered HTML page with article content"}, {"method": "POST", "path": "/v1/feedback", "summary": "Submit feedback on a scan result", "description": "Report false positives (safe content flagged as threat) or false negatives (threats missed by the scanner). This feedback helps improve detection patterns.\n\n**Privacy:** No content is stored. Only metadata about the scan (verdict, threat score, content type) is captured for analysis."}, {"method": "POST", "path": "/v1/feedback/general", "summary": "Submit general feedback or suggestions", "description": "Submit general feedback, feature suggestions, or comments that are not tied to a specific scan result.\n\nUse this for:\n- Feature requests and suggestions\n- Service improvement ideas\n- Documentation feedback\n- General questions or comments\n- Bug reports (non-scan-related)\n\n**Privacy:** No code snippets allowed in the message. Describe your feedback in plain text only."}, {"method": "GET", "path": "/v1/status", "summary": "Get service status and uptime metrics", "description": "Returns current service health status, uptime percentages over 24h/7d/30d windows, and component status. Uses lightweight piggyback tracking - no synthetic health checks.\n\n**No authentication required.** Designed for monitoring dashboards and autonomous agents checking service availability."}, {"method": "GET", "path": "/v1/status/ping", "summary": "Simple health ping", "description": "Lightweight health check that records a data point and returns quickly."}, {"method": "POST", "path": "/v1/contribute", "summary": "Submit a threat sample", "description": "Submit a threat sample to help improve detection patterns.\n\n**THIS IS NOT PRIVATE** - Content you submit WILL be stored.\n\nGood contributions:\n- Novel prompt injection techniques\n- Jailbreak attempts (synthetic or from research)\n- Social engineering patterns targeting AI assistants\n- Obfuscation techniques (encoding, payload splitting)\n\nDo NOT submit:\n- Real credentials or API keys\n- Personal information (names, emails, etc.)\n- Proprietary business data"}, {"method": "GET", "path": "/v1/contribute/stats", "summary": "Community contribution statistics", "description": "View statistics about community threat contributions."}, {"method": "POST", "path": "/v1/document/quote", "summary": "Get price quote for document scanning", "description": "Get a price quote for document scanning.\n\nDocument scanning includes:\n- **Extraction fee**: Flat $0.12 for document processing (covers subprocess overhead)\n- **Block scanning fee**: Per extracted text block (standard tier pricing)\n\nThe returned `quote_id` should be used in the `X-Quote-ID` header when calling\nPOST /v1/document/scan.\n\n**Supported formats:**\n- PDF (application/pdf)\n- DOCX (application/vnd.openxmlformats-officedocument.wordprocessingml.document)\n\n**What gets scanned:**\n- Document metadata (title, author, keywords, etc.)\n- Annotations and comments\n- Hidden text (white color, tiny font, off-page, etc.)\n- Form field values\n- JavaScript content (detection only, no execution)"}, {"method": "POST", "path": "/v1/document/scan", "summary": "Scan document for security threats", "description": "Scan a document for security threats.\n\n**REQUIRES a valid quote.** First call POST /v1/document/quote to get a quote_id,\nthen include it in the X-Quote-ID header.\n\n**Scanning process:**\n1. Decode base64 document\n2. Extract and analyze all text content\n3. Scan for prompt injection, credential exfiltration, and other threats\n4. Aggregate results with structural analysis\n\n**Response includes:**\n- Overall verdict and threat score\n- Security findings with severity levels\n- Structural risk indicators\n- Block-by-block scan results (if requested)\n- Pricing breakdown"}, {"method": "GET", "path": "/v1/document/supported-types", "summary": "Get supported document types", "description": "Get list of supported document types for scanning.\n\nReturns MIME types and their descriptions."}, {"method": "POST", "path": "/v1/guard/preflight/quote", "summary": "Get price quote for batch validation (FREE)", "description": "Get a price quote for batch validation.\n\n**This endpoint is FREE** - no payment required.\n\nUse the returned `quote_id` in the `X-Quote-ID` header when calling `/v1/guard/preflight/batch`."}, {"method": "POST", "path": "/v1/guard/preflight", "summary": "Validate a single value (URL, price, integer, address, or hash)", "description": "Lightweight structural validation for:\n- **URLs**: Format and security validation\n- **Prices**: Numeric bounds validation\n- **Integers**: Type-safe bounds validation\n- **Addresses**: Format validation\n- **Hashes**: Format validation\n\n**Cost**: $0.0005 per validation"}, {"method": "POST", "path": "/v1/guard/preflight/batch", "summary": "Validate multiple values in batch", "description": "Batch validation for multiple values in a single request.\n\n**Cost**: $0.0005 per item (total = $0.0005 * item_count)\n\n**Max batch size**: 500 items\n\nIdeal for validating:\n- Multiple URLs before agent processing\n- Transaction parameters (amount, recipient, data)\n- Array of values from API responses"}, {"method": "POST", "path": "/v1/newsletter/signup", "summary": "Newsletter Signup", "description": "Subscribe an email to the AI Security Guard newsletter.\n\nPrivacy notes:\n- Email is stored only in Brevo for newsletter delivery\n- Never connected to scan data or API usage\n- Unsubscribe link in every email\n- No spam, only security research updates\n\nBot protection:\n- Rate limited to 5/minute per IP\n- Honeypot field detection\n- One-time nonce validation"}, {"method": "POST", "path": "/v1/risk/assess", "summary": "Assess content risk from Content DNA", "description": "Assess content risk using Content DNA markers.\n\n**Privacy-preserving**: No actual content is transmitted. The Content DNA\ncontains only structural and behavioral markers extracted client-side.\n\n**Performance**: Target latency <20ms (Redis-speed lookup).\n\n**Free Tier**: Generous initial credit quota. Beyond quota, returns 402 with\nx402 payment option for continued access.\n\n**Response Fields**:\n- `risk_level`: low | medium | high | critical\n- `risk_score`: 0.0 - 1.0 numeric score\n- `flags`: Specific threat indicators (e.g., \"high_directive_density\")\n- `escalate`: True if premium scan recommended for deeper analysis"}, {"method": "GET", "path": "/v1/risk/quota", "summary": "Check remaining risk assessment quota", "description": "Check remaining risk assessment quota for the current billing period.\n\nReturns:\n- `remaining`: Number of assessments remaining\n- `limit`: Total limit for the initial credit quota"}, {"method": "POST", "path": "/v1/risk/keys/provision", "summary": "Provision a free tier API key", "description": "Provision a new free tier API key.\n\n**Rate Limited**: Maximum 5 requests per minute per IP.\n\n**Machine Binding**: Each machine can only have one active API key.\nThe key is bound to machine characteristics for secure authentication.\n\nThe provisioned key is valid immediately and includes the free tier quota.\nStore this key securely - it cannot be recovered if lost."}, {"method": "GET", "path": "/v1/risk/credits", "summary": "Check risk assessment credit balance", "description": "Check risk assessment credit balance.\n\nReturns:\n- `credits_available`: Purchased credits remaining\n- `free_quota_remaining`: Free tier quota remaining this month\n- `free_quota_limit`: Total free tier limit"}, {"method": "POST", "path": "/v1/risk/credits/purchase", "summary": "Purchase risk assessment credits", "description": "Purchase risk assessment credits via x402 payment.\n\n**Payment**: $1.75 USDC for 10,000 credits (1 assessment per credit).\n\nCredits are added immediately after payment verification.\nCredits do not expire.\n\nThis endpoint requires x402 payment. Include payment signature\nin the request headers per x402 protocol."}, {"method": "POST", "path": "/v1/shield/analyze", "summary": "Analyze activity telemetry", "description": "Analyze activity telemetry for behavioral anomalies and threat patterns.\n\nUses credits from free quota (1250 one-time) or purchased credits.\n\nCredit cost:\n- Base analysis: 10 credits (includes up to 25 IP hash lookups)\n- Additional IP lookups: +1 per 25 IP hashes over 25\n- Trend analysis: +2 if daily_totals provided\n\nIdempotency:\n- Include idempotency_key to prevent duplicate billing on retries\n- Cached responses returned for 1 hour\n\nReturns:\n- Risk score and grade\n- Detected anomalies with explanations\n- Flagged IPs from threat intelligence\n- Comparison to community baselines\n- Actionable recommendations"}, {"method": "GET", "path": "/v1/shield/baselines", "summary": "Get community baseline statistics (FREE)", "description": "Get anonymized community baseline statistics.\n\nFREE endpoint (rate-limited). Useful for self-comparison."}, {"method": "POST", "path": "/v1/alerts/send", "summary": "Send Alert", "description": "Send an alert email to a user via Brevo transactional API.\n\nRequires valid risk assessment API key in Authorization header.\nRate limited to 10 requests per minute per IP to prevent abuse.\n\nArgs:\n    request: FastAPI request object (for rate limiting).\n    alert_request: Alert details including email, type, and data.\n    api_key: Validated API key from Authorization header.\n\nReturns:\n    AlertResponse with success status and Brevo message ID.\n\nRaises:\n    HTTPException: 400 if required data is missing for alert type.\n    HTTPException: 401 if API key is invalid.\n    HTTPException: 502 if Brevo API fails.\n    HTTPException: 503 if Brevo is not configured.\n    HTTPException: 504 if Brevo times out."}, {"method": "GET", "path": "/v1/alerts/health", "summary": "Alerts Health", "description": "Health check for alerts service.\n\nReturns configuration status without exposing sensitive values.\n\nReturns:\n    Dictionary with service status and template configuration."}, {"method": "POST", "path": "/v1/alerts/validate-email", "summary": "Validate Email For Alerts", "description": "Validate an email address for alert delivery.\n\nUses the same validation logic as the /send endpoint:\n- Format validation (valid email structure)\n- Length check (max 254 characters)\n- Disposable domain rejection\n\nRequires valid risk assessment API key in Authorization header.\n\nArgs:\n    request: FastAPI request object (for rate limiting).\n    validation_request: Contains the email to validate.\n    api_key: Validated API key from Authorization header.\n\nReturns:\n    EmailValidationResponse with valid status and error message if invalid."}, {"method": "POST", "path": "/v1/onramp/session", "summary": "Create Onramp Session", "description": "Create a Stripe crypto onramp session.\n\nCreates a session that allows the user to purchase USDC via credit card\nand deposit directly to their AgentGuard360 wallet on Base network.\n\nThe wallet address is locked - users cannot change the destination."}, {"method": "GET", "path": "/action-pack", "summary": "Action Pack Landing", "description": "Serve the Action Pack landing page.\n\nThis is the public page where users sign up to receive the email-gated content."}, {"method": "POST", "path": "/action-pack/subscribe", "summary": "Subscribe Action Pack", "description": "Subscribe to receive the AI Agent Security Action Pack.\n\nCreates a signed download token, adds contact to Brevo list,\nand sends transactional email with the download link."}, {"method": "GET", "path": "/action-pack/guide", "summary": "Access Guide", "description": "Access the Action Pack guide with a valid token.\n\nValidates the signed token and serves the guide HTML.\nRedirects to landing page if token is missing or invalid."}, {"method": "GET", "path": "/action-pack/guide/{file_path}", "summary": "Serve Guide Assets", "description": "Serve guide static assets (CSS, JS, images).\n\nToken validation is optional for most assets to allow proper loading\nafter the main page is authenticated. However, downloadable files\n(.zip, .tar.gz) require token validation."}, {"method": "GET", "path": "/reports/shipping-the-future/", "summary": "Shipping The Future Index", "description": "Serve report entry HTML."}, {"method": "GET", "path": "/reports/shipping-the-future", "summary": "Shipping The Future Index", "description": "Serve report entry HTML."}, {"method": "GET", "path": "/reports/shipping-the-future/{file_path}", "summary": "Serve Shipping The Future Assets", "description": "Serve report static assets (images, future css/js)."}, {"method": "GET", "path": "/sitemap.xml", "summary": "Get Sitemap", "description": "Generate dynamic XML sitemap including static pages and all articles.\n\nCritical for SEO: Search engines use this to discover content.\nWithout a sitemap, crawlers may not find article pages."}, {"method": "GET", "path": "/learn/", "summary": "Get Learn Center", "description": "Learning Center landing page.\n\nServes static HTML file with article grid, newsletter signup, and action pack sidebar."}, {"method": "GET", "path": "/learn", "summary": "Get Learn Center", "description": "Learning Center landing page.\n\nServes static HTML file with article grid, newsletter signup, and action pack sidebar."}, {"method": "GET", "path": "/learn/article/{slug}", "summary": "Get Learn Article", "description": "Serve article in learn center with Article schema.\n\nFor in-depth research content targeting human readers."}, {"method": "GET", "path": "/learn/how-to/{slug}", "summary": "Get Learn Howto", "description": "Serve how-to guide with HowTo + FAQPage schema.\n\nFor quick answers optimized for AI Overview extraction.\nQuestion-format H2 headings for better LLM comprehension."}, {"method": "GET", "path": "/learn/comparison/{slug}", "summary": "Get Learn Comparison", "description": "Serve comparison article with Article schema.\n\nFor tool/product comparisons targeting informational + commercial keywords.\nIncludes feature tables and FAQ for AEO extraction."}, {"method": "GET", "path": "/landing/{slug}", "summary": "Get Landing Page", "description": "Serve a compact keyword landing page.\n\nDistinct from /learn/* \u2014 product-intent pages with CTA flip controlled\nby SITE_LAUNCH_MODE env var (waitlist | launched)."}, {"method": "GET", "path": "/tools/", "summary": "Get Tools Hub", "description": "Tools hub page listing all available browser-based tools.\n\nSEO-optimized landing page with category filtering."}, {"method": "GET", "path": "/tools", "summary": "Get Tools Hub", "description": "Tools hub page listing all available browser-based tools.\n\nSEO-optimized landing page with category filtering."}, {"method": "GET", "path": "/tools/{slug}", "summary": "Get Tool Page", "description": "Serve individual tool page.\n\nEach tool is a self-contained HTML file with inline JS.\nReturns 404 if tool doesn't exist or isn't active.\n\nArgs:\n    slug: URL-friendly tool identifier (e.g., 'jwt-decoder')"}, {"method": "GET", "path": "/api/data/tools/tools-registry.json", "summary": "Get Tools Registry", "description": "Serve tools registry JSON for client-side tool listing.\n\nUsed by tools.html to dynamically render tool cards."}, {"method": "POST", "path": "/assessments/optin", "summary": "User opts in to receive personalized report", "description": "Process user opt-in: validate spam signals, subscribe to Brevo,\ngenerate signed token, and send personalized report email.\n\nArgs:\n    optin: Email and temp_id from the frontend form.\n\nReturns:\n    Success message."}, {"method": "GET", "path": "/assessments/questions", "summary": "Get all quiz questions", "description": "Return all 13 quiz questions for frontend rendering.\n\nQuestions include profile, behavioral, and belief sections with options\nand answer keys. No authentication required."}, {"method": "GET", "path": "/assessments/questions/{section}", "summary": "Get questions for a section", "description": "Return questions for a specific section (1-4).\n\nArgs:\n    section: Section number (1=Profile, 2=Behaviors, 3=Beliefs, 4=Priority Goal)."}, {"method": "GET", "path": "/assessments/skills/download", "summary": "Download personalized skills for this user", "description": "Download a ZIP of personalized skill packages.\n\nValidates that the user completed an assessment (temp_id from report token)\nbefore allowing the download.\n\nArgs:\n    temp_id: Assessment ID from report token, validated against\n             temp_assessments.jsonl.\n    skills: Comma-separated skill names to include.\n\nReturns:\n    ZIP file of skill markdown + assets."}, {"method": "POST", "path": "/assessments/submit", "summary": "Submit quiz answers and get results", "description": "Score quiz answers and store temporarily for pending opt-in.\n\nReturns a temp_id that the frontend uses to let the user opt in to\na personalized report. Also stores anonymous benchmark data.\n\nArgs:\n    answers: Dict mapping question number (int) to answer key (str).\n             Example: {\"1\": \"a\", \"2\": \"b\", \"4\": \"c\", ...}\n    priority_goal: Optional user-stated goal (e.g., \"Reduce costs\").\n\nReturns:\n    Dict with temp_id, score, archetype, grade, and efficiency_index."}, {"method": "GET", "path": "/assessments/report", "summary": "Generate and return the personalized report", "description": "Generate a personalized HTML report from a signed token.\n\nThe token is generated when the user opts in during the quiz flow\nand sent via email (Brevo). The token contains the temp_id and is\nHMAC-signed to prevent forgery.\n\nArgs:\n    token: Signed token from the email link (?token=xxx).\n\nReturns:\n    HTML report served as a downloadable/streamed file."}, {"method": "GET", "path": "/assessments/report-viewer", "summary": "Report viewer \u2014 shows archetype summary with generate button", "description": "Landing page for report access.\n\nValidates the token, extracts archetype from temp data, and renders\na page with a \"Generate Report\" button. The button calls the existing\n/assessments/report endpoint to generate and serve the HTML report."}, {"method": "GET", "path": "/reports/secrets-of-llm-whisperer/hidden-llm-cost-factors-research-home", "summary": "Research Overview", "description": "Serve the SEO-friendly research overview landing page."}, {"method": "GET", "path": "/reports/secrets-of-llm-whisperer/cut-llm-costs-llm-whisperer-method-overview", "summary": "Method Overview", "description": "Serve the LLM Whisperer Method overview page."}, {"method": "GET", "path": "/reports/secrets-of-llm-whisperer/free-90-day-llm-cost-reduction-courses", "summary": "Coaching Courses", "description": "Serve the free 90-day LLM cost reduction courses page."}, {"method": "GET", "path": "/reports/secrets-of-llm-whisperer/clarity-consult", "summary": "Clarity Consult", "description": "Serve the Clarity Consult booking page."}, {"method": "GET", "path": "/reports/secrets-of-llm-whisperer/assessments/llm-cost-personality", "summary": "Assessment Landing", "description": "Serve the LLM Cost Personality Assessment landing page."}, {"method": "GET", "path": "/reports/secrets-of-llm-whisperer/", "summary": "Index", "description": "Serve the main landing page."}, {"method": "GET", "path": "/reports/secrets-of-llm-whisperer", "summary": "Index", "description": "Serve the main landing page."}, {"method": "GET", "path": "/reports/secrets-of-llm-whisperer/{section_slug}", "summary": "Section Article", "description": "Serve a section article by slug (e.g., 2_hidden_cost_drivers)."}, {"method": "GET", "path": "/reports/secrets-of-llm-whisperer/{file_path}", "summary": "Serve Assets", "description": "Serve report static assets (images, charts, report_content files)."}, {"method": "GET", "path": "/.well-known/x402", "summary": "x402 Discovery Document", "description": "Returns the x402 discovery document for this service."}, {"method": "GET", "path": "/health", "summary": "Health Check", "description": "Health check endpoint for load balancers and uptime monitors.\n\nReturns service status and version."}, {"method": "GET", "path": "/", "summary": "Root", "description": "Serve the landing page or JSON discovery response.\n\nReturns JSON for agents (Accept: application/json) or HTML for browsers.\nAgents can use this endpoint for initial API discovery."}, {"method": "GET", "path": "/for-agents", "summary": "For Agents", "description": "Serve the machine-readable documentation page."}, {"method": "GET", "path": "/privacy-policy", "summary": "Privacy Policy", "description": "Serve the privacy policy page."}, {"method": "GET", "path": "/terms-of-service", "summary": "Terms Of Service", "description": "Serve the terms of service page."}, {"method": "GET", "path": "/trust.md", "summary": "Trust Md", "description": "Serve the trust & security documentation as markdown."}, {"method": "GET", "path": "/trust", "summary": "Trust Page", "description": "Serve the trust & security page with embedded markdown."}, {"method": "GET", "path": "/contact", "summary": "Contact Page", "description": "Serve the contact page."}, {"method": "GET", "path": "/fund_agentguard360_wallet", "summary": "Fund Wallet Page", "description": "Serve the wallet funding page."}, {"method": "GET", "path": "/funding-success", "summary": "Funding Success Page", "description": "Serve the funding success confirmation page."}, {"method": "GET", "path": "/waitlist", "summary": "Waitlist Page", "description": "Serve the waitlist landing page."}, {"method": "GET", "path": "/agentic-ai-briefing", "summary": "Agentic Ai Briefing Page", "description": "Serve the Agentic AI Briefing signup page."}, {"method": "GET", "path": "/contact.json", "summary": "Contact Json", "description": "Serve machine-readable contact information."}, {"method": "GET", "path": "/robots.txt", "summary": "Robots Txt", "description": "Serve robots.txt for web crawlers."}, {"method": "GET", "path": "/llms.txt", "summary": "Llms Txt", "description": "Serve llms.txt for AI language models."}, {"method": "GET", "path": "/llms-full.txt", "summary": "Llms Full Txt", "description": "Serve llms-full.txt extended context for AI language models."}, {"method": "GET", "path": "/agents.txt", "summary": "Agents Txt", "description": "Serve agents.txt for AI agent access policy."}, {"method": "GET", "path": "/79cee2f8e68a4d61b1eee172397be735.txt", "summary": "Bing Verification", "description": "Serve Bing Webmaster Tools verification file."}, {"method": "GET", "path": "/.well-known/agent", "summary": "Well Known Agent", "description": "Serve AID protocol agent discovery JSON."}, {"method": "GET", "path": "/.well-known/agent-card.json", "summary": "Well Known Agent Card", "description": "Serve A2A protocol agent card JSON."}, {"method": "GET", "path": "/docs", "summary": "Docs Redirect", "description": "Redirect docs to for-agents page."}, {"method": "GET", "path": "/about", "summary": "About Redirect", "description": "Redirect about to for-agents page."}, {"method": "GET", "path": "/api", "summary": "Api Info", "description": "API discovery endpoint for programmatic access.\n\nReturns service info, documentation links, and available endpoints.\nAgents should use this to discover API capabilities."}], "intent_contract_schema": {"intent_type": {"type": "string", "required": true, "description": "REQUIRED. Type of operation - determines content expectations and scanner sensitivity. Valid values: data_retrieval, code_generation, text_summarization, text_translation, question_answering, content_creation, data_analysis, file_operation, api_interaction, mcp_interaction, instruction_following, readme, code_review, skill_definition, email, calendar_invite, document_scanning, web_scraping, webhook_payload, search_results, authentication, financial_analysis. Synonyms accepted: skill\u2192skill_definition, mcp\u2192mcp_interaction, api\u2192api_interaction, github\u2192code_review, pr\u2192code_review, pull_request\u2192code_review. CRITICAL: The scanner is designed to detect attacks - this means benign content may trigger findings. The intent_type controls how findings are interpreted. Using the WRONG intent_type (e.g., data_retrieval for GitHub PRs) will result in high false positive perception.", "error_if_missing": "422: Field required at body.intent_contract.intent_type", "error_if_invalid": "422: Input should be 'data_retrieval', 'code_generation', ... (lists all valid values)"}, "task_description": {"type": "string", "required": false, "default": "", "description": "Brief description of the intended task - improves drift detection"}, "expects_instructions": {"type": "boolean | null", "required": false, "default": null, "description": "Whether instructions are expected in the content. If null, derived from intent_type. If provided explicitly, it must be consistent with intent_type (to prevent accidental whitelisting)."}, "expected_language": {"type": "string | null", "required": false, "default": null, "description": "Expected language code (ISO 639-1, e.g., 'en', 'de')"}, "expected_content_type": {"type": "string | null", "required": false, "default": null, "description": "Expected content format: json, text, html, markdown"}, "allowed_domains": {"type": "array[string]", "required": false, "default": [], "description": "List of allowed domains for URL content"}, "trusted": {"type": "boolean", "required": true, "description": "REQUIRED. Is this content from a source you consider trusted? Even trusted sources can be compromised or contain unexpected patterns. Set true for known-good sources (the agent's own repositories, verified partners).Set false for unknown or external sources. Affects advisory framing and finding context.", "error_if_missing": "422: Field required at body.intent_contract.trusted"}}, "validation_errors": {"intent_contract_missing": {"status": 422, "error": "Field required at body.intent_contract", "fix": "Add intent_contract object with intent_type and trusted fields", "example": "{\"content\": \"...\", \"intent_contract\": {\"intent_type\": \"readme\", \"trusted\": false}}"}, "intent_type_missing": {"status": 422, "error": "Field required at body.intent_contract.intent_type", "fix": "Add intent_type to intent_contract (must be one of the documented intent types). Common synonyms accepted: skill\u2192skill_definition, mcp\u2192mcp_interaction, api\u2192api_interaction.", "example": "{\"intent_contract\": {\"intent_type\": \"data_retrieval\", \"trusted\": false}}"}, "intent_type_invalid": {"status": 422, "error": "Invalid value for body.intent_contract.intent_type", "fix": "Use one of the documented intent types (see the Intent Types table in this document). Do not invent new intent types; use the closest match.", "example": "{\"intent_contract\": {\"intent_type\": \"mcp_interaction\", \"trusted\": false}}"}, "trusted_missing": {"status": 422, "error": "Field required at body.intent_contract.trusted", "fix": "Add trusted boolean to intent_contract (true for the agent's repos, false for external)", "example": "{\"intent_contract\": {\"intent_type\": \"readme\", \"trusted\": true}}"}, "expects_instructions_inconsistent": {"status": 422, "error": "expects_instructions is inconsistent with intent_type", "fix": "Either omit expects_instructions (recommended; it will be derived from intent_type) or choose an intent_type consistent with the value.", "example": "{\"intent_contract\": {\"intent_type\": \"mcp_interaction\", \"trusted\": false, \"expects_instructions\": false}}"}}, "threat_categories": [{"id": "url_payload_injection", "name": "URL Payload Injection", "description": "Malicious payloads encoded in URL parameters (base64, injection in query strings)", "severity": "critical"}, {"id": "prompt_injection", "name": "Prompt Injection", "description": "Attempts to override system instructions or manipulate LLM behavior", "severity": "critical"}, {"id": "indirect_injection", "name": "Indirect Injection", "description": "Hidden instructions in external content that target the processing LLM", "severity": "critical"}, {"id": "credential_exfiltration", "name": "Credential Exfiltration", "description": "Attempts to extract API keys, tokens, or secrets", "severity": "critical"}, {"id": "data_exfiltration", "name": "Data Exfiltration", "description": "Attempts to send data to unauthorized external destinations", "severity": "high"}, {"id": "code_injection", "name": "Code Injection", "description": "Malicious code patterns in executable content", "severity": "critical"}, {"id": "intent_drift", "name": "Intent Drift", "description": "Content that diverges from declared task intent", "severity": "medium"}, {"id": "social_engineering", "name": "Social Engineering", "description": "Manipulation techniques targeting LLM decision-making", "severity": "high"}, {"id": "instruction_override", "name": "Instruction Override", "description": "Direct attempts to override or ignore previous instructions", "severity": "critical"}, {"id": "credential_phishing", "name": "Credential Phishing", "description": "Credential requests (passwords, MFA codes, tokens) in contexts where credentials should not be requested. Detected via intent contract mismatch.", "severity": "high"}], "supported_content_types": [{"type": "pdf", "description": "PDF documents. Focused on AI agent threat vectors: hidden text injection, invisible instructions, and prompt injection attacks. Based on emerging research on document-based LLM attacks. Note: This is security scanning, not full-text extraction."}, {"type": "docx", "description": "Microsoft Word documents. Focused on AI agent threat vectors: metadata, comments, track changes, macros, and embedded content. Note: This is security scanning, not full-text extraction."}, {"type": "email", "description": "Raw email with headers and body (RFC 5322). Detects header injection, phishing links, hidden instructions."}, {"type": "calendar", "description": "iCalendar/ICS format (RFC 5545). Detects injection in SUMMARY, DESCRIPTION, meeting invites."}, {"type": "conversation", "description": "Messages array with role/content pairs. Scans for prompt injection, intent drift, social engineering."}, {"type": "skill", "description": "YAML frontmatter + markdown skill definitions"}, {"type": "api_telemetry", "description": "JSON API response data"}, {"type": "mcp_telemetry", "description": "MCP tool calls and responses (JSON-RPC 2.0)"}, {"type": "web_content", "description": "HTML web page content"}, {"type": "text", "description": "Plain text content"}], "intent_types": [{"type": "data_retrieval", "expects_instructions": false, "risk_if_instructions": "high", "description": "Fetching data from APIs, databases, web searches", "use_when": "Content should be pure data with no behavioral directives"}, {"type": "code_generation", "expects_instructions": false, "risk_if_instructions": "medium", "description": "Generating code based on requirements", "use_when": "Code specs may contain technical terms but not agent-override commands"}, {"type": "text_summarization", "expects_instructions": false, "risk_if_instructions": "high", "description": "Receiving text to summarize", "use_when": "Processing documents/articles for summary extraction"}, {"type": "text_translation", "expects_instructions": false, "risk_if_instructions": "high", "description": "Receiving text for translation", "use_when": "Content is source text to translate, not instructions"}, {"type": "question_answering", "expects_instructions": false, "risk_if_instructions": "high", "description": "Answering questions based on provided context", "use_when": "Context documents should be info, not hidden agent instructions"}, {"type": "content_creation", "expects_instructions": true, "risk_if_instructions": "low", "description": "Receiving creative prompts or templates", "use_when": "Instructions are expected as part of creative direction"}, {"type": "data_analysis", "expects_instructions": false, "risk_if_instructions": "high", "description": "Processing datasets or analytical content", "use_when": "Data should be numbers/facts, not behavioral directives"}, {"type": "file_operation", "expects_instructions": false, "risk_if_instructions": "critical", "description": "Reading file contents or processing documents", "use_when": "File data should be passive content, not executable commands"}, {"type": "api_interaction", "expects_instructions": false, "risk_if_instructions": "high", "description": "Processing API responses (REST, GraphQL, webhooks)", "use_when": "API returns should be structured data, not directives"}, {"type": "instruction_following", "expects_instructions": true, "risk_if_instructions": "low", "description": "Intentionally accepting behavioral directives", "use_when": "You're explicitly loading skills, prompts, or user commands"}, {"type": "readme", "expects_instructions": true, "risk_if_instructions": "low", "description": "README files and documentation", "use_when": "Documentation that legitimately contains instructions, links, and code examples"}, {"type": "code_review", "expects_instructions": true, "risk_if_instructions": "low", "description": "GitHub PRs, issues, code reviews, and commit messages", "use_when": "Content contains code diffs, fix descriptions, change requests. Terms like \"fix\", \"change\", \"modify\" are expected."}, {"type": "skill_definition", "expects_instructions": true, "risk_if_instructions": "low", "description": "MCP skill definitions, tool manifests, or agent capability declarations", "use_when": "Loading skill files that define how to use tools and endpoints"}, {"type": "mcp_interaction", "expects_instructions": false, "risk_if_instructions": "high", "description": "MCP server responses and tool outputs", "use_when": "Processing data from MCP tools - should be data, not instructions"}, {"type": "email", "expects_instructions": false, "risk_if_instructions": "critical", "description": "Email messages (RFC 5322). High-risk vector for phishing and prompt injection.", "use_when": "Processing email content - body, headers, or attachments"}, {"type": "calendar_invite", "expects_instructions": false, "risk_if_instructions": "critical", "description": "Calendar invitations (ICS/RFC 5545). Can contain hidden instructions in description fields.", "use_when": "Processing meeting invites, calendar events, or ICS files"}, {"type": "document_scanning", "expects_instructions": false, "risk_if_instructions": "critical", "description": "PDF/DOCX documents. Security scanning focused on AI agent threat vectors (hidden instructions, invisible text injection). Not a general document parser.", "use_when": "Processing uploaded documents, PDFs, or Word files before feeding to an AI agent"}, {"type": "web_scraping", "expects_instructions": false, "risk_if_instructions": "high", "description": "Fetching and processing web page content. Web pages can contain injected instructions in visible text, HTML comments, meta tags, or dynamic content.", "use_when": "Agent fetches URL content before processing - use with /v1/guard/quote/url"}, {"type": "webhook_payload", "expects_instructions": false, "risk_if_instructions": "high", "description": "Incoming webhook data from external services. Payloads should contain event data, not instructions. Compromised webhooks can inject instructions.", "use_when": "Processing inbound webhook data from third-party integrations"}, {"type": "search_results", "expects_instructions": false, "risk_if_instructions": "high", "description": "Search engine or database query results. Can be manipulated via SEO poisoning to inject instructions into AI agents processing the results.", "use_when": "Processing search results from external search APIs or databases"}, {"type": "authentication", "expects_instructions": false, "risk_if_instructions": "medium", "expects_credential_requests": true, "description": "Authentication/authorization flows. Credential requests (passwords, MFA codes, tokens) are expected in this context. Use this when processing legitimate auth flows.", "use_when": "Processing login forms, MFA verification, password reset flows from trusted auth providers"}, {"type": "financial_analysis", "expects_instructions": false, "risk_if_instructions": "critical", "description": "Processing financial data: market prices, trading signals, portfolio analysis, economic indicators. Data should be factual without behavioral directives.", "use_when": "Analyzing market data, price feeds, financial reports, trading signals"}], "pricing": {"model": "dynamic", "description": "Price determined by content length. Call /v1/guard/quote to get exact price.", "tiers": [{"name": "micro", "max_chars": 500, "price_usdc": "0.0035", "use_case": "Short prompts, single messages"}, {"name": "standard", "max_chars": 2000, "price_usdc": "0.0095", "use_case": "Skills, MCP calls, conversations"}, {"name": "large", "max_chars": 25000, "price_usdc": "0.025", "use_case": "Long scripts, documents"}, {"name": "bulk", "max_chars": 100000, "price_usdc": "0.055", "use_case": "Codebases, large docs"}], "currency": "USDC", "payment_protocol": "x402", "quote_required": true, "quote_endpoint": "POST /v1/guard/quote"}, "data_retention": {"original_content": {"duration": "15 minutes", "purpose": "Enables follow-up Q&A questions", "after_expiry": "Automatically deleted"}, "content_hash": {"duration": "7 days", "purpose": "Content is never readable by us; hash enables faster repeat scans", "note": "SHA-256 hash only - irreversible, cannot recover original content"}, "session_metadata": {"duration": "1 hour", "purpose": "Verdict, threat summary for Q&A context", "note": "No original content stored"}}, "trust_center": {"url": "https://aisecurityguard.io/trust", "description": "Complete trust & security documentation including data handling, third-party AI providers, security controls, and compliance information", "machine_readable": "https://aisecurityguard.io/trust.md"}, "detection_accuracy": {"schema_version": "1.1", "last_evaluated": "2026-02-20", "methodology": "validated_corpus_testing", "architecture": {"description": "Multi-expert cascade with defense in depth", "approach": "Multiple detection layers for comprehensive coverage"}, "test_corpus": {"description": "Balanced corpus of clean and attack samples from multiple sources", "validation": "Independent test set, not used in training"}, "aggregate": {"detection_accuracy": ">95%", "fp_rate_max": "<10%", "precision": 0.95, "recall": 0.95}, "by_content_type": {"note": "Performance varies by content type. Contact us for detailed breakdowns.", "best_performance": ["mcp_telemetry", "skill_definition", "api_response"], "good_performance": ["conversation", "web_content", "educational"]}, "continuous_improvement": {"feedback_endpoint": "POST /v1/feedback", "description": "Report false positives/negatives to improve detection"}, "notes": "Accuracy metrics from controlled testing. Real-world performance may vary. We continuously update detection capabilities."}, "document_scanning": {"description": "Scan PDF/DOCX documents for hidden instructions and prompt injection attacks", "endpoints": {"quote": "POST /v1/document/quote", "scan": "POST /v1/document/scan", "supported_types": "GET /v1/document/supported-types"}, "pricing": {"extraction_fee": "0.12 USDC", "block_fee": "0.003 USDC per block (standard tier)", "description": "Flat extraction fee + per-block scanning fee"}, "max_file_size": "15MB", "supported_formats": ["application/pdf", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"], "features": ["Hidden text detection (multiple techniques)", "Prompt injection scanning per extracted block", "Threat assessment with findings and recommendations"], "note": "Security scanning focused on AI agent threats, not general document extraction"}, "preflight_validation": {"description": "Lightweight validation for URLs, prices, integers, addresses, and hashes", "endpoints": {"quote": "POST /v1/guard/preflight/quote", "single": "POST /v1/guard/preflight", "batch": "POST /v1/guard/preflight/batch"}, "pricing": {"per_validation": "0.0075 USDC", "description": "Flat fee per validation"}, "max_batch_size": 500, "supported_types": ["url", "price", "integer", "address", "hash"], "use_cases": ["Pre-flight URL validation before agent fetches", "DeFi transaction parameter validation", "API/MCP output sanitization", "Oracle price feed validation"], "note": "Fast validation optimized for high-volume use cases. Use batch endpoint for efficiency."}, "follow_up_qa": {"endpoint": "POST /v1/qa", "requires": "session_id from X-Session-ID response header", "best_within": "15 minutes of scan", "after_15_min": "Answers based on metadata only (content deleted)", "price": "0.0125 USDC"}, "security_advisory": {"endpoint": "POST /v1/advisory", "requires": "question about security topics", "no_scan_needed": true, "price": "0.0100 USDC", "description": "Get expert security guidance on AI/LLM security topics without a prior scan. Powered by threat intelligence knowledge base with 60+ documented attack patterns.", "example_questions": ["How do I prevent prompt injection in my AI agent?", "What are the risks of MCP server tools?", "Explain indirect prompt injection and mitigation strategies", "Best practices for input validation before LLM processing"]}, "feedback": {"endpoint": "POST /v1/feedback", "description": "Report false positives/negatives to improve detection accuracy", "rate_limit": "10/minute", "requires": {"scan_id": "Scan ID from original scan response", "feedback_type": "false_positive | false_negative", "expected_verdict": "clean | suspicious | malicious", "reason_category": "legitimate_tool | security_research | educational | documentation | missed_threat | other"}, "optional": {"session_id": "Session ID for richer context (best within 1 hour)", "user_note": "Plain text explanation (max 500 chars, no code)"}, "privacy": "No content stored - only scan metadata captured", "free": true}, "budget_tracking": {"description": "Track spending across sessions with informational limits", "enforcement": "NONE - limits are informational only, calls never blocked", "setup_steps": ["1. POST /v1/budget/register with a unique seed (e.g., wallet address)", "2. Save the returned API key - it's shown only once", "3. Use API key as X-Agent-ID header in ALL requests", "4. Spending is tracked automatically under your API key", "5. GET /v1/budget/status to check spending anytime", "6. POST /v1/budget/config to set informational limits"], "endpoints": {"register": "POST /v1/budget/register", "status": "GET /v1/budget/status", "config": "POST /v1/budget/config"}, "free": true}, "openapi_url": "https://aisecurityguard.io/openapi.json"}