---
title: "Create brief"
method: POST
path: "/strategies/{uuid}/briefs"
tags: ["Briefs"]
---

# Create brief

`POST /strategies/{uuid}/briefs`

## Request

- Base URL: `https://kovatools.com/api/v1`
- URL: `https://kovatools.com/api/v1/strategies/{uuid}/briefs`
- Auth: HTTP bearer

Triggers asynchronous brief generation for a strategy.
Returns immediately with a brief ID and `status: processing`.
Poll `GET /strategies/{uuid}/briefs/{id}` for completion.

Only one evaluation may be active per strategy. If an evaluation is
already running, this returns `409 evaluation_in_progress` with the
active `brief_id`.

Omit `portfolio` to re-evaluate using the latest normalized portfolio
snapshot and any manual assets on the strategy.

Note: `live_inputs` is not accepted. Use `context` for additional evaluation signals.
Sending `live_inputs` will return a 422 error.

## Path parameters

- `uuid` string, uuid, required

## Request body

- object
  - `portfolio` PortfolioInput
    - `portfolio_kind` 'actual' | 'hypothetical' | 'unknown': Only actual dated portfolios contribute behavioral evidence to Strategy Intelligence.
    - `reported_at` string, date-time: Optional source date, never in the future. Omit if unknown; receipt date remains separate.
    - `source` 'text' | 'file' | 'json', required: - `text`: Plain text portfolio description - `file`: Base64-encoded file (PDF, CSV, or image) - `json`: Structured JSON matching portfolio_v1 schema
    - `content` unknown, required
    - `content_type` string: MIME type, required when source is `file`. Examples: `application/pdf`, `text/csv`, `image/png`
  - `context` string: Optional freeform text providing additional context for the evaluation. Examples: market conditions, recent events, specific concerns.

## Response `202`

Brief creation started

- object
  - `brief` BriefProcessing
    - `id` string, uuid: Brief identifier (use for polling)
    - `status` 'processing'
    - `poll_url` string, uri: URL to poll for status updates (only in create response)
    - `started_at` string, date-time: When brief generation began
    - `elapsed_seconds` integer: Seconds elapsed since generation started
    - `expected_duration_seconds` integer: Typical total generation time in seconds (~90s)
    - `retry_after_seconds` integer: Suggested wait before polling again
    - `message` string: Human-readable status message with timing guidance
  - `meta` Meta
    - `request_id` string: Unique request identifier for debugging
    - `timestamp` string, date-time

## Other responses

- `409`: Evaluation already in progress for this strategy
- `422`: Invalid parameters

---

[API](https://skmtc.dev/kovatools/apis/kova-api.md) · [All operations](https://skmtc.dev/kovatools/apis/kova-api/llms.txt) · [OpenAPI document](https://skmtc.dev/kovatools/apis/kova-api/revisions/915eb7ffe3b6?raw)
