---
title: "Get E-E-A-T analysis results for a guide's competitors"
method: GET
path: "/api/v1/eeat-competitors"
tags: ["v1", "In-guide features"]
---

# Get E-E-A-T analysis results for a guide's competitors

`GET /api/v1/eeat-competitors`

## Request

- Base URL: `https://app.serpmantics.com` (the document declares no server; this is the origin it was published from)
- URL: `https://app.serpmantics.com/api/v1/eeat-competitors`
- Auth: HTTP bearer

Retrieves the E-E-A-T analysis results for the top competitors of a guide.
Poll this endpoint until `pending` is `0` to know when the full analysis is complete.
Individual competitor results are available as soon as their `status` is `done`.

## Query parameters

- `guideId` string, required

## Response `200`

Competitor analysis successfully retrieved

- object
  - `success` boolean
  - `data` object
    - `total` integer: Total number of competitors being analyzed
    - `completed` integer: Number of competitors whose analysis is done
    - `pending` integer: Number of competitors still being analyzed
    - `averages` object: Average scores across completed competitors (only when at least one is done)
      - `scores` object
        - `experience` number
        - `expertise` number
        - `authoritativeness` number
        - `trustworthiness` number
      - `overall` number
    - `competitors` object[]: List of competitor analyses (one per SERP result)
      - `competitor_position` integer: Position of the competitor in the SERP. snake_case, like every field of these items: this handler serves the backend body verbatim (`data: response.data`), and each item is built by `to_dict()`, which emits the dataclass field names. Only the envelope around them (`total`, `completed`, `pending`, `averages`, `competitors`) is a Python literal, hence its plain names.
      - `competitor_url` string: URL of the competitor's page
      - `status` 'pending' | 'started' | 'analyzing' | 'done' | 'failed': Status of the competitor's analysis
      - `article_context` object: Detected context of the competitor's article (only when status is `done`). snake_case at BOTH levels, the object and its `primary_purpose`.
        - `type` string
        - `niche` string
        - `primary_purpose` string
      - `article` object: Scores of the competitor's article (only when status is `done`)
        - `scores` object
          - `experience` number
          - `expertise` number
          - `authoritativeness` number
          - `trustworthiness` number
        - `overall` number
      - `analysis` object: Detailed assessment per dimension (only when status is `done`)
        - `experience` object
          - `assessment` string
        - `expertise` object
          - `assessment` string
        - `authoritativeness` object
          - `assessment` string
        - `trustworthiness` object
          - `assessment` string
      - `summary` object[]: List of strengths (only when status is `done`)
        - `title` string
        - `detail` string
      - `suggestions` string[]: List of improvement suggestions (only when status is `done`)

## Other responses

- `401`: Unauthorized - Invalid API key or user doesn't have access to the guide
- `404`: Guide not found
- `410`: Guide expired. Guides are locked 180 days after their creation, because the Google results they are built on are no longer representative. The body is `{ success: false, error: "Guide expired", expiresAt: "<ISO 8601 expiry date>" }`. Definitive: do not retry, create a new guide on the same keyword. No token is consumed by this refusal.
- `500`: Internal server error

---

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