BitterClip API

BitterClip API as documented publicly: 15 operations. Contract generated from the documentation by API Evangelist (2026-11-02); not the provider's own document.

Operations 15

GET /api/brand-templates GET /api/brand-templates #
GET /api/clip-projects GET /api/clip-projects #
POST /api/clip-projects POST /api/clip-projects #
GET /api/clip-projects/{projectid}/update-visibility GET /api/clip-projects/{projectid}/update-visibility #
GET /api/exportable-clips Get Clips #
POST /api/post-tasks POST /api/post-tasks #
POST /api/publish-schedules POST /api/publish-schedules #
DELETE /api/publish-schedules/{scheduleid} DELETE /api/publish-schedules/{scheduleId} #
GET /api/social-accounts GET /api/social-accounts #
POST /api/social-copy-jobs POST /api/social-copy-jobs #
GET /api/social-copy-jobs/{jobid} GET /api/social-copy-jobs/{jobId} #
GET /mcp GET https://app.bitterclip.com/mcp returns 405 #
GET /v1/videos GET /v1/videos #
POST /v1/videos POST /v1/videos #
POST /v1/videos/captions POST /v1/videos/captions #

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/bitterclip-com:bitterclip-com-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

bitterclip-com-openapi-generated.yml Raw ↑
openapi: 3.1.0
info:
  title: BitterClip API
  version: '2026-11-02'
  description: 'GENERATED FROM DOCUMENTATION by API Evangelist on 2026-11-02: 15 operation(s) read from 12 public documentation page(s) (each
    operation names its page in x-source). This is not the provider''s published contract; BitterClip has published no machine-readable contract
    that the pipeline could find. Engine: local.'
  x-evidence-tiers:
    code-example: 11
    documentation: 4
    pages-with-code: 9
    pages-read: 12
  x-generated-from: documentation
  x-provenance: generated
  x-authored-by: API Evangelist
  x-generated: '2026-11-02'
  x-generator: generate-contract-from-docs.py
  x-engine: local
  x-sources:
  - https://help.opus.pro/api-reference/limitation
  - https://bitterclip.com/docs/assistants/install
  - https://bitterclip.com/docs/assistants/install.md
  - https://captions.ai/help/docs/api/video-captions
  - https://captions.ai/help/docs/api/video-generation
  - https://help.opus.pro/api-reference/quickstart
  - https://help.opus.pro/api-reference/brand-template
  - https://help.opus.pro/api-reference/endpoints/social-posting/overview
  - https://help.opus.pro/api-reference/playground/create-project
  - https://help.opus.pro/api-reference/playground/get-clips
  - https://help.opus.pro/api-reference/playground/get-brand-templates
  - https://help.opus.pro/api-reference/playground/share-project
servers:
- url: https://app.bitterclip.com
paths:
  /api/brand-templates:
    get:
      operationId: get_api_brand_templates
      tags:
      - Api
      summary: GET /api/brand-templates
      x-source: https://help.opus.pro/api-reference/brand-template
      parameters:
      - name: q
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl --request GET  --url https://api.opus.pro/api/brand-templates?q=mine  --header 'Authorization: <API_KEY>' \n Get id of\
          \ the brand template you want to use. [ \n { \n \"templateId\" : \"your-brand-template-id\" , \n \"name\" : \"Karaoke Template\" , \n\
          \ ...other properties \n } \n ] \n 3 Create project with brand template Creating project with brand template For a high level of customization,\
          \ you can create and"
  /api/clip-projects:
    get:
      operationId: get_api_clip_projects
      tags:
      - Api
      summary: GET /api/clip-projects
      x-source: https://help.opus.pro/api-reference/playground/create-project
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl);\nif ($err) {\n echo \"cURL Error #:\" . $err;\n} else {\n echo $response;\n} package main\nimport (\n \"fmt\"\n \"strings\"\
          \n \"net/http\"\n \"io\"\n)\nfunc main() {\n url := \"https://api.opus.pro/api/clip-projects\"\n payload := strings.NewReader(\"{\\\
          n \\\"videoUrl\\\": \\\"https://www.youtube.com/watch?v=LXvv6CbGg8A\\\",\\n \\\"conclusionActions\\\": [\\n {\\n \\\"type\\\": \\\"\
          EMAIL\\\",\\n \\\"notifyFailure\\\": true,\\n \\\"email\\\": \\\"opuscl"
    post:
      operationId: post_api_clip_projects
      tags:
      - Api
      summary: POST /api/clip-projects
      x-source: https://help.opus.pro/api-reference/quickstart
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiClipProjectsRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl --request POST  --url https://api.opus.pro/api/clip-projects  --header 'Authorization: Bearer <API_KEY>'  --header 'Content-Type:\
          \ application/json'  --data '{ \n \"videoUrl\": \"https://www.youtube.com/watch?v=tEXaoozFRes\" \n }' "
  /api/clip-projects/{projectid}/update-visibility:
    get:
      operationId: get_api_clip_projects_projectid_update_visibility
      tags:
      - Api
      summary: GET /api/clip-projects/{projectid}/update-visibility
      x-source: https://help.opus.pro/api-reference/playground/share-project
      parameters:
      - name: projectid
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl);\nif ($err) {\n echo \"cURL Error #:\" . $err;\n} else {\n echo $response;\n} package main\nimport (\n \"fmt\"\n \"strings\"\
          \n \"net/http\"\n \"io\"\n)\nfunc main() {\n url := \"https://api.opus.pro/api/clip-projects/{projectId}/update-visibility\"\n payload\
          \ := strings.NewReader(\"{\\n \\\"visibility\\\": \\\"PUBLIC\\\"\\n}\")\n req, _ := http.NewRequest(\"POST\", url, payload)\n req.Header.Add(\"\
          Authorization\", \"Bearer <token>\")\n re"
  /api/exportable-clips:
    get:
      operationId: get_api_exportable_clips
      tags:
      - Api
      summary: Get Clips
      x-source: https://help.opus.pro/api-reference/quickstart
      parameters:
      - name: q
        in: query
        required: true
        schema:
          type: string
      - name: projectId
        in: query
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/post-tasks:
    post:
      operationId: post_api_post_tasks
      tags:
      - Api
      summary: POST /api/post-tasks
      x-source: https://help.opus.pro/api-reference/limitation
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/publish-schedules:
    post:
      operationId: post_api_publish_schedules
      tags:
      - Api
      summary: POST /api/publish-schedules
      x-source: https://help.opus.pro/api-reference/limitation
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/publish-schedules/{scheduleid}:
    delete:
      operationId: delete_api_publish_schedules_scheduleid
      tags:
      - Api
      summary: DELETE /api/publish-schedules/{scheduleId}
      x-source: https://help.opus.pro/api-reference/limitation
      parameters:
      - name: scheduleid
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/social-accounts:
    get:
      operationId: get_api_social_accounts
      tags:
      - Api
      summary: GET /api/social-accounts
      x-source: https://help.opus.pro/api-reference/limitation
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/social-copy-jobs:
    post:
      operationId: post_api_social_copy_jobs
      tags:
      - Api
      summary: POST /api/social-copy-jobs
      x-source: https://help.opus.pro/api-reference/limitation
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/social-copy-jobs/{jobid}:
    get:
      operationId: get_api_social_copy_jobs_jobid
      tags:
      - Api
      summary: GET /api/social-copy-jobs/{jobId}
      x-source: https://help.opus.pro/api-reference/limitation
      parameters:
      - name: jobid
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /mcp:
    get:
      operationId: get_mcp
      tags:
      - Mcp
      summary: GET https://app.bitterclip.com/mcp returns 405
      x-source: https://bitterclip.com/docs/assistants/install
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/videos:
    get:
      operationId: get_v1_videos
      tags:
      - Videos
      summary: GET /v1/videos
      x-source: https://captions.ai/help/docs/api/video-generation
      responses:
        '200':
          description: Success (shape read from the example response on the page)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetV1VideosResponse'
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl import requests \n url = \"https://api.mirage.app/v1/videos\" \n headers = { \n \"x-api-key\" : \"<api-key>\" \n } \n files\
          \ = { \n \"image_reference\" : open ( \"portrait.jpg\" , \"rb\" ), \n \"audio_reference\" : open ( \"voice.mp3\" , \"rb\" ) \n } \n\
          \ data = { \n \"model\" : \"mirage-avatar-x\" \n } \n response = requests.post(url, headers = headers, files = files, data = data) \n\
          \ print (response.json()) \n const formData = n"
    post:
      operationId: post_v1_videos
      tags:
      - Videos
      summary: POST /v1/videos
      x-source: https://captions.ai/help/docs/api/video-generation
      responses:
        '201':
          description: Success (shape read from the example response on the page)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostV1VideosResponse'
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl --request POST  --url https://api.mirage.app/v1/videos  --header 'Content-Type: multipart/form-data'  --header 'x-api-key:\
          \ <api-key>'  --form model=mirage-avatar-x  --form image_reference=@portrait.jpg  --form audio_reference=@voice.mp3 \n ​ Video reference\
          \ \n Python TypeScript cURL import requests \n url = \"https://api.mirage.app/v1/videos\" \n headers = { \n \"x-api-key\" : \"<api-key>\"\
          \ \n } \n files "
  /v1/videos/captions:
    post:
      operationId: post_v1_videos_captions
      tags:
      - Videos
      summary: POST /v1/videos/captions
      x-source: https://captions.ai/help/docs/api/video-captions
      responses:
        '201':
          description: Success (shape read from the example response on the page)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostV1VideosCaptionsResponse'
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl --request POST  --url https://api.mirage.app/v1/videos/captions  --header 'Content-Type: multipart/form-data'  --header\
          \ 'x-api-key: <api-key>'  --form caption_template_id=ctpl_DxflLOnuKkb198FNdI9E  --form video=@input.mp4 \n Response (example) \n { \n\
          \ \"id\" : \"video_cap789xyz\" , \n \"object\" : \"video\" , \n \"status\" : \"PROCESSING\" , \n \"created_at\" : 1730822600 , \n \"\
          progress\" : 0 , \n \"source_video_id\""
components:
  schemas:
    PostApiClipProjectsRequest:
      type: object
      properties:
        videoUrl:
          type: string
    GetV1VideosResponse:
      type: object
      properties:
        id:
          type: string
        object:
          type: string
        completed_at:
          type: integer
        created_at:
          type: integer
        model:
          type: string
        progress:
          type: integer
        status:
          type: string
        error:
          type:
          - string
          - 'null'
    PostV1VideosResponse:
      type: object
      properties:
        id:
          type: string
        object:
          type: string
        completed_at:
          type: integer
        created_at:
          type: integer
        model:
          type: string
        progress:
          type: integer
        status:
          type: string
        error:
          type:
          - string
          - 'null'
    PostV1VideosCaptionsResponse:
      type: object
      properties:
        id:
          type: string
        object:
          type: string
        status:
          type: string
        created_at:
          type: integer
        progress:
          type: integer
        source_video_id:
          type:
          - string
          - 'null'
        caption_template_id:
          type: string
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
security:
- apiKey: []
tags:
- name: Api
- name: Mcp
- name: Videos