---
title: "Batch-create tracked competitors"
method: POST
path: "/org/competitors/batch"
tags: ["Tracked Competitors"]
---

# Batch-create tracked competitors

`POST /org/competitors/batch`

## Request

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

Creates up to 50 competitors in one call. Used by the suggestion-accept flow to record each entry's `source`, `rationale`, and `confidence`. The batch is best-effort, bounded by the organization's 50-competitor cap: entries beyond the remaining capacity are dropped, an entry whose name is already tracked (case-insensitive) returns the existing competitor unchanged, and blank names are skipped — so the response can be shorter than the request and can contain rows that were not newly created.

## Request body

- CompetitorBatchRequest: Create up to 50 competitors at once (used by the suggestion-accept flow).
  - `items` CompetitorBatchItem[], required
    - `name` string, required: Competitor brand name.
    - `url` string, uri: Competitor website URL.
    - `source` 'manual' | 'suggested_run_text' | 'suggested_web_search': How this entry originated. Defaults to `manual` when omitted.
    - `rationale` string: For AI-suggested entries, why this competitor was proposed.
    - `confidence` number: For AI-suggested entries, the suggestion confidence (0–1).

## Response `201`

The created (or already-tracked) competitors, in request order.

- CompetitorListResponse: The organization's tracked competitors with a count.
  - `competitors` CompetitorResponse[], required
    - `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.
  - `total` integer, required: Number of competitors returned.

## 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).

---

[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)
