---
title: "Follow Topic"
method: POST
path: "/follows"
tags: ["follow"]
---

# Follow Topic

`POST /follows`

## Request

- Base URL: `https://api.3gppscout.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.3gppscout.com/follows`
- Auth: none declared

Follow a topic for the signed-in user from confirmed targets. Returns the followed topic with `follow_id`.

Send `confirmed: true`, a `label` (or `query`), and `targets` from find_topics_to_follow, a `phrase`, or
both. Without confirmation, or with neither targets nor a phrase, the response is 409
`confirmation_required` carrying the resolution to show first. When the query names a subject, Scout also
follows it by meaning and returns `phrase.description`, a plain statement of what it reads the phrase as;
meaning-based updates show on the Following page and do not email yet. A phrase that is too broad returns
409 `phrase_too_broad`: ask the user to narrow it, or resend with `keep_broad: true` to keep it page only.
A new followed topic starts with matches from the last 90 days. At most 20 active followed topics per user,
phrase follows included (409 follow_limit_reached). Delivery defaults to the user's setting (email unless
changed).

## Request body

- CreateTrackerRequest
  - `query` string, nullable: What the user asked to follow.
  - `label` string, nullable: User-facing name. Defaults to the query.
  - `targets` TargetIn[], nullable: The confirmed targets, usually from POST /follows/resolve after the user reviewed them.
    - `target_type` 'topic' | 'work_item' | 'spec' | 'org' | 'meeting' | 'meeting_group', required
    - `target_id` string, required: topic_id, work item code, spec number ('38.331'), org_id, meeting ID ('R1-127') or group ('R1').
    - `label` string
    - `included` boolean
    - `resolved_by` 'resolver' | 'user'
  - `delivery` 'default' | 'email' | 'dashboard'
  - `created_via` 'chat_tool' | 'suggestion' | 'api' | 'mcp' | 'page', nullable
  - `source_thread_id` string, nullable
  - `confirmed` boolean: Set true only after the user saw the label and targets. Without it, or without targets or a phrase, the response is 409 confirmation_required with the resolution to show.
  - `phrase` string, nullable: Follow this phrase by meaning, with or without targets. Defaults to the query when it names a subject (not only a spec, meeting or company). Send an empty string to follow the targets only.
  - `keep_broad` boolean: Keep a phrase Scout found too broad (409 phrase_too_broad). The follow is then page only: its updates show on the Following page and it sends no email.

## Response `201`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/3gppscout/apis/3gpp-scout-api.md) · [All operations](https://skmtc.dev/3gppscout/apis/3gpp-scout-api/llms.txt) · [OpenAPI document](https://skmtc.dev/3gppscout/apis/3gpp-scout-api/revisions/60bd6896e5b9?raw)
