> ## Documentation Index
> Fetch the complete documentation index at: https://docs.videobgremover.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a new video processing job

> Create a new job for video background removal. You can either:
1. **File Upload**: Provide filename and content_type to get an upload URL
2. **URL Download**: Provide video_url to download from a public URL

**File Limits:**
- Formats: MP4, MOV, WebM
- Size: 1GB maximum
- Duration: No hard limit (processing time varies)

Note: Provide either (filename + content_type) OR video_url, not both.




## OpenAPI

````yaml https://videobgremover.com/openapi.yaml post /v1/jobs
openapi: 3.0.3
info:
  title: VideoBGRemover API
  version: 1.6.0
  description: >
    Remove backgrounds from videos using AI-powered processing. 


    The VideoBGRemover API allows you to:

    - Upload videos or provide URLs for processing

    - Remove backgrounds with customizable options

    - Generate transparent videos in multiple formats

    - Compose videos on custom backgrounds (server-side)

    - Track processing status and manage credits


    ## Authentication

    All API requests require authentication using an API key in the `X-Api-Key`
    header.


    ## Credits System

    Video processing costs 1 credit per second of video duration.
  contact:
    name: VideoBGRemover API Support
    url: https://videobgremover.com/contact
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
servers:
  - url: https://api.videobgremover.com
    description: Production server
security:
  - ApiKeyAuth: []
tags:
  - name: Jobs
    description: Video processing job management
  - name: Credits
    description: Credit balance and usage
  - name: API
    description: API metadata and documentation
  - name: Webhooks
    description: Webhook delivery and history
paths:
  /v1/jobs:
    post:
      tags:
        - Jobs
      summary: Create a new video processing job
      description: >
        Create a new job for video background removal. You can either:

        1. **File Upload**: Provide filename and content_type to get an upload
        URL

        2. **URL Download**: Provide video_url to download from a public URL


        **File Limits:**

        - Formats: MP4, MOV, WebM

        - Size: 1GB maximum

        - Duration: No hard limit (processing time varies)


        Note: Provide either (filename + content_type) OR video_url, not both.
      operationId: createJob
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/CreateJobFileUpload'
                - $ref: '#/components/schemas/CreateJobUrlDownload'
            examples:
              file_upload:
                summary: File Upload Method
                value:
                  filename: my-video.mp4
                  content_type: video/mp4
              url_download:
                summary: URL Download Method
                value:
                  video_url: https://example.com/video.mp4
              webm_upload:
                summary: WebM File Upload
                value:
                  filename: my-video.webm
                  content_type: video/webm
              mov_upload:
                summary: MOV File Upload
                value:
                  filename: my-video.mov
                  content_type: video/mov
      responses:
        '200':
          description: Job created successfully
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/JobCreatedFileUpload'
                  - $ref: '#/components/schemas/JobCreatedUrlDownload'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '413':
          $ref: '#/components/responses/PayloadTooLarge'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  schemas:
    CreateJobFileUpload:
      type: object
      required:
        - filename
        - content_type
      properties:
        filename:
          type: string
          description: Name of the video file
          example: my-video.mp4
        content_type:
          type: string
          description: MIME type of the video file (1GB max size)
          enum:
            - video/mp4
            - video/mov
            - video/webm
          example: video/mp4
    CreateJobUrlDownload:
      type: object
      required:
        - video_url
      properties:
        video_url:
          type: string
          format: uri
          description: Public URL of the video to download and process (1GB max size)
          example: https://example.com/video.mp4
    JobCreatedFileUpload:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Unique job identifier
        status:
          type: string
          enum:
            - created
          description: Job status
        filename:
          type: string
          description: Original filename
        content_type:
          type: string
          description: File content type
        upload_url:
          type: string
          format: uri
          description: Signed URL for uploading the video file
        expires_at:
          type: string
          format: date-time
          description: Upload URL expiration time
        created_at:
          type: string
          format: date-time
          description: Job creation timestamp
        instructions:
          type: object
          properties:
            method:
              type: string
              enum:
                - PUT
            headers:
              type: object
              properties:
                Content-Type:
                  type: string
            note:
              type: string
    JobCreatedUrlDownload:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Unique job identifier
        status:
          type: string
          enum:
            - uploaded
          description: Job status (ready for processing)
        filename:
          type: string
          description: Extracted video title
        content_type:
          type: string
          description: Detected content type
        created_at:
          type: string
          format: date-time
          description: Job creation timestamp
        video_length_seconds:
          type: number
          description: Video duration in seconds
        message:
          type: string
          description: Success message
    APIError:
      type: object
      properties:
        error:
          type: string
          description: Error message
        details:
          type: string
          description: Additional error details
  responses:
    BadRequest:
      description: Bad request - Invalid parameters
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/APIError'
          examples:
            invalid_background:
              summary: Invalid background color
              value:
                error: >-
                  Invalid background color format. Must be hex color like
                  #FF0000
            missing_params:
              summary: Missing required parameters
              value:
                error: Must provide either (filename + content_type) OR video_url
    Unauthorized:
      description: Unauthorized - Invalid or missing API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/APIError'
          example:
            error: Invalid API key
    PayloadTooLarge:
      description: Payload too large - File exceeds 1GB limit
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/APIError'
          examples:
            file_too_large:
              summary: Video file too large
              value:
                error: 'Video too large: 1250.5MB'
            url_too_large:
              summary: URL video too large
              value:
                error: 'Video too large: 1250.5MB'
    InternalError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/APIError'
          example:
            error: Internal server error
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-Api-Key
      description: API key with format `vbr_` followed by 32 characters

````