Pomo SEO Analysis API

The SEO Analysis API from Pomo — 14 operation(s) for seo analysis.

Business capability
Digital Marketing Management BC-400.60

Operations 14

POST /api/seo/analyze Create Seo Analysis #
GET /api/seo/analysis/{analysis_id} Get Seo Analysis #
GET /api/seo/analysis/{analysis_id}/score-breakdown/{category} Get Score Breakdown #
GET /api/seo/company/{company_profile_id}/analyses List Seo Analyses #
GET /api/seo/analysis/{analysis_id}/recommendations Get Seo Recommendations #
PUT /api/seo/recommendation/{rec_id}/dismiss Dismiss Recommendation #
PUT /api/seo/recommendation/{rec_id}/complete Complete Recommendation #
GET /api/seo/analysis/{analysis_id}/pages Get Analysis Pages #
GET /api/seo/company/{company_profile_id}/latest Get Latest Seo Analysis #
POST /api/seo/analysis/{analysis_id}/recalculate/{category} Recalculate Category Score #
POST /api/seo/analysis/{analysis_id}/recalculate-all Recalculate All Scores #
GET /api/seo/analysis/{analysis_id}/debug/{category} Get Category Debug Info #
POST /api/seo/admin/cleanup-stuck Cleanup Stuck Analyses Endpoint #
POST /api/seo/analysis/{analysis_id}/pages/{page_id}/compute-content-quality Compute Content Quality #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/pomo-seo-analysis-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

pomo-seo-analysis-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: GPT Backend SEO Analysis API
  version: 0.1.0
servers:
- url: https://api.usepomo.ai
  description: Base URL declared by the provider in apis.yml (roadmap#122).
tags:
- name: SEO Analysis
paths:
  /api/seo/analyze:
    post:
      tags:
      - SEO Analysis
      summary: Create Seo Analysis
      description: "Create a new SEO analysis for a company profile.\n\nThis endpoint:\n1. Validates user has access to the company profile\n2. Validates workflow prerequisite (current_step >= 2)\n3. Creates the SEO analysis record with status='pending'\n4. Launches background task via TaskSupervisor\n5. Returns the analysis record immediately\n\nFrontend should then:\n- Poll GET /api/seo/analysis/{analysis_id} for status updates\n\nThe analysis process includes:\n- Collecting SEO data from crawled pages\n- Fetching Core Web Vitals from PageSpeed API\n- Calculating scores across multiple categories\n- Generating actionable recommendations\n\nPrerequisites:\n- Workflow must be at Step 2 or later (current_step >= 2)\n- This ensures web crawl inventory data is available for analysis\n\nArgs:\n    request_data: SEOAnalysisCreate with company_profile_id and primary_url\n    current_user: Authenticated user\n    db: Database session\n\nReturns:\n    SEOAnalysisResponse with analysis record (status='pending')\n\nRaises:\n    HTTPException: 404 if company profile not found, 403 if access denied,\n                  400 if workflow prerequisite not met"
      operationId: create_seo_analysis_api_seo_analyze_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SEOAnalysisCreate'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SEOAnalysisResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - HTTPBearer: []
  /api/seo/analysis/{analysis_id}:
    get:
      tags:
      - SEO Analysis
      summary: Get Seo Analysis
      description: "Get detailed SEO analysis by ID.\n\nReturns complete analysis data including all scores, metrics,\nand metadata. Frontend can poll this endpoint for status updates.\n\nArgs:\n    analysis_id: UUID of the analysis\n    current_user: Authenticated user\n    db: Database session\n\nReturns:\n    SEOAnalysisResponse with full analysis details\n\nRaises:\n    HTTPException: 404 if not found, 403 if access denied"
      operationId: get_seo_analysis_api_seo_analysis__analysis_id__get
      security:
      - HTTPBearer: []
      parameters:
      - name: analysis_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Analysis Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SEOAnalysisResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/seo/analysis/{analysis_id}/score-breakdown/{category}:
    get:
      tags:
      - SEO Analysis
      summary: Get Score Breakdown
      description: "Get detailed score breakdown for a specific SEO category.\n\nThis endpoint provides a granular breakdown of how a specific score was calculated,\nincluding individual checks, points awarded, and explanations for each component.\n\nCategories:\n- technical: Technical SEO (HTTPS, robots.txt, sitemap, canonical, viewport, etc.)\n- on_page: On-page SEO (title, description, headings, word count)\n- structured_data: Schema markup and structured data\n- images: Image optimization (alt text, lazy loading, responsive images)\n- social_meta: Social media meta tags (Open Graph, Twitter Cards)\n\nArgs:\n    analysis_id: UUID of the analysis\n    category: Score category (technical|on_page|structured_data|images|social_meta)\n    current_user: Authenticated user\n    db: Database session\n\nReturns:\n    ScoreBreakdownResponse with detailed scoring breakdown\n\nRaises:\n    HTTPException: 404 if not found, 400 if invalid category, 403 if access denied"
      operationId: get_score_breakdown_api_seo_analysis__analysis_id__score_breakdown__category__get
      security:
      - HTTPBearer: []
      parameters:
      - name: analysis_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Analysis Id
      - name: category
        in: path
        required: true
        schema:
          type: string
          title: Category
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScoreBreakdownResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/seo/company/{company_profile_id}/analyses:
    get:
      tags:
      - SEO Analysis
      summary: List Seo Analyses
      description: "List all SEO analyses for a company profile with pagination.\n\nReturns analyses in reverse chronological order (newest first).\nEach item contains summary data suitable for display in lists/tables.\n\nArgs:\n    company_profile_id: UUID of the company profile\n    skip: Number of records to skip (for pagination)\n    limit: Number of records to return (default 50, max 100)\n    current_user: Authenticated user\n    db: Database session\n\nReturns:\n    List[SEOAnalysisListResponse] with paginated analyses\n\nRaises:\n    HTTPException: 404 if company profile not found, 403 if access denied"
      operationId: list_seo_analyses_api_seo_company__company_profile_id__analyses_get
      security:
      - HTTPBearer: []
      parameters:
      - name: company_profile_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Company Profile Id
      - name: skip
        in: query
        required: false
        schema:
          type: integer
          minimum: 0
          description: Number of records to skip
          default: 0
          title: Skip
        description: Number of records to skip
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          maximum: 100
          minimum: 1
          description: Number of records to return (max 100)
          default: 50
          title: Limit
        description: Number of records to return (max 100)
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SEOAnalysisListResponse'
                title: Response List Seo Analyses Api Seo Company  Company Profile Id  Analyses Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/seo/analysis/{analysis_id}/recommendations:
    get:
      tags:
      - SEO Analysis
      summary: Get Seo Recommendations
      description: "Get SEO recommendations for an analysis with optional filtering.\n\nRecommendations are actionable suggestions for improving SEO scores.\nEach includes impact assessment, effort estimation, and fix guidance.\n\nFiltering:\n- priority: critical|important|nice_to_have\n- category: technical|on_page|performance|structured_data|images|social\n- include_dismissed: Show dismissed recommendations (default: false)\n\nArgs:\n    analysis_id: UUID of the analysis\n    priority: Optional priority filter\n    category: Optional category filter\n    include_dismissed: Include dismissed recommendations\n    current_user: Authenticated user\n    db: Database session\n\nReturns:\n    List[SEORecommendationResponse] with filtered recommendations\n\nRaises:\n    HTTPException: 404 if analysis not found, 403 if access denied"
      operationId: get_seo_recommendations_api_seo_analysis__analysis_id__recommendations_get
      security:
      - HTTPBearer: []
      parameters:
      - name: analysis_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Analysis Id
      - name: priority
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Filter by priority (critical, important, nice_to_have)
          title: Priority
        description: Filter by priority (critical, important, nice_to_have)
      - name: category
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Filter by category (technical, on_page, performance, structured_data, images, social)
          title: Category
        description: Filter by category (technical, on_page, performance, structured_data, images, social)
      - name: include_dismissed
        in: query
        required: false
        schema:
          type: boolean
          description: Include dismissed recommendations
          default: false
          title: Include Dismissed
        description: Include dismissed recommendations
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SEORecommendationResponse'
                title: Response Get Seo Recommendations Api Seo Analysis  Analysis Id  Recommendations Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/seo/recommendation/{rec_id}/dismiss:
    put:
      tags:
      - SEO Analysis
      summary: Dismiss Recommendation
      description: "Dismiss an SEO recommendation.\n\nMarks a recommendation as dismissed, optionally adding user notes.\nDismissed recommendations are excluded from default queries unless\nexplicitly requested via include_dismissed=true.\n\nArgs:\n    rec_id: UUID of the recommendation\n    update_data: SEORecommendationUpdate with is_dismissed=true and optional user_notes\n    current_user: Authenticated user\n    db: Database session\n\nReturns:\n    SEORecommendationResponse with updated recommendation\n\nRaises:\n    HTTPException: 404 if not found, 403 if access denied"
      operationId: dismiss_recommendation_api_seo_recommendation__rec_id__dismiss_put
      security:
      - HTTPBearer: []
      parameters:
      - name: rec_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Rec Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SEORecommendationUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SEORecommendationResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/seo/recommendation/{rec_id}/complete:
    put:
      tags:
      - SEO Analysis
      summary: Complete Recommendation
      description: "Mark an SEO recommendation as completed.\n\nRecords that the user has implemented the recommended fix.\nOptionally include notes about the implementation.\n\nArgs:\n    rec_id: UUID of the recommendation\n    update_data: SEORecommendationUpdate with is_completed=true and optional user_notes\n    current_user: Authenticated user\n    db: Database session\n\nReturns:\n    SEORecommendationResponse with updated recommendation\n\nRaises:\n    HTTPException: 404 if not found, 403 if access denied"
      operationId: complete_recommendation_api_seo_recommendation__rec_id__complete_put
      security:
      - HTTPBearer: []
      parameters:
      - name: rec_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Rec Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SEORecommendationUpdate'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SEORecommendationResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/seo/analysis/{analysis_id}/pages:
    get:
      tags:
      - SEO Analysis
      summary: Get Analysis Pages
      description: "Get per-page SEO analysis with screenshots for a specific analysis.\n\nThis endpoint returns detailed SEO metrics for each page analyzed,\nincluding:\n- Page URL and title\n- SEO issues (critical and important)\n- Content metrics (word count, links, images)\n- Screenshot URL from the crawler\n- Schema markup and social meta presence\n\nArgs:\n    analysis_id: UUID of the analysis\n    current_user: Authenticated user\n    db: Database session\n\nReturns:\n    List of SEOPageResponse with per-page details and screenshots\n\nRaises:\n    HTTPException: 404 if analysis not found, 403 if access denied"
      operationId: get_analysis_pages_api_seo_analysis__analysis_id__pages_get
      security:
      - HTTPBearer: []
      parameters:
      - name: analysis_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Analysis Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SEOPageResponse'
                title: Response Get Analysis Pages Api Seo Analysis  Analysis Id  Pages Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/seo/company/{company_profile_id}/latest:
    get:
      tags:
      - SEO Analysis
      summary: Get Latest Seo Analysis
      description: "Get the most recent SEO analysis for a company profile.\n\nReturns the latest completed or in-progress analysis.\nUseful for dashboards and quick status checks.\n\nArgs:\n    company_profile_id: UUID of the company profile\n    current_user: Authenticated user\n    db: Database session\n\nReturns:\n    SEOAnalysisResponse with latest analysis\n\nRaises:\n    HTTPException: 404 if no analysis found or company profile not found, 403 if access denied"
      operationId: get_latest_seo_analysis_api_seo_company__company_profile_id__latest_get
      security:
      - HTTPBearer: []
      parameters:
      - name: company_profile_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Company Profile Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SEOAnalysisResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/seo/analysis/{analysis_id}/recalculate/{category}:
    post:
      tags:
      - SEO Analysis
      summary: Recalculate Category Score
      description: "Recalculate score for a specific SEO category.\n\nThis endpoint recalculates the score for a single category using the stored\nanalysis data. Useful for fixing scoring issues without re-running the entire\nanalysis.\n\nValid categories:\n- technical: Technical SEO score\n- on_page: On-page SEO score\n- structured_data: Schema markup score\n- images: Image optimization score\n- social_meta: Social media meta tags score\n- performance: Performance score (Core Web Vitals)\n\nArgs:\n    analysis_id: UUID of the analysis\n    category: Category to recalculate\n    current_user: Authenticated user\n    db: Database session\n\nReturns:\n    dict with recalculated category score\n\nRaises:\n    HTTPException: 404 if not found, 400 if invalid category, 403 if access denied"
      operationId: recalculate_category_score_api_seo_analysis__analysis_id__recalculate__category__post
      security:
      - HTTPBearer: []
      parameters:
      - name: analysis_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Analysis Id
      - name: category
        in: path
        required: true
        schema:
          type: string
          title: Category
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Recalculate Category Score Api Seo Analysis  Analysis Id  Recalculate  Category  Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/seo/analysis/{analysis_id}/recalculate-all:
    post:
      tags:
      - SEO Analysis
      summary: Recalculate All Scores
      description: "Recalculate all SEO scores for an analysis.\n\nThis endpoint recalculates all category scores and the overall score using the\nstored analysis data. Useful for fixing scoring issues after algorithm updates\nor bug fixes.\n\nArgs:\n    analysis_id: UUID of the analysis\n    current_user: Authenticated user\n    db: Database session\n\nReturns:\n    dict with all recalculated scores\n\nRaises:\n    HTTPException: 404 if not found, 403 if access denied"
      operationId: recalculate_all_scores_api_seo_analysis__analysis_id__recalculate_all_post
      security:
      - HTTPBearer: []
      parameters:
      - name: analysis_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Analysis Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Recalculate All Scores Api Seo Analysis  Analysis Id  Recalculate All Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/seo/analysis/{analysis_id}/debug/{category}:
    get:
      tags:
      - SEO Analysis
      summary: Get Category Debug Info
      description: "Get detailed debug information for a specific SEO category.\n\nThis endpoint provides comprehensive debugging information including:\n- Current score\n- Input data used for scoring\n- Detailed breakdown of how the score was calculated\n- Validation issues if any\n\nValid categories:\n- technical: Technical SEO\n- on_page: On-page SEO\n- structured_data: Schema markup\n- images: Image optimization\n- social_meta: Social media meta tags\n\nArgs:\n    analysis_id: UUID of the analysis\n    category: Category to debug\n    current_user: Authenticated user\n    db: Database session\n\nReturns:\n    dict with detailed debug information\n\nRaises:\n    HTTPException: 404 if not found, 400 if invalid category, 403 if access denied"
      operationId: get_category_debug_info_api_seo_analysis__analysis_id__debug__category__get
      security:
      - HTTPBearer: []
      parameters:
      - name: analysis_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Analysis Id
      - name: category
        in: path
        required: true
        schema:
          type: string
          title: Category
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Get Category Debug Info Api Seo Analysis  Analysis Id  Debug  Category  Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/seo/admin/cleanup-stuck:
    post:
      tags:
      - SEO Analysis
      summary: Cleanup Stuck Analyses Endpoint
      description: "Admin endpoint to cleanup stuck SEO analyses.\n\nThis endpoint allows administrators to manually trigger cleanup of stuck analyses\nthat are in processing/pending state for too long.\n\nRequires authentication. Typically used for:\n- Manual recovery after server crashes\n- Monitoring/alerting integrations\n- Debugging stuck analyses\n\nArgs:\n    threshold_minutes: Minutes before considering an analysis stuck (5-1440, default: 60)\n    dry_run: If true, only report stuck analyses without marking them as failed\n    current_user: Authenticated user\n    db: Database session\n\nReturns:\n    dict: Summary of cleanup operation including count and details"
      operationId: cleanup_stuck_analyses_endpoint_api_seo_admin_cleanup_stuck_post
      security:
      - HTTPBearer: []
      parameters:
      - name: threshold_minutes
        in: query
        required: false
        schema:
          type: integer
          maximum: 1440
          minimum: 5
          description: Minutes before considering analysis stuck
          default: 60
          title: Threshold Minutes
        description: Minutes before considering analysis stuck
      - name: dry_run
        in: query
        required: false
        schema:
          type: boolean
          description: If true, only report without fixing
          default: false
          title: Dry Run
        description: If true, only report without fixing
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Cleanup Stuck Analyses Endpoint Api Seo Admin Cleanup Stuck Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/seo/analysis/{analysis_id}/pages/{page_id}/compute-content-quality:
    post:
      tags:
      - SEO Analysis
      summary: Compute Content Quality
      description: "Compute content quality metrics for a specific page on-demand.\n\nThis endpoint allows computing or recomputing content quality metrics\n(readability, E-E-A-T, originality) for a specific page. This is useful\nwhen content quality was skipped during initial analysis for performance\nreasons, or when you want to refresh the metrics after content updates.\n\nContent quality metrics include:\n- Readability score (Flesch Reading Ease)\n- Readability grade (Flesch-Kincaid Grade Level)\n- E-E-A-T signals score\n- Content originality score\n- AI-generated content detection\n- Duplicate content detection\n\nArgs:\n    analysis_id: UUID of the SEO analysis\n    page_id: UUID of the specific page\n    current_user: Authenticated user\n    db: Database session\n\nReturns:\n    SEOPageResponse with updated content quality metrics\n\nRaises:\n    HTTPException: 404 if analysis/page not found, 403 if access denied"
      operationId: compute_content_quality_api_seo_analysis__analysis_id__pages__page_id__compute_content_quality_post
      security:
      - HTTPBearer: []
      parameters:
      - name: analysis_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Analysis Id
      - name: page_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Page Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SEOPageResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    SEORecommendationUpdate:
      properties:
        is_dismissed:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Is Dismissed
        is_completed:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Is Completed
        user_notes:
          anyOf:
          - type: string
            maxLength: 1000
          - type: 'null'
          title: User Notes
      type: object
      title: SEORecommendationUpdate
      description: 'Schema for updating SEO recommendation user actions.

        Allows marking recommendations as dismissed or completed.'
    SEOAnalysisResponse:
      properties:
        id:
          anyOf:
          - type: string
          - type: 'null'
          title: Id
        company_profile_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Company Profile Id
        user_id:
          anyOf:
          - type: string
          - type: 'null'
          title: User Id
        workflow_id:
          anyOf:
          - type: string
            format: uuid
          - type: 'null'
          title: Workflow Id
        primary_url:
          type: string
          title: Primary Url
        domain:
          type: string
          title: Domain
        status:
          type: string
          title: Status
        error_message:
          anyOf:
          - type: string
          - type: 'null'
          title: Error Message
        overall_score:
          anyOf:
          - type: number
            maximum: 100.0
            minimum: 0.0
          - type: 'null'
          title: Overall Score
          description: Overall SEO score (0-100)
        previous_score:
          anyOf:
          - type: number
            maximum: 100.0
            minimum: 0.0
          - type: 'null'
          title: Previous Score
          description: Previous overall score (0-100)
        score_change:
          anyOf:
          - type: number
            maximum: 100.0
            minimum: -100.0
          - type: 'null'
          title: Score Change
          description: Score change from previous analysis
        technical_seo_score:
          anyOf:
          - type: number
            maximum: 100.0
            minimum: 0.0
          - type: 'null'
          title: Technical Seo Score
          description: Technical SEO score (0-100)
        on_page_seo_score:
          anyOf:
          - type: number
            maximum: 100.0
            minimum: 0.0
          - type: 'null'
          title: On Page Seo Score
          description: On-page SEO score (0-100)
        performance_score:
          anyOf:
          - type: number
            maximum: 100.0
            minimum: 0.0
          - type: 'null'
          title: Performance Score
          description: Performance score (0-100)
        structured_data_score:
          anyOf:
          - type: number
            maximum: 100.0
            minimum: 0.0
          - type: 'null'
          title: Structured Data Score
          description: Structured data score (0-100)
        image_optimization_score:
          anyOf:
          - type: number
            maximum: 100.0
            minimum: 0.0
          - type: 'null'
          title: Image Optimization Score
          description: Image optimization score (0-100)
        social_meta_score:
          anyOf:
          - type: number
            maximum: 100.0
            minimum: 0.0
          - type: 'null'
          title: Social Meta Score
          description: Social meta tags score (0-100)
        core_web_vitals:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Core Web Vitals
        technical_seo_data:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Technical Seo Data
        on_page_seo_data:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: On Page Seo Data
        image_optimization_data:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Image Optimization Data
        structured_data_analysis:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Structured Data Analysis
        social_meta_data:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Social Meta Data
        analysis_scope:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Analysis Scope
        pages_analyzed:
          anyOf:
          - type: integer
          - type: 'null'
          title: Pages Analyzed
          default: 0
        pages_with_issues:
          anyOf:
          - type: integer
          - type: 'null'
          title: Pages With Issues
          default: 0
        critical_issues_count:
          anyOf:
          - type: integer
          - type: 'null'
          title: Critical Issues Count
          default: 0
        important_issues_count:
          anyOf:
          - type: integer
          - type: 'null'
          title: Important Issues Count
          default: 0
        nice_to_have_count:
          anyOf:
          - type: integer
          - type: 'null'
          title: Nice To Have Count
          default: 0
        competitive_position:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Competitive Position
        started_at:
          anyOf:
          - type: string
          - type: 'null'
          title: Started At
        completed_at:
          anyOf:
          - type: string
          - type: 'null'
          title: Completed At
        created_at:
          anyOf:
          - type: string
          - type: 'null'
          title: Created At
        updated_at:
          anyOf:
          - type: string
          - type: 'null'
          title: Updated At
      type: object
      required:
      - id
      - company_profile_id
      - user_id
      - primary_url
      - domain
      - status
      - created_at
      title: SEOAnalysisResponse
      description: 'Response schema for SEO analysis.

        Includes all analysis data, scores, and metadata.

        Follows pattern from campaigns/email.py EmailCampaignResponse'
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
     

# --- truncated at 32 KB (47 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/pomo/refs/heads/main/openapi/pomo-seo-analysis-api-openapi.yml