---
title: "Get Competitor Matrix"
method: GET
path: "/api/v1/geo/experiments/{experiment_id}/competitor-matrix"
tags: ["geo-monitoring", "geo-dashboard"]
---

# Get Competitor Matrix

`GET /api/v1/geo/experiments/{experiment_id}/competitor-matrix`

## Path parameters

- `experiment_id` string, uuid, required

## Query parameters

- `period` '7d' | '14d' | '30d' | '90d'

## Response `200`

Successful Response

- CompetitorMatrixResponse
  - `period` string, required
  - `platforms` GeoAIPlatformRead[], required
    - `id` string, uuid, required
    - `name` string, required
    - `display_name` string, required
    - `icon_name` string, nullable, required
  - `rows` CompetitorMatrixRow[], required
    - `competitor_id` string, uuid, nullable
    - `name` string, required
    - `is_self` boolean, required
    - `cells` CompetitorMatrixCell[], required
      - `platform_id` string, uuid, required
      - `platform_name` string, required
      - `avg_position` number, nullable
      - `appearances` integer
      - `win_count` integer
      - `available` boolean
      - `planned_count` integer
      - `succeeded_count` integer
      - `failed_count` integer
  - `scan` DashboardScanMetadata — Distinguishes the latest attempt from the scan supplying dashboard data.
    - `latest_attempt` MonitoringRunCoverage — Lifecycle and provider coverage for one monitoring attempt.
      - `run_id` string, uuid, required
      - `status` string, required
      - `total_tasks` integer, required
      - `completed_tasks` integer, required
      - `successful_tasks` integer, required
      - `failed_tasks` integer, required
      - `started_at` string, date-time, nullable, required
      - `completed_at` string, date-time, nullable, required
      - `created_at` string, date-time, required
      - `providers` MonitoringProviderCoverage[]
        - `platform_id` string, uuid, required
        - `platform_name` string, required
        - `planned_count` integer, required
        - `succeeded_count` integer, required
        - `failed_count` integer, required
        - `pending_count` integer, required
        - `total_attempts` integer, required
        - `failure_codes` MonitoringFailureCode[]
        - `tasks` MonitoringTaskCoverage[]
          - `task_id` string, uuid, required
          - `prompt_id` string, uuid, required
          - `platform_id` string, uuid, required
          - `platform_name` string, required
          - `run_index` integer, required
          - `status` 'queued' | 'running' | 'retry_wait' | 'succeeded' | 'terminal_failed', required
          - `attempt_count` integer, required
          - `failure_code` 'quota_exhausted' | 'auth_failed' | 'rate_limited' | 'timeout' | 'provider_unavailable' | 'invalid_model' | 'malformed_response' | 'retrieval_not_observed' | 'unknown' — Stable provider failure taxonomy persisted on monitoring tasks.
          - `requested_model` string, nullable
          - `resolved_model` string, required
          - `adapter` string, required
          - `retrieval_policy` string, required
          - `started_at` string, date-time, nullable
          - `completed_at` string, date-time, nullable
          - `last_attempt_at` string, date-time, nullable
    - `data_scan` MonitoringRunCoverage — Lifecycle and provider coverage for one monitoring attempt.
      - `run_id` string, uuid, required
      - `status` string, required
      - `total_tasks` integer, required
      - `completed_tasks` integer, required
      - `successful_tasks` integer, required
      - `failed_tasks` integer, required
      - `started_at` string, date-time, nullable, required
      - `completed_at` string, date-time, nullable, required
      - `created_at` string, date-time, required
      - `providers` MonitoringProviderCoverage[]
        - `platform_id` string, uuid, required
        - `platform_name` string, required
        - `planned_count` integer, required
        - `succeeded_count` integer, required
        - `failed_count` integer, required
        - `pending_count` integer, required
        - `total_attempts` integer, required
        - `failure_codes` MonitoringFailureCode[]
        - `tasks` MonitoringTaskCoverage[]
          - `task_id` string, uuid, required
          - `prompt_id` string, uuid, required
          - `platform_id` string, uuid, required
          - `platform_name` string, required
          - `run_index` integer, required
          - `status` 'queued' | 'running' | 'retry_wait' | 'succeeded' | 'terminal_failed', required
          - `attempt_count` integer, required
          - `failure_code` 'quota_exhausted' | 'auth_failed' | 'rate_limited' | 'timeout' | 'provider_unavailable' | 'invalid_model' | 'malformed_response' | 'retrieval_not_observed' | 'unknown' — Stable provider failure taxonomy persisted on monitoring tasks.
          - `requested_model` string, nullable
          - `resolved_model` string, required
          - `adapter` string, required
          - `retrieval_policy` string, required
          - `started_at` string, date-time, nullable
          - `completed_at` string, date-time, nullable
          - `last_attempt_at` string, date-time, nullable
    - `showing_older_data` boolean

## Other responses

- `404` — Experiment not found
- `422` — Validation Error

---

[API](https://skmtc.dev/getanana/apis/cleon-api.md) · [All operations](https://skmtc.dev/getanana/apis/cleon-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/getanana/cleon-api/revisions/3ad158624c53/schema)
