---
title: "Comprehensive audit"
method: GET
path: "/api/v1/audit"
tags: ["Audit"]
---

# Comprehensive audit

`GET /api/v1/audit`

## Request

- Base URL: `https://llmse.ai`
- URL: `https://llmse.ai/api/v1/audit`
- Auth: one of:
  - none
  - HTTP bearer

Performs a full website audit combining classification, SEO, E-E-A-T, AEO (with Citation Readiness and Agent Readiness), readability, WCAG, GARM, AI disclosure, privacy compliance, advertiser matching, and similar site discovery in a single request. Fetches the page only once. Also fetches /robots.txt, /llms.txt, and /llms-full.txt for AEO agent readiness checks. Individual sub-analyses that fail return {"error": "..."} instead of their normal result.

## Query parameters

- `url` string, uri, required

## Response `200`

Full audit result

- AuditResult: Comprehensive audit combining all analysis types. Fetches the URL once and runs classification, SEO, EEAT, AEO, readability, WCAG, GARM, AI disclosure, advertiser matching, and similar site discovery. Any sub-analysis that fails returns {"error": "..."} instead of its normal result.
  - `url` string, required
  - `cached` boolean, required
  - `classification` object, required
    - `category` string, required
    - `subcategory` string, required
    - `language` string, required
    - `sentiment` 'Good' | 'Neutral' | 'Bad', required
    - `age` string: Present only if detected
    - `gender` string: Present only if detected
  - `seo` union, required: SEO analysis result, or {"error": "..."} if analysis failed
    - SEOResult
      - `url` string
      - `cached` boolean
      - `score` integer, required: SEO score (0-100). Deduction-based: starts at 100, subtracts per issue (critical -15, warning -5, info -1).
      - `grade` 'A' | 'B' | 'C' | 'D' | 'F', required: Letter grade. Thresholds: A>=90, B>=80, C>=70, D>=60, F<60.
      - `issues` CategorizedIssues, required: Issues grouped by severity level
        - `critical` Issue[], required
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
        - `warnings` Issue[], required
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
        - `info` Issue[], required
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
      - `meta` object, required: Extracted SEO metadata from HTML analysis
        - `title` string
        - `title_length` integer
        - `description` string
        - `description_length` integer
        - `h1_count` integer
        - `heading_count` integer
        - `heading_hierarchy` integer[]
        - `has_viewport` boolean
        - `has_canonical` boolean
        - `canonical_url` string
        - `has_lang` boolean
        - `lang` string
        - `has_charset` boolean
        - `has_noindex` boolean
        - `has_nofollow` boolean
        - `total_images` integer
        - `images_without_alt` integer
        - `images_with_empty_alt` integer
        - `has_og_title` boolean
        - `has_og_description` boolean
        - `has_og_image` boolean
        - `has_twitter_card` boolean
        - `has_schema` boolean
        - `schema_types` string[]
        - `word_count` integer
        - `internal_links` integer
        - `external_links` integer
      - `recommendations` string[], required: Prioritized list of improvements
    - Error
      - `error` string, required: Error message
  - `eeat` union, required: EEAT analysis result, or {"error": "..."} if analysis failed
    - EEATResult
      - `url` string
      - `cached` boolean
      - `score` integer, required: Overall EEAT score (0-100). Weighted average: experience 15%, expertise 25%, authoritativeness 25%, trustworthiness 35%.
      - `grade` 'A' | 'B' | 'C' | 'D' | 'F', required: Letter grade. Thresholds: A>=90, B>=80, C>=70, D>=60, F<60.
      - `scores` object, required: Individual EEAT category scores (0-100 each)
        - `experience` integer, required
        - `expertise` integer, required
        - `authoritativeness` integer, required
        - `trustworthiness` integer, required
      - `issues` object, required: Issues categorized by EEAT component (NOT by severity). Each component contains an array of Issue objects.
        - `experience` Issue[]
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
        - `expertise` Issue[]
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
        - `authoritativeness` Issue[]
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
        - `trustworthiness` Issue[]
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
        - `content_quality` Issue[]
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
        - `technical` Issue[]
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
        - `ymyl` Issue[]
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
      - `signals` object, required: Detected positive EEAT signals by category
        - `experience` string[]
        - `expertise` string[]
        - `authoritativeness` string[]
        - `trustworthiness` string[]
      - `meta` object, required: EEAT metadata
        - `content_type` string: Detected content type (e.g., article, product, page)
        - `ymyl_type` string, nullable: YMYL category if detected (health, financial, legal)
        - `is_ymyl` boolean
        - `is_article` boolean
        - `is_product` boolean
        - `schema_types` string[]
      - `recommendations` string[], required
    - Error
      - `error` string, required: Error message
  - `aeo` union, required: AEO analysis result, or {"error": "..."} if analysis failed
    - AEOResult
      - `url` string
      - `cached` boolean
      - `aeo_score` integer, required: Overall AEO score (0-100). Additive across 10 metrics with clickbait penalty up to -10.
      - `aeo_grade` 'A' | 'B' | 'C' | 'D' | 'F', required: Letter grade. Thresholds: A>=85, B>=70, C>=55, D>=40, F<40.
      - `aeo_metrics` object, required: Individual AEO metric scores across 10 categories totaling 100 points
        - `answer_format` object
          - `score` integer
          - `max_score` integer
          - `qa_pairs_count` integer
          - `signals` string[]
        - `faq_schema` object
          - `score` integer
          - `max_score` integer
          - `has_schema` boolean
          - `has_content` boolean
          - `is_valid` boolean, nullable
        - `howto_schema` object
          - `score` integer
          - `max_score` integer
          - `has_schema` boolean
          - `has_content` boolean
          - `is_valid` boolean, nullable
        - `direct_snippets` object
          - `score` integer
          - `max_score` integer
          - `snippet_count` integer
          - `avg_length` number
          - `max_length` integer
        - `entity_clarity` object
          - `score` integer
          - `max_score` integer
          - `definitions_count` integer
          - `avg_length` number
          - `has_glossary` boolean
        - `source_citations` object
          - `score` integer
          - `max_score` integer
          - `citation_count` integer
          - `by_type` object
          - `signals` string[]
        - `statistics` object
          - `score` integer
          - `max_score` integer
          - `statistics_count` integer
          - `by_type` object
          - `signals` string[]
        - `schema_completeness` object
          - `score` integer
          - `max_score` integer
          - `has_organization_schema` boolean
          - `has_article_schema` boolean
          - `has_author_schema` boolean
          - `is_article_page` boolean
          - `schema_types_count` integer
        - `content_freshness` object
          - `score` integer
          - `max_score` integer
          - `signal_count` integer
          - `by_type` object
        - `topical_authority` object
          - `score` integer
          - `max_score` integer
          - `word_count` integer
          - `heading_count` integer
          - `internal_links` integer
          - `external_links` integer
          - `has_table_of_contents` boolean
        - `clickbait_penalty` object
          - `penalty` integer: Points deducted (0 to -10)
          - `detected_count` integer
          - `patterns` string[]
      - `citation` object, required: Full Citation Readiness analysis nested within AEO
        - `score` integer: Citation readiness score (0-100)
        - `grade` 'A' | 'B' | 'C' | 'D' | 'F'
        - `category_scores` object
          - `structure` integer
          - `schema` integer
          - `content` integer
          - `freshness` integer
          - `technical` integer
        - `issues` CategorizedIssues: Issues grouped by severity level
          - `critical` Issue[], required
            - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
            - `message` string, required: Human-readable issue description
            - `impact` string, required: Impact level of the issue
          - `warnings` Issue[], required
            - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
            - `message` string, required: Human-readable issue description
            - `impact` string, required: Impact level of the issue
          - `info` Issue[], required
            - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
            - `message` string, required: Human-readable issue description
            - `impact` string, required: Impact level of the issue
        - `signals` object: Citation signals by category
          - `structure` string[]
          - `schema` string[]
          - `content` string[]
          - `freshness` string[]
          - `technical` string[]
        - `recommendations` string[]
        - `meta` object
      - `issues` CategorizedIssues, required: Issues grouped by severity level
        - `critical` Issue[], required
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
        - `warnings` Issue[], required
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
        - `info` Issue[], required
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
      - `signals` object, required: Detected AEO signals
        - `qa_patterns` object[]
          - `question` string
          - `source` string
        - `direct_snippets` object[]
          - `text` string
          - `words` integer
          - `source` string
        - `entity_definitions` object[]
          - `term` string
          - `pattern` string
        - `source_citations` object[]
          - `text` string
          - `type` string
          - `source` string
        - `statistics` object[]
          - `text` string
          - `type` string
        - `summary_blocks_count` integer
        - `has_faq_content` boolean
        - `has_howto_content` boolean
        - `has_glossary` boolean
        - `has_organization_schema` boolean
        - `has_article_schema` boolean
        - `has_author_schema` boolean
        - `is_article_page` boolean
        - `clickbait_signals` object[]
          - `text` string
          - `pattern` string
        - `freshness_signals` object[]
          - `text` string
          - `type` string
        - `topical_authority` object, nullable
          - `word_count` integer
          - `heading_count` integer
          - `internal_links` integer
          - `external_links` integer
          - `has_table_of_contents` boolean
      - `recommendations` string[], required
      - `agent_readiness` object, required: AI agent readiness signals (llms.txt, robots.txt, SSR detection, WebMCP)
        - `llms_txt` object
          - `present` boolean
          - `valid` boolean
          - `issues` string[]
        - `llms_full_txt` object
          - `present` boolean
        - `robots_txt` object
          - `ai_policies` string[]
          - `crawlers_blocked` string[]
          - `crawlers_allowed` string[]
          - `crawlers_unknown` string[]
        - `rendering` object
          - `is_server_rendered` boolean
          - `signals` string[]
        - `webmcp` object
          - `is_ready` boolean
          - `signals` string[]
    - Error
      - `error` string, required: Error message
  - `readability` union, required: Readability analysis result, or {"error": "..."} if analysis failed
    - ReadabilityResult: Content readability analysis using Flesch Reading Ease. Grade thresholds: A>=60 (easy/web-friendly), B>=50, C>=30, D>=10, F<10.
      - `url` string: The analyzed URL
      - `cached` boolean
      - `score` number, required: Flesch Reading Ease score (0-100, higher = easier). Rounded to 1 decimal place.
      - `grade` 'A' | 'B' | 'C' | 'D' | 'F', required
      - `flesch_kincaid_grade_level` number, required: US school grade level equivalent. Rounded to 1 decimal place.
      - `reading_time_minutes` number, required: Estimated reading time in minutes
      - `word_count` integer, required: Total word count
      - `sentence_count` integer, required: Total sentence count
      - `difficult_words` integer, required: Count of difficult/uncommon words
    - Error
      - `error` string, required: Error message
  - `wcag` union, required: WCAG analysis result, or {"error": "..."} if analysis failed
    - WCAGResult: WCAG 2.1 Level A accessibility analysis. Automated static HTML checks cover approximately 30-40% of WCAG 2.1 Level A criteria. Grade thresholds: A>=90, B>=80, C>=70, D>=60, F<60.
      - `url` string
      - `cached` boolean
      - `score` integer, required: Accessibility score (0-100)
      - `grade` 'A' | 'B' | 'C' | 'D' | 'F', required
      - `issues` CategorizedIssues, required: Issues grouped by severity level
        - `critical` Issue[], required
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
        - `warnings` Issue[], required
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
        - `info` Issue[], required
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
      - `meta` object, required: Accessibility metadata
        - `images_total` integer
        - `images_missing_alt` integer
        - `inputs_total` integer
        - `inputs_missing_label` integer
        - `heading_count` integer
        - `heading_skips` integer
        - `has_page_title` boolean
        - `html_lang` string
        - `links_total` integer
        - `links_empty` integer
        - `buttons_total` integer
        - `buttons_empty` integer
        - `aria_role_elements` integer
        - `aria_missing_names` integer
        - `duplicate_ids` integer
        - `has_skip_nav` boolean
        - `tables_total` integer
        - `tables_missing_headers` integer
        - `has_landmarks` boolean
        - `landmarks` object
          - `main` boolean
          - `nav` boolean
          - `header` boolean
          - `footer` boolean
        - `viewport_blocks_zoom` boolean
        - `media_total` integer
        - `media_autoplay` integer
        - `positive_tabindex` integer
      - `recommendations` string[], required
      - `coverage_note` string, required: Disclaimer about automated coverage limitations
    - Error
      - `error` string, required: Error message
  - `garm` union, required: GARM analysis result, or {"error": "..."} if analysis failed
    - GARMResult: GARM Brand Suitability Framework analysis. Grade thresholds: A>=80, B>=60, C>=40, D>=20, F<20. Higher score = safer for advertising.
      - `url` string, nullable: The analyzed URL, or null if category was provided directly
      - `category` string: LLMSE content category used for GARM mapping
      - `sentiment` 'Bad' | 'Neutral' | 'Good': Content sentiment used for score adjustment
      - `score` integer, required: Brand safety score (0-100, higher = safer)
      - `grade` 'A' | 'B' | 'C' | 'D' | 'F', required
      - `garm_category` string, nullable, required: Matched GARM category name, or null if brand-safe
      - `risk_level` 'none' | 'low' | 'medium' | 'high' | 'floor', required: GARM risk level
      - `is_floor` boolean, required: Whether this category is not suitable for any advertising
      - `issues` CategorizedIssues, required: Issues grouped by severity level
        - `critical` Issue[], required
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
        - `warnings` Issue[], required
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
        - `info` Issue[], required
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
      - `recommendations` string[], required
    - Error
      - `error` string, required: Error message
  - `ai_disclosure` union, required: AI Disclosure analysis result, or {"error": "..."} if analysis failed
    - AIDisclosureResult: AI Disclosure compliance analysis for EU AI Act readiness. All checks are conditional — issues only raised when AI/chatbot technology is detected. Non-AI sites score 100/A. Grade thresholds: A>=90, B>=80, C>=70, D>=60, F<60.
      - `url` string
      - `cached` boolean
      - `score` integer, required: AI Disclosure score (0-100). Deduction-based: chatbot unlabeled -15, no disclosure -5, no policy -5, vague disclosure -1.
      - `grade` 'A' | 'B' | 'C' | 'D' | 'F', required
      - `issues` CategorizedIssues, required: Issues grouped by severity level
        - `critical` Issue[], required
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
        - `warnings` Issue[], required
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
        - `info` Issue[], required
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
      - `meta` object, required: Detected AI disclosure metadata
        - `has_explicit_disclosure` boolean: Strong AI disclosure statement found (e.g., 'AI-generated', 'powered by AI')
        - `has_vague_disclosure` boolean: Weaker disclosure language found (e.g., 'AI assistance', 'machine-generated')
        - `has_policy_link` boolean: Link to AI usage policy page found
        - `has_chatbot_tech` boolean: Chatbot/AI technology detected (e.g., Intercom, Drift, ChatGPT Widget)
        - `has_chatbot_label` boolean: AI attribution found on chatbot widget (aria-label, title, or visible text)
        - `detected_chatbot_apps` string[]: Names of detected chatbot/AI technologies
        - `disclosure_texts` string[]: Matched disclosure text snippets (up to 120 chars each)
        - `policy_urls` string[]: URLs of detected AI policy pages
      - `recommendations` string[], required
      - `signals` object, required: Summary of detected positive signals
        - `disclosure` string[]
        - `policy_links` string[]
        - `chatbot_apps` string[]
    - Error
      - `error` string, required: Error message
  - `privacy` union, required: Privacy compliance analysis result, or {"error": "..."} if analysis failed
    - PrivacyResult: Privacy compliance analysis evaluating cookie consent, policy links, tracker scripts, and CCPA signals. Grade thresholds: A>=90, B>=80, C>=70, D>=60, F<60.
      - `url` string
      - `cached` boolean
      - `score` integer, required: Privacy compliance score (0-100). Deduction-based: no consent banner -15, no privacy policy -15, no cookie policy -5, no do-not-sell -5, excessive trackers -5, scripts not consent-gated -1, no data processing text -1.
      - `grade` 'A' | 'B' | 'C' | 'D' | 'F', required
      - `issues` CategorizedIssues, required: Issues grouped by severity level
        - `critical` Issue[], required
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
        - `warnings` Issue[], required
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
        - `info` Issue[], required
          - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
          - `message` string, required: Human-readable issue description
          - `impact` string, required: Impact level of the issue
      - `meta` object, required: Detected privacy compliance metadata
        - `has_consent_banner` boolean: Cookie consent banner or CMP detected
        - `has_privacy_policy` boolean: Privacy policy link found
        - `has_cookie_policy` boolean: Separate cookie policy link found
        - `has_do_not_sell` boolean: CCPA 'Do Not Sell' or 'Do Not Share' link found
        - `has_consent_gated_scripts` boolean: Tracker scripts behind consent gate detected
        - `has_data_processing_text` boolean: Data processing disclosure text found
        - `tracker_count` integer: Number of third-party tracker scripts detected
        - `tracker_domains` string[]: Domains of detected tracker scripts
        - `consent_banner_type` string: Type of consent banner detected (CMP domain or 'banner-element')
      - `recommendations` string[], required
      - `signals` object, required: Summary of detected privacy signals
        - `consent_banner_type` string
        - `privacy_policy_urls` string[]
        - `cookie_policy_urls` string[]
        - `do_not_sell_urls` string[]
        - `tracker_domains` string[]
        - `data_processing_texts` string[]
    - Error
      - `error` string, required: Error message
  - `advertisers` object, required: Matched advertisers (up to 3)
    - `matches` AdvertiserMatch[], required
      - `advertiser` Advertiser, required: An advertiser with targeting preferences
        - `id` string, required: Unique advertiser identifier
        - `name` string, required: Advertiser display name
        - `categories` string[], required: Target categories
        - `age_groups` string[], required: Target age groups
        - `genders` string[], required: Target genders
        - `sentiments` string[], required: Acceptable sentiment values
        - `bid_cpm` number, required: CPM bid amount in dollars
        - `creative_url` string, required: URL to ad creative
        - `landing_url` string, required: Click destination URL
        - `active` boolean, required: Whether advertiser is currently active
      - `score` number, required: Total match score (category +10, age +5, gender +3, sentiment +2, CPM tiebreaker)
      - `category_match` boolean, required
      - `age_match` boolean, required
      - `gender_match` boolean, required
      - `sentiment_match` boolean, required
    - `match_count` integer, required
  - `similar_sites` object, required: Related sites from the same category (up to 10)
    - `sites` string[]
    - `total_in_category` integer

## Other responses

- `400`: Invalid request
- `429`: Rate limited

---

[API](https://skmtc.dev/llmse/apis/llmse-api.md) · [All operations](https://skmtc.dev/llmse/apis/llmse-api/llms.txt) · [OpenAPI document](https://skmtc.dev/llmse/apis/llmse-api/revisions/8aedf67208e4?raw)
