3GPP Scout Follow API

The follow API from 3GPP Scout — 8 operation(s) for follow.

Operations 10

POST /follows/resolve Find Topics To Follow #
GET /follows List Followed Topics #
POST /follows Follow Topic #
PATCH /follows/{follow_id} Update Followed Topic #
DELETE /follows/{follow_id} Unfollow Topic #
GET /follows/{follow_id}/updates Get Followed Topic Updates #
POST /follows/{follow_id}/updates/{event_id}/not-relevant Mark Update Not Relevant #
DELETE /follows/{follow_id}/feedback/{feedback_id} Undo Update Feedback #
GET /follows/{follow_id}/updates/{event_id} Get Followed Topic Update #
POST /follows/patent Follow Patent #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/3gppscout-com:3gppscout-com-follow-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

3gppscout-com-follow-api-openapi.yml Raw ↑
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