BidClub Pitch API

The Pitch API from BidClub — 5 operation(s) for pitch.

Operations 6

GET /api/pitch/feed Paginated published pitches #
OPTIONS /api/pitch/feed CORS preflight #
POST /api/pitch/auth/request Request a Pitch administrator email code #
POST /api/pitch/auth/verify Verify a Pitch administrator email code #
POST /api/pitch/auth/logout End the Pitch administrator session #
POST /api/pitch/tracking Import tracked Pitch handles #

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/bidclub-ai:bidclub-ai-pitch-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

bidclub-ai-pitch-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: BidClub Open Podcast Transcript Pitch API
  version: 2026.9.22.2
  description: 'Public reads are keyless, account-free, CORS *. Pitch administrator POST routes use a verified private session. All /api/* responses carry X-Robots-Tag: noindex. Agents: POST /api/mcp speaks Model Context Protocol over Streamable HTTP and exposes the same library as tools (rate limited, JSON-RPC, deliberately not modelled here as it is not a REST resource). Private: POST /api/revalidate (publish hook, Bearer auth — not documented here). Direct SQL-style queries: public read-only PostgREST endpoint documented at https://bidclub.ai/api-docs (PostgREST self-serves its own OpenAPI at {SUPABASE_URL}/rest/v1/).'
  x-bilingual: All editorial content is bilingual EN/ZH via *_alt fields; lang/lang_alt mark each edition's language.
servers:
- url: https://bidclub.ai
tags:
- name: Pitch
paths:
  /api/pitch/feed:
    get:
      operationId: getPitchFeedPage
      summary: Paginated published pitches
      description: Public Tweetroom pitches using opaque keyset cursors. Follow nextCursor until it is null. Cursor identity includes the sort, asset filter, and normalized bilingual search query; a cursor cannot be reused with different filters.
      parameters:
      - name: sort
        in: query
        required: false
        schema:
          type: string
          enum:
          - date
          - quality
          default: date
      - name: asset
        in: query
        required: false
        schema:
          type: string
          enum:
          - all
          - stock
          - token
          default: all
      - name: query
        in: query
        required: false
        description: At most 512 characters. Whitespace-separated terms are ANDed across author, ticker, and English/Chinese thesis text; one leading $ per term is ignored.
        schema:
          type: string
          maxLength: 512
          default: ''
      - name: cursor
        in: query
        required: false
        description: Opaque continuation token returned by the preceding page.
        schema:
          type: string
          maxLength: 8192
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 50
      responses:
        '200':
          description: One ready page, which may legitimately be empty.
          headers:
            Cache-Control:
              schema:
                type: string
                const: no-store
            Access-Control-Allow-Origin:
              schema:
                type: string
                const: '*'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PitchPage'
        '400':
          description: 'Malformed, duplicate, unknown, or mismatched input. Body: {"error":"invalid_request"}.'
          headers:
            Cache-Control:
              schema:
                type: string
                const: no-store
            Access-Control-Allow-Origin:
              schema:
                type: string
                const: '*'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: The database or validated public projection is unavailable. The response has an empty posts array, a null cursor, and unavailable status.
          headers:
            Cache-Control:
              schema:
                type: string
                const: no-store
            Access-Control-Allow-Origin:
              schema:
                type: string
                const: '*'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PitchPage'
      tags:
      - Pitch
    options:
      summary: CORS preflight
      description: Returns 204 with permissive CORS headers. No body.
      responses:
        '204':
          description: Preflight accepted.
      tags:
      - Pitch
      operationId: optionsApiPitchFeed
      x-operation-id-source: derived
  /api/pitch/auth/request:
    post:
      operationId: requestPitchAdminOtp
      summary: Request a Pitch administrator email code
      description: Returns the same generic response for every valid email shape. Only pre-provisioned administrators are eligible; this flow should not create users.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              required:
              - email
              properties:
                email:
                  type: string
                  format: email
                  maxLength: 254
      responses:
        '202':
          description: Generic accepted response.
          headers:
            Cache-Control:
              schema:
                type: string
                const: private, no-store
          content:
            application/json:
              schema:
                type: object
                required:
                - message
                properties:
                  message:
                    type: string
        '400':
          description: Malformed request.
          headers:
            Cache-Control:
              schema:
                type: string
                const: private, no-store
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Origin rejected.
          headers:
            Cache-Control:
              schema:
                type: string
                const: private, no-store
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '413':
          description: Body exceeds 8 KiB.
          headers:
            Cache-Control:
              schema:
                type: string
                const: private, no-store
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '415':
          description: Content type is not application/json.
          headers:
            Cache-Control:
              schema:
                type: string
                const: private, no-store
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Pitch
  /api/pitch/auth/verify:
    post:
      operationId: verifyPitchAdminOtp
      summary: Verify a Pitch administrator email code
      description: Creates a private server-managed session only after fresh identity verification and current administrator membership.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              required:
              - email
              - token
              properties:
                email:
                  type: string
                  format: email
                  maxLength: 254
                token:
                  type: string
                  pattern: ^[0-9]{6}$
      responses:
        '200':
          description: Authenticated.
          headers:
            Cache-Control:
              schema:
                type: string
                const: private, no-store
          content:
            application/json:
              schema:
                type: object
                required:
                - authenticated
                properties:
                  authenticated:
                    const: true
        '400':
          description: Malformed request.
          headers:
            Cache-Control:
              schema:
                type: string
                const: private, no-store
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Origin, code, identity, or membership rejected.
          headers:
            Cache-Control:
              schema:
                type: string
                const: private, no-store
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '413':
          description: Body exceeds 8 KiB.
          headers:
            Cache-Control:
              schema:
                type: string
                const: private, no-store
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '415':
          description: Content type is not application/json.
          headers:
            Cache-Control:
              schema:
                type: string
                const: private, no-store
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Pitch
  /api/pitch/auth/logout:
    post:
      operationId: logoutPitchAdmin
      summary: End the Pitch administrator session
      responses:
        '200':
          description: Session cleared.
          headers:
            Cache-Control:
              schema:
                type: string
                const: private, no-store
          content:
            application/json:
              schema:
                type: object
                required:
                - authenticated
                properties:
                  authenticated:
                    const: false
        '403':
          description: Origin rejected.
          headers:
            Cache-Control:
              schema:
                type: string
                const: private, no-store
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Provider or transport unavailable; the browser session may remain active.
          headers:
            Cache-Control:
              schema:
                type: string
                const: private, no-store
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Pitch
  /api/pitch/tracking:
    post:
      operationId: importPitchTrackingHandles
      summary: Import tracked Pitch handles
      description: Verified administrators may add up to 1,000 literal handles or profile URLs in at most 64 KiB. This updates tracking only and never starts retrieval.
      parameters:
      - name: Idempotency-Key
        in: header
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              required:
              - input
              properties:
                input:
                  type: string
                  maxLength: 65536
      responses:
        '200':
          description: Audited import result; no retrieval started.
          headers:
            Cache-Control:
              schema:
                type: string
                const: private, no-store
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                required:
                - added
                - duplicates
                - invalid
                - handles
                properties:
                  added:
                    type: array
                    items:
                      type: string
                  duplicates:
                    type: array
                    items:
                      type: string
                  invalid:
                    type: array
                    items:
                      type: object
                      required:
                      - value
                      - reason
                      properties:
                        value:
                          type: string
                        reason:
                          type: string
                  handles:
                    type: array
                    items:
                      type: string
        '400':
          description: Malformed body or operation identifier.
          headers:
            Cache-Control:
              schema:
                type: string
                const: private, no-store
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Origin, identity, or membership rejected.
          headers:
            Cache-Control:
              schema:
                type: string
                const: private, no-store
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Operation identifier conflict.
          headers:
            Cache-Control:
              schema:
                type: string
                const: private, no-store
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '413':
          description: Import input exceeds 64 KiB.
          headers:
            Cache-Control:
              schema:
                type: string
                const: private, no-store
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '415':
          description: Content type is not application/json.
          headers:
            Cache-Control:
              schema:
                type: string
                const: private, no-store
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Authentication or tracking storage unavailable.
          headers:
            Cache-Control:
              schema:
                type: string
                const: private, no-store
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Pitch
components:
  schemas:
    Pitch:
      type: object
      additionalProperties: false
      required:
      - id
      - handle
      - date
      - asset
      - tickers
      - title
      - quality
      - bullets
      - sourceUrl
      - wordCount
      - chinese
      properties:
        id:
          type: string
          pattern: ^[0-9]+$
        handle:
          type: string
          pattern: ^@[A-Za-z0-9_]{1,15}$
        date:
          type: string
          format: date-time
        asset:
          type: string
          enum:
          - stock
          - token
        tickers:
          type: array
          maxItems: 1
          items:
            type: string
            minLength: 1
            maxLength: 40
        title:
          type: string
          minLength: 1
          maxLength: 200
        quality:
          type: number
          minimum: 0
          maximum: 1
        bullets:
          type: array
          minItems: 2
          maxItems: 4
          items:
            type: string
            minLength: 1
        sourceUrl:
          type: string
          format: uri
        wordCount:
          type: integer
          minimum: 0
        chinese:
          type:
          - object
          - 'null'
          additionalProperties: false
          required:
          - title
          - bullets
          properties:
            title:
              type: string
              minLength: 1
              maxLength: 200
            bullets:
              type: array
              minItems: 2
              maxItems: 4
              items:
                type: string
                minLength: 1
    PitchPage:
      type: object
      additionalProperties: false
      required:
      - posts
      - nextCursor
      - status
      properties:
        posts:
          type: array
          items:
            $ref: '#/components/schemas/Pitch'
        nextCursor:
          type:
          - string
          - 'null'
        status:
          type: string
          enum:
          - ready
          - unavailable
    Error:
      type: object
      required:
      - error
      properties:
        error:
          type: string