---
title: "Competitor battlecard"
method: GET
path: "/api/v1/competitors/{id}/battlecard"
tags: ["API v1"]
---

# Competitor battlecard

`GET /api/v1/competitors/{id}/battlecard`

## Request

- Base URL: `https://api.rivalize.ai`
- URL: `https://api.rivalize.ai/api/v1/competitors/{id}/battlecard`
- Auth: HTTP bearer

Cited per-competitor sales battlecard: Why We Win, Their Weaknesses, Objection Handlers, Discovery Questions. Every claim carries citations resolving to collected sources; claims that could not be cited were withheld. `source` is "generated" (the dashboard Battlecard tab) or "report" (the battlecard section of the competitor's latest report, with `report_id` and `report_date`, used when none was generated). `status` is read off the card's four sections: "ready" when every section carries a cited claim, "partial" when some do not, "withheld" when none does (`withheld_reason` says why); `sections_empty` names the sections with no claim, and `sections_locked` the ones among them that are locked until the user's company profile is complete (a generated card's Why We Win) rather than withheld. `status: "not_generated"` when no card can be served: none was generated, and the latest report either has no card for this competitor or has one in an older format that fails the citation contract (withheld from serving, never repaired). Pro plan required. Pass ?format=md for agent-ready Markdown.

## Path parameters

- `id` string, uuid, required

## Query parameters

- `format` 'json' | 'md'

## Response `200`

Success. `status` is "ready" (every section carries a cited claim), "partial" (`sections_empty` names the empty ones), "withheld" (no section carries a claim; `withheld_reason` says why) or "not_generated" (no card can be served).

- object: Success. `status` is "ready" (every section carries a cited claim), "partial" (`sections_empty` names the empty ones), "withheld" (no section carries a claim; `withheld_reason` says why) or "not_generated" (no card can be served).
  - `data` object, required
    - `status` 'ready' | 'partial' | 'withheld' | 'not_generated', required
    - `source` 'generated' | 'report'
    - `sections_empty` string[]: Sections with no cited claim, in card order. Absent for not_generated.
    - `sections_locked` string[]: Of sections_empty, those locked until the company profile is complete (not withheld).
    - `withheld_reason` string: Why every claim was withheld. Present only when status is "withheld".
    - `markdown` string
    - `message` string

## Other responses

- `404`: Error. Carries a stable `code`, a human `message`, the HTTP `status`, and the `request_id` (also on the x-request-id response header).

---

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