AutoShort Videos API

Create, read and delete videos.

Operations 4

POST /api/v1/videos/generate Create (enqueue) a video from a topic #
GET /api/v1/videos List your videos, newest first #
GET /api/v1/videos/{id} Get the status and details of one video #
DELETE /api/v1/videos/{id} Permanently delete one of your videos #

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/autoshort-org:autoshort-org-videos-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

autoshort-org-videos-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: AutoShort Videos API
  version: 1.0.0
  summary: Create AI short videos from a topic or a reviewed script, poll them to completion, and read credits.
  description: 'Authenticate every request with an API key: `Authorization: Bearer sk_live_...` (create one in the dashboard). Rendering is asynchronous: POST /api/v1/videos/generate (or render a draft) returns a video id; poll GET /api/v1/videos/{id} every 20-30 seconds until status is COMPLETED or FAILED, or register a webhook for video.completed / video.failed. Every render costs credits; a short balance is refused up front (402 INSUFFICIENT_CREDITS). Nothing in this API buys credits. Exception, no key needed: POST /api/x402/videos buys one video per call with an x402 USDC payment (tag "Pay per call (x402)", only when enabled on the server). Director mode (drafts) lets you agree a script first: creating and editing a draft is free, only POST /api/v1/drafts/{id}/render charges. The same capabilities (plus product ads, image-to-video, series and publishing) are available over MCP at https://autoshort.org/api/mcp (OAuth 2.1 or API key). Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset. Error bodies look like {"error": "...", "code": "..."}; some add top-level fields (see each endpoint). Not covered here: API key management (needs a signed-in dashboard session) and the web-app routes behind the MCP product-ad / image-to-video / chat tools.'
  termsOfService: https://autoshort.org/en/terms
  contact:
    name: AutoShort
    url: https://autoshort.org
servers:
- url: https://autoshort.org
security:
- bearerAuth: []
tags:
- name: Videos
  description: Create, read and delete videos.
paths:
  /api/v1/videos/generate:
    post:
      operationId: createVideo
      tags:
      - Videos
      summary: Create (enqueue) a video from a topic
      description: 'Returns immediately with status PENDING; the script is AI-written from the topic. Costs credits (estimatedCredits in the response; the balance is checked before anything is created). The topic goes through a content-safety gate: a refused topic gets 400 CONTENT_POLICY and nothing is charged. The key''s daily agent spending cap also applies. To control the exact words, use drafts instead. Requires the "video:create" API key scope.'
      security:
      - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateVideoRequest'
      responses:
        '201':
          description: Video queued.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateVideoResponse'
        '400':
          description: INVALID_TOPIC, TOPIC_TOO_LONG, INVALID_NICHE, INVALID_DURATION, INVALID_QUALITY, INVALID_ART_STYLE, INVALID_JSON, an image error code (e.g. IMAGES_EXCEED_SCENES), or CONTENT_POLICY (the topic was refused by content safety; the body also has contentClass).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid API key (code UNAUTHORIZED).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          description: 'INSUFFICIENT_CREDITS. details: creditsAvailable, creditsNeeded, costBreakdown, topUpUrl.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: QUALITY_NOT_IN_PLAN, INSUFFICIENT_SCOPE (details.manageKeysUrl), or the IP is not allowlisted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: USER_NOT_FOUND.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '423':
          description: 'CONTENT_HOLD: the account is on a content-safety hold or suspended.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: 'Per-key hourly rate limit exceeded (code RATE_LIMIT_EXCEEDED, Retry-After header). Endpoints that can spend credits can also answer 429 DAILY_SPEND_CAP_EXCEEDED: the key''s daily agent spending cap is reached, nothing was started or charged; the body has dailyCreditCap, spentToday, creditsNeeded and resetsInSeconds (the cap resets at 00:00 UTC).'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: 'CONTENT_CHECK_UNAVAILABLE: the safety check could not run, so the request fails closed (retryable: true). Nothing was charged.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /api/v1/videos:
    get:
      operationId: listVideos
      tags:
      - Videos
      summary: List your videos, newest first
      description: Paginated; optionally filtered by status. Never charges credits. Requires the "video:read" API key scope.
      security:
      - bearerAuth: []
      parameters:
      - name: limit
        in: query
        schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 20
        description: Max videos to return.
      - name: offset
        in: query
        schema:
          type: integer
          minimum: 0
          default: 0
        description: Videos to skip.
      - name: status
        in: query
        schema:
          type: string
          enum:
          - PENDING
          - GENERATING_SCRIPT
          - GENERATING_VOICE
          - FETCHING_MEDIA
          - RENDERING
          - COMPLETED
          - FAILED
          - DRAFT
        description: Optional status filter (case-insensitive).
      responses:
        '200':
          description: A page of videos.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListVideosResponse'
        '400':
          description: INVALID_STATUS.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid API key (code UNAUTHORIZED).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: The key lacks the required scope (code INSUFFICIENT_SCOPE; details.manageKeysUrl says where to make a new key) or the IP is not allowlisted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: 'Per-key hourly rate limit exceeded (code RATE_LIMIT_EXCEEDED, Retry-After header). Endpoints that can spend credits can also answer 429 DAILY_SPEND_CAP_EXCEEDED: the key''s daily agent spending cap is reached, nothing was started or charged; the body has dailyCreditCap, spentToday, creditsNeeded and resetsInSeconds (the cap resets at 00:00 UTC).'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /api/v1/videos/{id}:
    get:
      operationId: getVideo
      tags:
      - Videos
      summary: Get the status and details of one video
      description: 'While rendering, estimatedCompletionTime (seconds) may be present. COMPLETED adds videoUrl, thumbnailUrl, duration and script. FAILED adds error. A video waiting for credits carries blockedReason INSUFFICIENT_CREDITS with creditsNeeded, creditsAvailable and topUpUrl: stop polling and top up. Never charges credits. Requires the "video:read" API key scope.'
      security:
      - bearerAuth: []
      parameters:
      - name: id
        in: path
        required: true
        description: Video id returned by create / render / list.
        schema:
          type: string
      responses:
        '200':
          description: The video.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VideoDetail'
        '401':
          description: Missing or invalid API key (code UNAUTHORIZED).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: The key lacks the required scope (code INSUFFICIENT_SCOPE; details.manageKeysUrl says where to make a new key) or the IP is not allowlisted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: VIDEO_NOT_FOUND (also returned for a video owned by someone else).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: 'Per-key hourly rate limit exceeded (code RATE_LIMIT_EXCEEDED, Retry-After header). Endpoints that can spend credits can also answer 429 DAILY_SPEND_CAP_EXCEEDED: the key''s daily agent spending cap is reached, nothing was started or charged; the body has dailyCreditCap, spentToday, creditsNeeded and resetsInSeconds (the cap resets at 00:00 UTC).'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    delete:
      operationId: deleteVideo
      tags:
      - Videos
      summary: Permanently delete one of your videos
      description: Irreversible. Does not refund credits. Requires the "video:delete" API key scope. The default key scopes do not include it.
      security:
      - bearerAuth: []
      parameters:
      - name: id
        in: path
        required: true
        description: Video id.
        schema:
          type: string
      responses:
        '200':
          description: Deleted.
          content:
            application/json:
              schema:
                type: object
                required:
                - message
                - id
                properties:
                  message:
                    type: string
                  id:
                    type: string
        '401':
          description: Missing or invalid API key (code UNAUTHORIZED).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: The key lacks the required scope (code INSUFFICIENT_SCOPE; details.manageKeysUrl says where to make a new key) or the IP is not allowlisted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: VIDEO_NOT_FOUND.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: 'Per-key hourly rate limit exceeded (code RATE_LIMIT_EXCEEDED, Retry-After header). Endpoints that can spend credits can also answer 429 DAILY_SPEND_CAP_EXCEEDED: the key''s daily agent spending cap is reached, nothing was started or charged; the body has dailyCreditCap, spentToday, creditsNeeded and resetsInSeconds (the cap resets at 00:00 UTC).'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    CreateVideoResponse:
      type: object
      required:
      - id
      - status
      - statusUrl
      - estimatedCredits
      properties:
        id:
          type: string
        status:
          type: string
          enum:
          - PENDING
          - GENERATING_SCRIPT
          - GENERATING_VOICE
          - FETCHING_MEDIA
          - RENDERING
          - COMPLETED
          - FAILED
          - DRAFT
        topic:
          type: string
        niche:
          type:
          - string
          - 'null'
        duration:
          type: integer
        artStyle:
          type: string
        createdAt:
          type: string
          format: date-time
        estimatedCompletionTime:
          type: integer
          description: Seconds.
        estimatedCredits:
          type: integer
          description: Credits this render costs.
        statusUrl:
          type: string
          description: Path to poll.
        warnings:
          type: array
          items:
            type: string
    ListVideosResponse:
      type: object
      properties:
        videos:
          type: array
          items:
            $ref: '#/components/schemas/VideoSummary'
        pagination:
          type: object
          properties:
            total:
              type: integer
            limit:
              type: integer
            offset:
              type: integer
            hasMore:
              type: boolean
    VideoSummary:
      type: object
      properties:
        id:
          type: string
        title:
          type: string
        slug:
          type:
          - string
          - 'null'
        status:
          type: string
          enum:
          - PENDING
          - GENERATING_SCRIPT
          - GENERATING_VOICE
          - FETCHING_MEDIA
          - RENDERING
          - COMPLETED
          - FAILED
          - DRAFT
        videoUrl:
          type:
          - string
          - 'null'
        thumbnailUrl:
          type:
          - string
          - 'null'
        duration:
          type:
          - number
          - 'null'
        targetDuration:
          type:
          - number
          - 'null'
        language:
          type:
          - string
          - 'null'
        artStyle:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    CreateVideoRequest:
      type: object
      required:
      - topic
      properties:
        topic:
          type: string
          maxLength: 500
          description: What the video is about. The script is AI-generated from it.
        niche:
          type: string
          enum:
          - MOTIVATIONAL
          - SCARY_STORIES
          - AI_FACTS
          - HISTORY_FACTS
          - REDDIT_STORIES
          - LIFE_HACKS
          - CRYPTO_FINANCE
          - PSYCHOLOGY_FACTS
          - PERSONAL_FINANCE
          - FUNNY_STORIES
          - LOVE_STORIES
          - AI_MUSIC_COVERS
          - KIDS_SONGS
          - ABSURD_PROCESS
          description: Content niche (default MOTIVATIONAL). GET /api/v1/scripts/niches lists the ones currently offered; the enum here is every value the server parses.
        duration:
          type: integer
          enum:
          - 5
          - 8
          - 15
          - 30
          - 60
          - 90
          default: 30
          description: 'Target length in seconds (the delivered video is approximate: a target, not a guarantee). Other values get 400 INVALID_DURATION.'
        artStyle:
          type: string
          enum:
          - AUTOSHORTS
          - LEGO
          - COMIC_BOOK
          - DISNEY_TOON
          - STUDIO_GHIBLI
          - PIXEL_ART
          - WATERCOLOR
          - OIL_PAINTING
          - CYBERPUNK
          - FANTASY
          - ANIME
          - STICKMAN
          default: AUTOSHORTS
        language:
          type: string
          description: BCP-47 code such as "en", "vi", or "auto" (default).
        quality:
          type: string
          enum:
          - HD_720
          - FULL_HD_1080
          description: Optional. Asking for more than the plan renders gives 403 QUALITY_NOT_IN_PLAN.
        userImageFiles:
          type: array
          items:
            type: string
          description: File names of images you already ingested through MCP (image_urls); image i goes to scene i. Not URLs.
        webhookUrl:
          type: string
          deprecated: true
          description: Ignored; register a webhook once with POST /api/v1/webhooks (the response carries a warning).
        metadata:
          type: object
          additionalProperties: true
          description: Free-form data stored with the video.
    VideoDetail:
      type: object
      required:
      - id
      - status
      properties:
        id:
          type: string
        status:
          type: string
          enum:
          - PENDING
          - GENERATING_SCRIPT
          - GENERATING_VOICE
          - FETCHING_MEDIA
          - RENDERING
          - COMPLETED
          - FAILED
          - DRAFT
        title:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        language:
          type: string
        artStyle:
          type: string
        targetDuration:
          type:
          - integer
          - 'null'
        duration:
          type: number
        videoUrl:
          type: string
        thumbnailUrl:
          type: string
        script:
          type: string
        estimatedCompletionTime:
          type: integer
          description: Seconds; only while waiting to start.
        error:
          type: string
          description: Only when FAILED.
        blockedReason:
          type: string
          enum:
          - INSUFFICIENT_CREDITS
        blockedMessage:
          type: string
        creditsNeeded:
          type: integer
        creditsAvailable:
          type: integer
        topUpUrl:
          type: string
        aiGenerated:
          type: boolean
          description: True when the video must be labelled AI-generated.
        userImages:
          type: object
          additionalProperties: true
          description: Which of your images went to which scene.
        nextStep:
          type: string
          description: Present on DRAFT videos.
      additionalProperties: true
    Error:
      type: object
      required:
      - error
      properties:
        error:
          type: string
          description: Human-readable message.
        code:
          type: string
          description: Stable machine-readable code, e.g. INSUFFICIENT_CREDITS.
        details:
          type: object
          additionalProperties: true
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API key (sk_live_...)
      description: AutoShort API key. Create one in the dashboard; pick the scopes the endpoints below ask for.
externalDocs:
  description: Developer portal
  url: https://autoshort.org/en/developers