---
title: "Add a tracked competitor"
method: POST
path: "/org/competitors"
tags: ["Tracked Competitors"]
---

# Add a tracked competitor

`POST /org/competitors`

## Request

- Base URL: `https://apiv2.senso.ai/api/v1`
- URL: `https://apiv2.senso.ai/api/v1/org/competitors`
- Auth: API key in header `X-API-Key`

Adds a competitor brand to your organization's tracked set. An organization can track at most 50 competitors; the 51st answers 422. A name whose brand key is already tracked (for example "Acme Inc" when "Acme" is tracked) answers 409. Changing competitors restates analytics history in the background.

## Request body

- CompetitorRequest: Create/update payload for a tracked competitor.
  - `name` string, required: Competitor brand name.
  - `url` string, uri: Competitor website URL. On update, omitting it keeps the current URL and an empty string clears it. Its host is always added to `domains`.
  - `domains` string[]: When present, replaces the domains this competitor's citations are attributed to (hosts such as `acme.com`; URLs are reduced to their host). Omit to leave them unchanged.

## Response `201`

The created competitor.

- CompetitorResponse: A competitor brand your organization tracks.
  - `id` string, uuid, required: Unique identifier of the tracked competitor.
  - `brand_key` string: The normalized brand key analytics store this competitor under. Two names with the same key (for example "Acme" and "Acme Inc") are the same competitor.
  - `domains` string[], required: Domains whose citations count as this competitor's.
  - `org_id` string, uuid, required: The organization that owns this entry.
  - `name` string, required: Competitor brand name.
  - `url` string: Competitor website URL, when set.
  - `source` 'manual' | 'suggested_run_text' | 'suggested_web_search', required: How this entry was added — added by hand, or AI-suggested from run text or a web search.
  - `rationale` string: For AI-suggested entries, why this competitor was proposed.
  - `confidence` number: For AI-suggested entries, the suggestion confidence (0–1).
  - `created_at` string, date-time, required: When the entry was created.
  - `updated_at` string, date-time, required: When the entry was last updated.

## Other responses

- `400`: The request body was invalid — either it failed field validation (`ValidationErrorResponse`) or was otherwise malformed (`ErrorResponse`).
- `401`: Missing or invalid credentials — supply a valid org API key in the `X-API-Key` header.
- `404`: The requested resource does not exist or is not visible to this key.
- `409`: The request conflicts with the current state (e.g. a duplicate).
- `422`: The request was well-formed but cannot be fulfilled given the current state (e.g. insufficient data to act on).

---

[API](https://skmtc.dev/senso/apis/senso-org-api.md) - [All operations](https://skmtc.dev/senso/apis/senso-org-api/llms.txt) - [OpenAPI document](https://skmtc.dev/senso/apis/senso-org-api/revisions/d789b4fcbe84?raw)
