---
title: "Create or update a tracked GEO competitor"
method: PUT
path: "/v1/projects/{projectId}/geo/competitors"
tags: ["GEO"]
---

# Create or update a tracked GEO competitor

`PUT /v1/projects/{projectId}/geo/competitors`

Matches on name, case-insensitively. Send `previousName` to rename an existing competitor. Returns the full competitor list.

## Path parameters

- `projectId` string, required

## Request body

- PutGeoCompetitorRequest
  - `name` string, required
  - `previousName` string — Set to rename an existing competitor.
  - `domain` string, nullable, required
  - `synonyms` string[]
  - `kind` 'direct' | 'indirect'
  - `color` string, nullable

## Response `200`

Competitor saved successfully

- ListGeoCompetitorsResponse
  - `competitors` GeoCompetitor[], required
    - `id` string, required
    - `name` string, required
    - `domain` string, nullable, required
    - `synonyms` string[], required
    - `kind` 'direct' | 'indirect', required
    - `color` string, nullable, required
  - `organization` object, required
    - `id` string, required
    - `slug` string, required
    - `name` string, required
    - `logo` string, nullable, required

## Other responses

- `400` — Invalid request
- `401` — Missing or invalid API key
- `402` — GEO plan or available AI credits required
- `403` — Forbidden
- `404` — Organization, project or resource not found
- `409` — Conflict
- `500` — Internal server error
- `503` — Authentication or billing service unavailable

## Changes

- **2026-09-02** `fd2fc44c9208` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/usenotra/apis/notra-api/changes/v1/projects/:projectId/geo/competitors/put.md)

---

[API](https://skmtc.dev/usenotra/apis/notra-api.md) · [All operations](https://skmtc.dev/usenotra/apis/notra-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/usenotra/notra-api/revisions/931a7bd8d32c/schema)
