Synthient API Torrents API

DHT and tracker peer observations. One real-time stream and one parquet export.

Operations 6

GET /feeds/torrents/export List torrents parquet exports #
GET /feeds/torrents/export/{date} Download a torrents parquet export #
GET /feeds/torrents/export/{date}/meta Get torrents parquet metadata #
GET /feeds/torrents/export/{date}/{hour} Download a torrents hourly parquet export #
GET /feeds/torrents/export/{date}/{hour}/meta Get torrents hourly parquet metadata #
GET /feeds/torrents/stream Stream torrent DHT/tracker events in real time #

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/synthient:synthient-torrents-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

synthient-torrents-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Synthient Torrents API
  version: 1.0.0
  description: Synthient API for IP enrichment, account management, and real-time data feeds.
servers:
- url: /api/v4
  description: Versioned HTTP API base path
tags:
- name: Torrents
  description: DHT and tracker peer observations. One real-time stream and one parquet export.
paths:
  /feeds/torrents/export:
    get:
      operationId: listTorrentsExport
      summary: List torrents parquet exports
      description: 'List parquet export feeds for the **torrents** stream. Returns one page of daily and hourly snapshots, newest-first; pass `next_cursor` back as `cursor` for the next page.


        **Required scope:** `TORRENTS_FEED`. Parquet snapshots land at `{stream}/latest/HH_{stream}.parquet` hourly and are rolled up daily into `{stream}/YYYY/MM/DD/{stream}.parquet` (00:30 UTC).'
      tags:
      - Torrents
      security:
      - apiKeyAuth: []
      parameters:
      - name: limit
        in: query
        schema:
          type: integer
          minimum: 1
          maximum: 500
          default: 100
        description: Page size. Defaults to 100; values above 500 are clamped.
      - name: cursor
        in: query
        schema:
          type: string
        description: Opaque pagination token returned in `next_cursor` of the previous response. Omit on the first page.
      responses:
        '200':
          description: Page of export feeds. Includes `next_cursor` when more pages exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExportListResponse'
        '400':
          description: Bad cursor or invalid limit
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '401':
          description: Unauthorized — missing or invalid API key
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '403':
          description: Forbidden — API key lacks `TORRENTS_FEED`
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '500':
          description: Internal server error
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
  /feeds/torrents/export/{date}:
    get:
      operationId: downloadTorrentsExport
      summary: Download a torrents parquet export
      description: 'Download a single parquet snapshot for **torrents**. Returns a 307 redirect to a presigned R2 URL valid for 24 hours. 307 (not 301) because the URL is minted per request and expires — intermediaries must not cache it.


        **Required scope:** `TORRENTS_FEED`. **Columns:** `info_hash`, `name`, `magnet_uri`, `total_size`, `piece_length`, `file_count`, `timestamp`. Per-file and per-peer arrays are dropped from the parquet (the projector does not handle repeated nested messages).'
      tags:
      - Torrents
      security:
      - apiKeyAuth: []
      parameters:
      - name: date
        in: path
        required: true
        schema:
          type: string
          example: '2026-05-03'
        description: Either a YYYY-MM-DD date for a daily rollup, or the literal string `latest` for the most recent hourly export.
      responses:
        '307':
          description: Temporary redirect to a 24h presigned download URL on the CDN.
        '400':
          description: Bad date format (expected YYYY-MM-DD or 'latest')
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '401':
          description: Unauthorized — missing or invalid API key
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '403':
          description: Forbidden — API key lacks `TORRENTS_FEED`
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: No export exists for the requested date. If the date's daily rollup is still being assembled (roughly 00:00–01:30 UTC for the largest streams), the response carries a Retry-After header and a problem detail saying so — the individual hours remain downloadable at /export/{date}/{hour} in the meantime.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '500':
          description: Internal server error
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
  /feeds/torrents/export/{date}/meta:
    get:
      operationId: getTorrentsExportMeta
      summary: Get torrents parquet metadata
      description: 'Metadata for a single **torrents** parquet snapshot: SHA-256 checksum, byte size, row count, parquet schema (column names + types), and canonical date. No file body — call the matching `/export/{date}` endpoint to download.


        **Required scope:** `TORRENTS_FEED`.'
      tags:
      - Torrents
      security:
      - apiKeyAuth: []
      parameters:
      - name: date
        in: path
        required: true
        schema:
          type: string
          example: '2026-05-03'
        description: Either a YYYY-MM-DD date for a daily rollup, or the literal string `latest` for the most recent hourly export.
      responses:
        '200':
          description: Export-feed metadata.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExportMetaResponse'
        '400':
          description: Bad date format
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '401':
          description: Unauthorized — missing or invalid API key
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '403':
          description: Forbidden — API key lacks `TORRENTS_FEED`
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: No export exists for the requested date. If the date's daily rollup is still being assembled (roughly 00:00–01:30 UTC for the largest streams), the response carries a Retry-After header and a problem detail saying so — the individual hours remain downloadable at /export/{date}/{hour} in the meantime.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '500':
          description: Internal server error
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
  /feeds/torrents/export/{date}/{hour}:
    get:
      operationId: downloadTorrentsHourlyExport
      summary: Download a torrents hourly parquet export
      description: 'Download a specific hourly parquet snapshot for **torrents** by date and hour. Returns a 307 redirect to a presigned R2 URL valid for 24 hours.


        Hourly files are transient — shortly after 00:30 UTC they are rolled up into the daily export and the per-hour artifacts are deleted. Hours remain downloadable until their day''s rollup completes (including yesterday''s hours in the window right after midnight UTC); once rolled up, requests return 400 with a note pointing at `/export/{date}` for the daily rollup. The `latest` alias rolls forward each hour and tracks the most recent hourly.


        **Required scope:** `TORRENTS_FEED`. **Columns:** `info_hash`, `name`, `magnet_uri`, `total_size`, `piece_length`, `file_count`, `timestamp`. Per-file and per-peer arrays are dropped from the parquet (the projector does not handle repeated nested messages).'
      tags:
      - Torrents
      security:
      - apiKeyAuth: []
      parameters:
      - name: date
        in: path
        required: true
        schema:
          type: string
          example: '2026-05-03'
        description: Either a YYYY-MM-DD date for a daily rollup, or the literal string `latest` for the most recent hourly export.
      - name: hour
        in: path
        required: true
        schema:
          type: integer
          example: 14
          minimum: 0
          maximum: 23
        description: Hour of day (UTC) — integer 0..23. Identifies the specific hourly snapshot for `{date}`.
      responses:
        '307':
          description: Temporary redirect to a 24h presigned download URL on the CDN.
        '400':
          description: Bad date format, hour out of range (0..23), or the hour has already been rolled into the daily export (request /export/{date} instead)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '401':
          description: Unauthorized — missing or invalid API key
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '403':
          description: Forbidden — API key lacks `TORRENTS_FEED`
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: No hourly export exists for the requested hour
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '500':
          description: Internal server error
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
  /feeds/torrents/export/{date}/{hour}/meta:
    get:
      operationId: getTorrentsHourlyExportMeta
      summary: Get torrents hourly parquet metadata
      description: 'Metadata for one hourly **torrents** parquet snapshot identified by date and hour. Same shape as the daily `/meta` response.


        Hourly metadata is available while the hour''s file exists — including yesterday''s hours until their daily rollup completes. Once rolled up, request the daily `/export/{date}/meta` instead.


        **Required scope:** `TORRENTS_FEED`.'
      tags:
      - Torrents
      security:
      - apiKeyAuth: []
      parameters:
      - name: date
        in: path
        required: true
        schema:
          type: string
          example: '2026-05-03'
        description: Either a YYYY-MM-DD date for a daily rollup, or the literal string `latest` for the most recent hourly export.
      - name: hour
        in: path
        required: true
        schema:
          type: integer
          example: 14
          minimum: 0
          maximum: 23
        description: Hour of day (UTC) — integer 0..23. Identifies the specific hourly snapshot for `{date}`.
      responses:
        '200':
          description: Export-feed metadata.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExportMetaResponse'
        '400':
          description: Bad date format, hour out of range (0..23), or date is not the current UTC date
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '401':
          description: Unauthorized — missing or invalid API key
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '403':
          description: Forbidden — API key lacks `TORRENTS_FEED`
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: No hourly export exists for the requested hour
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '500':
          description: Internal server error
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
  /feeds/torrents/stream:
    get:
      operationId: streamTorrents
      summary: Stream torrent DHT/tracker events in real time
      description: 'Real-time NDJSON stream of torrent peer sightings from the BitTorrent DHT and public trackers. Each event carries the info hash, torrent metadata, and the peers observed announcing it.


        **Required scope:** `TORRENTS_STREAM`. **Schema:** see `TorrentStreamEntry` under Components.


        **Sample event:**

        ```

        {"info_hash":"c12fe1c06bba254a9dc9f519b335aa7c1367a88a","name":"ubuntu-22.04.iso","magnet_uri":"magnet:?xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a","total_size":3826831360,"piece_length":262144,"file_count":1,"timestamp":1714780800}

        ```'
      tags:
      - Torrents
      security:
      - apiKeyAuth: []
      responses:
        '200':
          description: NDJSON stream of torrents events. Each line is a complete JSON object. The connection stays open for up to 30 minutes.
          content:
            application/x-ndjson:
              schema:
                $ref: '#/components/schemas/TorrentStreamEntry'
        '401':
          description: Unauthorized — missing or invalid API key
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '403':
          description: Forbidden — API key lacks the required scope for this feed
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '429':
          description: Too many concurrent streams from this client
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '500':
          description: Internal server error
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '503':
          description: Service unavailable — streaming backend is down
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
components:
  schemas:
    ExportListResponse:
      type: object
      properties:
        feeds:
          type: array
          items:
            $ref: '#/components/schemas/ExportListItem'
        next_cursor:
          type: string
        stream:
          type: string
      required:
      - stream
      - feeds
    TorrentStreamEntry:
      type: object
      properties:
        file_count:
          type: integer
        files:
          type: array
          items:
            $ref: '#/components/schemas/TorrentFileEntry'
        info_hash:
          type: string
          description: 40-character hex SHA-1 info hash
        magnet_uri:
          type: string
        name:
          type: string
          description: Torrent name from metadata
        peers:
          type: array
          items:
            $ref: '#/components/schemas/TorrentPeerEntry'
        piece_length:
          type: integer
        timestamp:
          type: integer
          format: int64
          description: Unix timestamp (seconds since epoch, UTC)
        total_size:
          type: integer
          format: int64
          description: Total size of files in bytes
    TorrentFileEntry:
      type: object
      properties:
        length:
          type: integer
          format: int64
        path:
          type: string
    ProblemDetails:
      type: object
      properties:
        detail:
          type: string
        instance:
          type: string
        status:
          type: integer
        title:
          type: string
        type:
          type: string
      required:
      - type
      - title
      - status
      - detail
    Schema:
      type: object
      properties:
        fields:
          type: array
          items:
            $ref: '#/components/schemas/ProjectedColumn'
      required:
      - fields
    ExportMetaResponse:
      type: object
      properties:
        checksum:
          type: string
        created_at:
          type: integer
          format: int64
        date:
          type: integer
          format: int64
        format:
          type: string
        hour:
          type: integer
        id:
          type: string
        kind:
          type: string
        rows:
          type: integer
          format: int64
        schema:
          $ref: '#/components/schemas/Schema'
        size:
          type: integer
          format: int64
        stream:
          type: string
      required:
      - checksum
      - date
      - format
      - size
      - rows
      - schema
      - stream
      - kind
      - id
      - created_at
    TorrentPeerEntry:
      type: object
      properties:
        encrypted:
          type: boolean
        ip:
          type: string
          description: IPv4 or IPv6 address of the peer
        port:
          type: integer
        source:
          type: string
          description: DHT, PEX, or tracker
    ProjectedColumn:
      type: object
      properties:
        name:
          type: string
        type:
          type: string
      required:
      - name
      - type
    ExportListItem:
      type: object
      properties:
        checksum:
          type: string
        created_at:
          type: integer
          format: int64
        date:
          type: string
        download_path:
          type: string
        hour:
          type: integer
        id:
          type: string
        kind:
          type: string
        row_count:
          type: integer
          format: int64
        size_bytes:
          type: integer
          format: int64
      required:
      - kind
      - date
      - size_bytes
      - row_count
      - checksum
      - id
      - created_at
      - download_path
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: X-Api-Key
      description: Private API key passed in the X-Api-Key header.
x-provenance:
  method: harvested
  publisher: Synthient API
  source: https://api.synthient.com/openapi.json
  note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
    stamped by stamp-openapi-provenance.py (roadmap#793)