Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: 3gppscout Com Follow API
version: 0.2.0
description: 'Operations tagged follow across 2 of this provider''s published API definitions: 3gppscout-com-openapi.json, api.json. Each path carries the servers of the definition it was published in.'
tags:
- name: Follow
paths:
/follows/resolve:
post:
tags:
- Follow
summary: Find Topics To Follow
description: 'Preview what following something would cover, before following it.
Turns free text into catalog targets (topics, work items, specs, companies, meetings, groups), each with a
label, a one-line reason, a confidence and an `included` flag (low-confidence targets come back unchecked).
Also returns a coverage note, how many updates it would have matched in the last 90 days with examples,
and `confirmation.text` to show the user. When the text names a subject, `phrase` says that the follow is
also matched by meaning (`phrase.text` to show), which works even when no catalog target fits. Follow with
POST /follows (follow_topic) using the targets the user kept. Following does not count against API
request allowances.'
operationId: find_topics_to_follow
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ResolveRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/follows:
get:
tags:
- Follow
summary: List Followed Topics
description: 'The signed-in user''s followed topics (`follows`, each with a `follow_id`), with their targets, delivery
and match counts, active first, and for phrase follows `phrase` with the plain `description` Scout matches
by. Check this before offering to follow something, to avoid duplicates.'
operationId: list_followed_topics
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
post:
tags:
- Follow
summary: Follow Topic
description: '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).'
operationId: follow_topic
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateTrackerRequest'
required: true
responses:
'201':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/follows/{follow_id}:
patch:
tags:
- Follow
summary: Update Followed Topic
description: 'Rename a followed topic, change what it covers (`targets` replaces the list), change `delivery`
(default, email, dashboard) or pause and resume it (`status`). New targets and resuming replay the last
90 days, so nothing is missed. For a phrase follow, `description` rewrites what the phrase means in the
user''s words and `phrase` replaces the phrase; either one rematches the last 90 days by meaning.'
operationId: update_followed_topic
parameters:
- name: follow_id
in: path
required: true
schema:
type: string
format: uuid
title: Follow Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateTrackerRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
delete:
tags:
- Follow
summary: Unfollow Topic
description: Unfollow one of the signed-in user's followed topics, deleting its matched updates.
operationId: unfollow_topic
parameters:
- name: follow_id
in: path
required: true
schema:
type: string
format: uuid
title: Follow Id
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/follows/{follow_id}/updates:
get:
tags:
- Follow
summary: Get Followed Topic Updates
description: 'Matched updates for one followed topic, newest first: each is a change event (TDoc registered,
decision, position, chair notes, news, filing) with a one-sentence summary, a plain-language `headline` and
`headline_sentence` for notable updates, where it happened, `significance` (0 to 100) and `matched_on`
(which targets matched). Poll with `since` instead of webhooks.'
operationId: get_followed_topic_updates
parameters:
- name: follow_id
in: path
required: true
schema:
type: string
format: uuid
title: Follow Id
- name: since
in: query
required: false
schema:
anyOf:
- type: string
format: date-time
- type: 'null'
description: Only updates that happened at or after this time.
title: Since
description: Only updates that happened at or after this time.
- name: limit
in: query
required: false
schema:
type: integer
maximum: 200
minimum: 1
default: 50
title: Limit
- name: offset
in: query
required: false
schema:
type: integer
minimum: 0
default: 0
title: Offset
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/follows/{follow_id}/updates/{event_id}/not-relevant:
post:
tags:
- Follow
summary: Mark Update Not Relevant
description: 'Mark one update matched by meaning as not relevant to a phrase follow. The update is hidden, Scout matches
fewer items like it, and after 3 marks in 14 days the follow needs a closer match. Undo with the returned
`feedback_id`.'
operationId: mark_update_not_relevant
parameters:
- name: follow_id
in: path
required: true
schema:
type: string
format: uuid
title: Follow Id
- name: event_id
in: path
required: true
schema:
type: integer
title: Event Id
requestBody:
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/NotRelevantRequest'
- type: 'null'
title: Req
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/follows/{follow_id}/feedback/{feedback_id}:
delete:
tags:
- Follow
summary: Undo Update Feedback
description: 'Undo a "Not relevant" mark: the update shows again and stops counting against the follow.'
operationId: undo_update_feedback
parameters:
- name: follow_id
in: path
required: true
schema:
type: string
format: uuid
title: Follow Id
- name: feedback_id
in: path
required: true
schema:
type: integer
title: Feedback Id
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/follows/{follow_id}/updates/{event_id}:
get:
tags:
- Follow
summary: Get Followed Topic Update
description: 'One matched update of one followed topic, with its label. 404 when the followed topic is not the
caller''s or never matched the event.'
operationId: get_followed_topic_update
parameters:
- name: follow_id
in: path
required: true
schema:
type: string
format: uuid
title: Follow Id
- name: event_id
in: path
required: true
schema:
type: integer
title: Event Id
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/follows/patent:
post:
tags:
- Follow
summary: Follow Patent
description: 'Follow a granted US patent by number for the signed-in user (private preview).
Scout stores the patent''s title, assignees, priority, filing and grant dates, family ID, an expiry estimate,
and each independent claim split into elements, and shows them on the Followed topics page. Returns the
follow (`follow_id`) with a `patent` object: `status` is ''ready'' when the claims are loaded, ''pending'' while
Scout loads them, or ''not_found''. Following a patent you already follow returns that follow with
`already_following: true`. A patent follow counts as one of the 20 active follows. It does not send
updates yet: alerts when new 3GPP work comes near the claims are a later step. Claims and bibliographic
data are from Google Patents Public Data (IFI CLAIMS Patent Services and Google, CC BY 4.0).'
operationId: follow_patent
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/FollowPatentRequest'
required: true
responses:
'201':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
components:
schemas:
FollowPatentRequest:
properties:
patent:
type: string
maxLength: 40
minLength: 6
title: Patent
description: A granted US patent number, for example 'US 12,369,156 B2', 'US12369156B2' or '12369156'. Applications, reissues and non-US patents are not supported.
label:
anyOf:
- type: string
maxLength: 120
- type: 'null'
title: Label
description: User-facing name. Defaults to the patent number.
delivery:
type: string
enum:
- default
- email
- dashboard
title: Delivery
default: default
type: object
required:
- patent
title: FollowPatentRequest
UpdateTrackerRequest:
properties:
label:
anyOf:
- type: string
maxLength: 120
minLength: 1
- type: 'null'
title: Label
targets:
anyOf:
- items:
$ref: '#/components/schemas/TargetIn'
type: array
maxItems: 25
- type: 'null'
title: Targets
delivery:
anyOf:
- type: string
enum:
- default
- email
- dashboard
- type: 'null'
title: Delivery
status:
anyOf:
- type: string
enum:
- active
- paused
- type: 'null'
title: Status
phrase:
anyOf:
- type: string
maxLength: 200
minLength: 2
- type: 'null'
title: Phrase
description: A new phrase to follow by meaning. Scout writes what it means again.
description:
anyOf:
- type: string
maxLength: 1200
minLength: 2
- type: 'null'
title: Description
description: Your own wording of what the phrase means. Matching uses it from now on.
excludes:
anyOf:
- type: string
maxLength: 400
- type: 'null'
title: Excludes
description: What is close to the phrase but not covered, in one sentence.
keep_broad:
type: boolean
title: Keep Broad
description: Keep a new phrase Scout found too broad; the follow becomes page only.
default: false
type: object
title: UpdateTrackerRequest
ValidationError:
properties:
loc:
items:
anyOf:
- type: string
- type: integer
type: array
title: Location
msg:
type: string
title: Message
type:
type: string
title: Error Type
input:
title: Input
ctx:
type: object
title: Context
type: object
required:
- loc
- msg
- type
title: ValidationError
ResolveRequest:
properties:
query:
type: string
maxLength: 500
minLength: 2
title: Query
description: 'What to follow in plain words: a topic (''NTN timing advance''), a company (''Ericsson''), a spec (''TS 38.331''), a meeting (''RAN1 #127''), or a mix (''Qualcomm AI/ML in RAN1'').'
type: object
required:
- query
title: ResolveRequest
TargetIn:
properties:
target_type:
type: string
enum:
- topic
- work_item
- spec
- org
- meeting
- meeting_group
title: Target Type
target_id:
type: string
maxLength: 200
minLength: 1
title: Target Id
description: topic_id, work item code, spec number ('38.331'), org_id, meeting ID ('R1-127') or group ('R1').
label:
type: string
maxLength: 300
title: Label
default: ''
included:
type: boolean
title: Included
default: true
resolved_by:
type: string
enum:
- resolver
- user
title: Resolved By
default: resolver
type: object
required:
- target_type
- target_id
title: TargetIn
NotRelevantRequest:
properties:
via:
type: string
enum:
- page
- api
title: Via
default: api
type: object
title: NotRelevantRequest
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
type: array
title: Detail
type: object
title: HTTPValidationError
CreateTrackerRequest:
properties:
query:
anyOf:
- type: string
maxLength: 500
- type: 'null'
title: Query
description: What the user asked to follow.
label:
anyOf:
- type: string
maxLength: 120
- type: 'null'
title: Label
description: User-facing name. Defaults to the query.
targets:
anyOf:
- items:
$ref: '#/components/schemas/TargetIn'
type: array
maxItems: 25
- type: 'null'
title: Targets
description: The confirmed targets, usually from POST /follows/resolve after the user reviewed them.
delivery:
type: string
enum:
- default
- email
- dashboard
title: Delivery
default: default
created_via:
anyOf:
- type: string
enum:
- chat_tool
- suggestion
- api
- mcp
- page
- type: 'null'
title: Created Via
source_thread_id:
anyOf:
- type: string
maxLength: 100
- type: 'null'
title: Source Thread Id
confirmed:
type: boolean
title: Confirmed
description: 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.
default: false
phrase:
anyOf:
- type: string
maxLength: 200
- type: 'null'
title: Phrase
description: 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:
type: boolean
title: Keep Broad
description: '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.'
default: false
type: object
title: CreateTrackerRequest
x-refined-from:
- 3gppscout-com-openapi.json
- api.json