3GPP Scout Tdocs API

The tdocs API from 3GPP Scout — 5 operation(s) for tdocs.

Operations 5

POST /tdocs/search Search Tdocs #
GET /tdocs/{tdoc_id} Get Tdoc #
POST /tdocs/batch Get Tdocs Batch #
POST /tdocs/{tdoc_id}/fetch Fetch Tdoc Endpoint #
GET /tdocs List Tdocs #

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-tdocs-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-tdocs-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: 3gppscout Com Tdocs API
  version: 0.2.0
  description: 'Operations tagged tdocs 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: tdocs
paths:
  /tdocs/search:
    post:
      tags:
      - tdocs
      summary: Search Tdocs
      description: 'Search the text of 3GPP TDocs (meeting contributions, CRs, LSs, summaries, chair notes, reports) by meaning and by exact term.


        Use for "are there any TDocs about X", "who is proposing Y", or finding where an IE, parameter, spec, or

        TDoc ID is discussed. Merges semantic (vector) and keyword (lexical) matches, then reranks. Exact

        identifiers in the query (TDoc IDs such as R2-2008188, IE names such as ta-CommonDrift, spec numbers such

        as 38.213, quoted phrases) are matched literally, and passages that contain them come first.


        `filters` takes the same fields as GET /tdocs (source company with alias matching, meeting, group,

        agenda_item, doc_kind, status, work_item, spec, release, since, until). `unit_types` limits results to

        passages holding numbered proposals or observations.


        Each result is one passage with its TDoc''s ID, title, doc_kind, register status and status_label, meeting,

        agenda item, source companies with roles, official_url, unit type and labels (for example "Proposal 3"),

        page and paragraph anchor, and text. `anchor` is where the passage starts; `units` gives each numbered

        proposal or observation in the passage with its own anchor, which is the one to cite for that unit. `coverage` lists the meetings whose TDoc text is indexed, so an empty

        result is a real "nothing found in these meetings".


        Evidence rules: a passage from a contribution is its source companies'' proposal, not an agreement. Use

        list_meeting_decisions for what was agreed, and get_tdoc to read a whole TDoc.


        Errors: 400 `invalid_parameter`, 409 `organization_ambiguous` (candidates returned), 502

        `search_unavailable`.'
      operationId: search_tdocs
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TdocSearchRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /tdocs/{tdoc_id}:
    get:
      tags:
      - tdocs
      summary: Get Tdoc
      description: 'Get one 3GPP TDoc (meeting contribution, CR, LS, summary, report) by ID, for example R1-2605951.


        Returns register metadata: title, doc_kind, register status, meeting, agenda item, source companies

        with roles (submitter, co_submitter, editor), revision links, and the official 3GPP download URL.


        With `include=units`, returns the document''s units as verbatim quotes with a page or paragraph anchor.

        `units_source` says which extraction was used: "t4" (proposals, observations, agreements, working

        assumptions, conclusions, FFS items, CR changes, LS actions) or "t1" (numbered "Proposal N" and

        "Observation N" only, before full structuring has run). Long unit lists are cut at a size budget

        (`units_truncated`, `units_total`, `units_next_text_offset`). With `include=text`, returns document text

        blocks with anchors.


        Excerpt limit: API and MCP calls return one TDoc section and at most 2,000 words of units and text

        together. `excerpt` reports `returned_words`, `limit_words`, `truncated` and the `official_url` of the

        full document on the 3GPP server; `text.truncation_reason` is `one_section_per_call` or `word_limit`,

        and `text.next_offset` starts the next section.


        `content.status` is `complete`, `partial` (with `partial_reasons`), or `not_retrieved`. When it is

        `not_retrieved`, call `POST /tdocs/{tdoc_id}/fetch` (MCP tool `fetch_tdoc`) to parse it on demand.


        Errors: 404 `tdoc_not_indexed` (ID not in the catalog yet, call fetch), 404 `tdoc_not_found`,

        410 `tdoc_withdrawn` (metadata in `detail.tdoc`).


        Evidence rules: a company''s position comes only from a TDoc where it is submitter or co_submitter.

        Register status is a decision source. Proposal text is not an agreement.'
      operationId: get_tdoc
      parameters:
      - name: tdoc_id
        in: path
        required: true
        schema:
          type: string
          title: Tdoc Id
      - name: include
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: 'Comma-separated extras: ''units'' (labeled proposals, observations, agreements, and other units as quotes with anchors), ''text'' (document text blocks with anchors), ''revisions'' (revision chain). Example: include=units,revisions.'
          title: Include
        description: 'Comma-separated extras: ''units'' (labeled proposals, observations, agreements, and other units as quotes with anchors), ''text'' (document text blocks with anchors), ''revisions'' (revision chain). Example: include=units,revisions.'
      - name: text_offset
        in: query
        required: false
        schema:
          type: integer
          minimum: 0
          description: First text block to return when include has 'text'. Use text.next_offset to page.
          default: 0
          title: Text Offset
        description: First text block to return when include has 'text'. Use text.next_offset to page.
      - name: max_text_chars
        in: query
        required: false
        schema:
          type: integer
          maximum: 150000
          minimum: 1000
          description: Character budget for text blocks.
          default: 30000
          title: Max Text Chars
        description: Character budget for text blocks.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /tdocs/batch:
    post:
      tags:
      - tdocs
      summary: Get Tdocs Batch
      description: 'Read up to 10 TDocs in one call, for example every TDoc a summary or search result names.


        Each TDoc comes back as `GET /tdocs/{tdoc_id}` returns it (register metadata, sources with roles,

        and with `include` its units, text and revision chain), in request order, each with a `status`:

        `ok`, `not_indexed` (not in the catalog yet: call fetch_tdoc for it), `not_found`, `withdrawn`

        (metadata in `tdoc`), `invalid_tdoc_id`, or `error`. One TDoc that cannot be read does not fail the

        others. A TDoc in the catalog whose content was not parsed yet has `status` ok and

        `content.status` `not_retrieved`: call fetch_tdoc for it.


        Unit and text budgets are per TDoc. Without `max_unit_chars` and `max_text_chars`, 48,000 and

        16,000 characters are shared across the TDocs; long unit lists are cut (`units_truncated`).


        **Quota:** for REST and MCP this call counts as one request per TDoc (`requests_counted`), the same

        as calling get_tdoc once per TDoc. If fewer requests remain than TDocs asked for, it fails with 402

        before reading anything.


        **Excerpt limit:** each TDoc carries at most 2,000 words of units and text, cut like get_tdoc;

        `excerpt` and `official_url` say where to read the rest.'
      operationId: get_tdocs_batch
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TdocsBatchRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /tdocs/{tdoc_id}/fetch:
    post:
      tags:
      - tdocs
      summary: Fetch Tdoc Endpoint
      description: 'Fetch and parse a TDoc on demand, for a TDoc that is not parsed yet or not in the catalog.


        Downloads the TDoc ZIP from the 3GPP server and extracts its text with page or paragraph anchors and

        numbered Proposal and Observation units, usually within 60 seconds. Returns the same shape as

        `GET /tdocs/{tdoc_id}` plus a `fetch` block (status, timings, how the meeting was located).


        Idempotent: when the TDoc is already parsed, returns it at once. When a fetch for the same TDoc is

        already running and does not finish in time, returns 202 with `code = tdoc_fetch_in_progress` and

        `retry_after` seconds.


        If the file cannot be read on demand (for example a legacy .ppt), `content.status` is `unavailable`

        with a `reason`; the TDoc is queued for the full pipeline. That outcome is remembered for a few hours

        (30 minutes when no file was found) and returned without a new download unless `force=true`.

        Errors: 404 `tdoc_not_found`, 410 `tdoc_withdrawn`.'
      operationId: fetch_tdoc
      parameters:
      - name: tdoc_id
        in: path
        required: true
        schema:
          type: string
          title: Tdoc Id
      - name: include
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: 'Same as GET /tdocs/{tdoc_id}: units, text, revisions.'
          default: units
          title: Include
        description: 'Same as GET /tdocs/{tdoc_id}: units, text, revisions.'
      - name: text_offset
        in: query
        required: false
        schema:
          type: integer
          minimum: 0
          description: First text block to return when include has 'text'.
          default: 0
          title: Text Offset
        description: First text block to return when include has 'text'.
      - name: max_text_chars
        in: query
        required: false
        schema:
          type: integer
          maximum: 150000
          minimum: 1000
          description: Character budget for text blocks.
          default: 30000
          title: Max Text Chars
        description: Character budget for text blocks.
      - name: force
        in: query
        required: false
        schema:
          type: boolean
          description: Try again even if a recent on-demand attempt found no file or could not read it.
          default: false
          title: Force
        description: Try again even if a recent on-demand attempt found no file or could not read it.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /tdocs:
    get:
      tags:
      - tdocs
      summary: List Tdocs
      description: 'List TDocs in the catalog by company, meeting, agenda item, kind, status, work item, spec, or title words.


        Use this for "what did company X submit", "TDocs on agenda item 10.7 at RAN1#126", or "agreed CRs to

        38.213". Company names resolve through aliases, so misspellings such as "Manevir" find Mavenir.

        `source_resolution` shows how the name resolved. An ambiguous name returns 409

        `organization_ambiguous` with candidates.


        Each item has doc_kind, register status, meeting, agenda item, sources with roles, and official_url.

        `coverage` names the meetings whose full registers were searched, so an empty result is a real

        "nothing found in these meetings". This endpoint searches titles and metadata, not document text:

        call get_tdoc with include=units for the content.'
      operationId: list_tdocs
      parameters:
      - name: source
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Company name, alias, or org_id, e.g. 'Mavenir', 'Lekha Wireless', 'huawei'. Misspellings resolve through aliases.
          title: Source
        description: Company name, alias, or org_id, e.g. 'Mavenir', 'Lekha Wireless', 'huawei'. Misspellings resolve through aliases.
      - name: role
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: 'Comma-separated source roles: submitter, co_submitter, editor. Default all roles; each item reports matched_role.'
          title: Role
        description: 'Comma-separated source roles: submitter, co_submitter, editor. Default all roles; each item reports matched_role.'
      - name: meeting
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Comma-separated meeting IDs, e.g. 'R1-126' or 'RAN1#126'.
          title: Meeting
        description: Comma-separated meeting IDs, e.g. 'R1-126' or 'RAN1#126'.
      - name: group
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Comma-separated groups, e.g. 'R1', 'RAN2', 'S2'.
          title: Group
        description: Comma-separated groups, e.g. 'R1', 'RAN2', 'S2'.
      - name: agenda_item
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Agenda item; matches the item and its sub-items, e.g. '10.7' matches 10.7.1.
          title: Agenda Item
        description: Agenda item; matches the item and its sub-items, e.g. '10.7' matches 10.7.1.
      - name: doc_kind
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: 'Comma-separated kinds: contribution, pcr, cr, draft_cr, summary, way_forward, ls_in, ls_out, report, chair_notes, agenda, wid, sid, status_report, work_plan, draft_spec.'
          title: Doc Kind
        description: 'Comma-separated kinds: contribution, pcr, cr, draft_cr, summary, way_forward, ls_in, ls_out, report, chair_notes, agenda, wid, sid, status_report, work_plan, draft_spec.'
      - name: status
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Comma-separated register statuses, e.g. 'agreed,approved' or 'noted'.
          title: Status
        description: Comma-separated register statuses, e.g. 'agreed,approved' or 'noted'.
      - name: work_item
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Work item code, e.g. 'NR_NTN_Ph3-Core'.
          title: Work Item
        description: Work item code, e.g. 'NR_NTN_Ph3-Core'.
      - name: spec
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Target spec number, e.g. '38.213'.
          title: Spec
        description: Target spec number, e.g. '38.213'.
      - name: since
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Meetings starting on or after this date (YYYY-MM-DD).
          title: Since
        description: Meetings starting on or after this date (YYYY-MM-DD).
      - name: until
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Meetings starting on or before this date (YYYY-MM-DD).
          title: Until
        description: Meetings starting on or before this date (YYYY-MM-DD).
      - name: q
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Words that must all appear in the title or abstract, e.g. 'NTN timing advance'.
          title: Q
        description: Words that must all appear in the title or abstract, e.g. 'NTN timing advance'.
      - name: include_withdrawn
        in: query
        required: false
        schema:
          type: boolean
          description: Include withdrawn TDocs.
          default: false
          title: Include Withdrawn
        description: Include withdrawn TDocs.
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          maximum: 200
          minimum: 1
          description: Page size.
          default: 50
          title: Limit
        description: Page size.
      - name: cursor
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: next_cursor from a previous response.
          title: Cursor
        description: next_cursor from a previous response.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    TdocsBatchRequest:
      properties:
        tdoc_ids:
          items:
            type: string
          type: array
          maxItems: 10
          minItems: 1
          title: Tdoc Ids
          description: 1 to 10 TDoc IDs, e.g. ['R1-2605951', 'R2-2604548'].
        include:
          anyOf:
          - type: string
          - type: 'null'
          title: Include
          description: 'Comma-separated extras for every TDoc, as for GET /tdocs/{tdoc_id}: units, text, revisions.'
          default: units
        max_unit_chars:
          anyOf:
          - type: integer
            maximum: 40000.0
            minimum: 1000.0
          - type: 'null'
          title: Max Unit Chars
          description: Character budget for each TDoc's unit quotes. Default 48,000 divided by the number of TDocs.
        max_text_chars:
          anyOf:
          - type: integer
            maximum: 150000.0
            minimum: 1000.0
          - type: 'null'
          title: Max Text Chars
          description: Character budget for each TDoc's text blocks when include has 'text'. Default 16,000 divided by the number of TDocs.
      type: object
      required:
      - tdoc_ids
      title: TdocsBatchRequest
      description: Request body for reading several TDocs in one call.
    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
    TdocSearchRequest:
      properties:
        query:
          type: string
          maxLength: 1000
          minLength: 2
          title: Query
          description: What the TDocs should discuss, in plain words or exact terms, e.g. 'timing advance pre-compensation for NTN', 'ta-CommonDrift', 'R2-2008188'.
        filters:
          $ref: '#/components/schemas/TdocSearchFilters'
          description: Catalog filters, the same fields as GET /tdocs.
        unit_types:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          title: Unit Types
          description: 'Only chunks holding these units: ''proposal'', ''observation'', or ''body'' (text outside numbered proposals and observations).'
        rerank_top_k:
          type: integer
          maximum: 50.0
          minimum: 1.0
          title: Rerank Top K
          description: Results to return after reranking.
          default: 10
        max_per_tdoc:
          type: integer
          maximum: 10.0
          minimum: 1.0
          title: Max Per Tdoc
          description: At most this many passages from one TDoc. Use 1 for a list of distinct TDocs.
          default: 2
        include_text:
          type: boolean
          title: Include Text
          description: Include each passage's text.
          default: true
        rerank:
          type: boolean
          title: Rerank
          description: Rerank candidates for precision. Leave true.
          default: true
      type: object
      required:
      - query
      title: TdocSearchRequest
    TdocSearchFilters:
      properties:
        source:
          anyOf:
          - type: string
          - type: 'null'
          title: Source
          description: Company name, alias, or org_id, e.g. 'Mavenir' or 'huawei'. Matches TDocs where it is a submitter or co-submitter.
        meeting:
          anyOf:
          - type: string
          - type: 'null'
          title: Meeting
          description: Meeting IDs, e.g. 'R1-126' or 'RAN1#126'.
        group:
          anyOf:
          - type: string
          - type: 'null'
          title: Group
          description: Groups, e.g. 'R1', 'RAN2', 'S2'.
        agenda_item:
          anyOf:
          - type: string
          - type: 'null'
          title: Agenda Item
          description: Agenda items; '10.7' also matches 10.7.1.
        doc_kind:
          anyOf:
          - type: string
          - type: 'null'
          title: Doc Kind
          description: 'Kinds: contribution, pcr, cr, draft_cr, cr_pack, summary, way_forward, ls_in, ls_out, report, chair_notes, agenda, wid, sid, status_report, work_plan, draft_spec.'
        status:
          anyOf:
          - type: string
          - type: 'null'
          title: Status
          description: Register statuses, e.g. 'agreed,approved' or 'noted'. Joined from the register at query time.
        work_item:
          anyOf:
          - type: string
          - type: 'null'
          title: Work Item
          description: Work item code, e.g. 'NR_NTN_Ph3-Core'.
        spec:
          anyOf:
          - type: string
          - type: 'null'
          title: Spec
          description: Target spec number, e.g. '38.213'.
        release:
          anyOf:
          - type: string
          - type: 'null'
          title: Release
          description: Release, e.g. 'Rel-20'.
        since:
          anyOf:
          - type: string
          - type: 'null'
          title: Since
          description: Meetings starting on or after this date (YYYY-MM-DD).
        until:
          anyOf:
          - type: string
          - type: 'null'
          title: Until
          description: Meetings starting on or before this date (YYYY-MM-DD).
      type: object
      title: TdocSearchFilters
      description: Catalog filters, the same fields as GET /tdocs. Comma-separated values match any of them.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
x-refined-from:
- 3gppscout-com-openapi.json
- api.json