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

# Create real estate shot video jobs in bulk

> Create one shot video job for each unique shot ID. This is the normal route for generating selected shots. For each shot, the backend creates a missing image description, creates a missing animation prompt from the description, camera movement, visual effect prompt, format, and duration, applies the saved crop, and starts image to video generation. A completed job saves its output as both selected_video and rendered_video. Use the project status route to poll all shots.



## OpenAPI

````yaml https://backend.tensorpix.ai/api/schema/ post /api/v2/real-estate/projects/{project_id}/shot-video-jobs/
openapi: 3.1.0
info:
  title: TensorPix OpenAPI Documentation
  version: 1.1.0
  termsOfService: https://tensorpix.ai/terms-conditions
  contact:
    name: TensorPix Dev Team
    email: devs@tensorpix.ai
servers:
  - url: https://backend.tensorpix.ai
security: []
tags:
  - name: tensorshots-projects
    description: Create, read, update, and delete TensorShots projects.
    x-displayName: Projects
    x-group: TensorShots Projects
  - name: tensorshots-shots
    description: Manage TensorShots project shots and shot voiceovers.
    x-displayName: Shots
    x-group: TensorShots Shots
  - name: tensorshots-assets
    description: Manage TensorShots audio, image, video, and shared assets.
    x-displayName: Assets
    x-group: TensorShots Assets
  - name: tensorshots-jobs
    description: Start, list, read, and delete TensorShots generation and render jobs.
    x-displayName: Jobs
    x-group: TensorShots Jobs
  - name: tensorshots-settings
    description: Manage TensorShots styles, music, voices, and prompt templates.
    x-displayName: Settings
    x-group: TensorShots Settings
  - name: real-estate-projects
    description: >-
      Manage real estate projects, property data, render settings, previews, and
      cost estimates.
    x-displayName: Projects
    x-group: Real Estate Projects
  - name: real-estate-shots
    description: >-
      Manage ordered project shots, first frames, generation prompts, crops,
      timing, speed, and transitions.
    x-displayName: Shots
    x-group: Real Estate Shots
  - name: real-estate-assets
    description: >-
      Manage project image assets, video assets, logos, and uploaded background
      music.
    x-displayName: Assets
    x-group: Real Estate Assets
  - name: real-estate-voiceover
    description: >-
      Manage project voiceover text, generated audio, caption timing, and text
      limits.
    x-displayName: Voiceover
    x-group: Real Estate Voiceover
  - name: real-estate-jobs
    description: >-
      Start, list, read, and poll property import, image edit, shot video, full
      video, and render jobs.
    x-displayName: Jobs
    x-group: Real Estate Jobs
  - name: real-estate-branding
    description: >-
      Manage reusable agent profiles and brand kits, then copy them into
      projects.
    x-displayName: Branding
    x-group: Real Estate Branding
  - name: real-estate-templates
    description: List intro and outro templates and manage project template images.
    x-displayName: Templates
    x-group: Real Estate Templates
externalDocs:
  url: https://docs.tensorpix.ai
  description: Check out the full TensorPix documentation.
paths:
  /api/v2/real-estate/projects/{project_id}/shot-video-jobs/:
    post:
      tags:
        - real-estate-jobs
      summary: Create real estate shot video jobs in bulk
      description: >-
        Create one shot video job for each unique shot ID. This is the normal
        route for generating selected shots. For each shot, the backend creates
        a missing image description, creates a missing animation prompt from the
        description, camera movement, visual effect prompt, format, and
        duration, applies the saved crop, and starts image to video generation.
        A completed job saves its output as both selected_video and
        rendered_video. Use the project status route to poll all shots.
      operationId: real_estate_shot_video_job_bulk_create_post
      parameters:
        - in: path
          name: project_id
          schema:
            type: string
            format: uuid
          required: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RealEstateShotVideoBulkCreateRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/RealEstateShotVideoBulkCreateRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/RealEstateShotVideoBulkCreateRequest'
        required: true
      responses:
        '202':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RealEstateShotVideoBulkCreateResponse'
          description: ''
        '400':
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail: {}
                  error_id:
                    type: string
                    format: uuid
                additionalProperties: true
          description: ''
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthenticatedError'
          description: ''
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
          description: ''
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundError'
          description: ''
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericError'
          description: ''
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitError'
          description: ''
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
          description: ''
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RealEstateShotVideoBulkCreateResponse'
          description: ''
      security:
        - tokenAuth: []
        - jwtAuth: []
components:
  schemas:
    RealEstateShotVideoBulkCreateRequest:
      type: object
      description: Validate a bounded, non-empty set of unique project shot IDs.
      properties:
        shot_ids:
          type: array
          items:
            type: string
            format: uuid
          description: Unique IDs of project shots to generate.
          maxItems: 60
          minItems: 1
      required:
        - shot_ids
    RealEstateShotVideoBulkCreateResponse:
      type: object
      description: Serialize parent jobs accepted by one bulk request.
      properties:
        jobs:
          type: array
          items:
            $ref: '#/components/schemas/RealEstateShotVideoJobStatus'
          readOnly: true
          description: Created shot video jobs.
        active_count:
          type: integer
          readOnly: true
          description: Queued or processing jobs.
        failed_count:
          type: integer
          readOnly: true
          description: Jobs that failed to queue.
      required:
        - active_count
        - failed_count
        - jobs
    UnauthenticatedError:
      type: object
      description: Serializer stub used for simple documented error payloads.
      properties:
        detail:
          type: string
        error_id:
          type: string
          format: uuid
      required:
        - detail
        - error_id
    ForbiddenError:
      type: object
      description: Serializer stub used for simple documented error payloads.
      properties:
        detail:
          type: string
        error_id:
          type: string
          format: uuid
      required:
        - detail
        - error_id
    NotFoundError:
      type: object
      description: Serializer stub used for simple documented error payloads.
      properties:
        detail:
          type: string
        error_id:
          type: string
          format: uuid
      required:
        - detail
        - error_id
    GenericError:
      type: object
      properties:
        detail:
          type: string
      required:
        - detail
    RateLimitError:
      type: object
      description: Serializer stub used for simple documented error payloads.
      properties:
        detail:
          type: string
        error_id:
          type: string
          format: uuid
      required:
        - detail
        - error_id
    ServerError:
      type: object
      description: Describe errors created by the global exception handler.
      properties:
        error:
          type: string
        error_id:
          type: string
          format: uuid
      required:
        - error
        - error_id
    RealEstateShotVideoJobStatus:
      type: object
      description: Serialize compact parent-job state for project polling.
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        real_estate_shot:
          type: string
          format: uuid
          readOnly: true
          description: Real-estate shot whose video this job generates.
        status:
          allOf:
            - $ref: '#/components/schemas/TensorshotsJobStatusEnum'
          readOnly: true
          description: |-
            Current job status.

            * `queued` - Queued
            * `processing` - Processing
            * `expired` - Expired
            * `cancelled` - Cancelled
            * `completed` - Completed
            * `failed` - Failed
        error_message:
          type: string
          readOnly: true
          description: Error details if job failed.
        created_at:
          type: string
          format: date-time
          readOnly: true
          description: Datetime when the record was created.
        updated_at:
          type: string
          format: date-time
          readOnly: true
          description: Datetime when the record was last updated.
        started_at:
          type: string
          format: date-time
          readOnly: true
          description: When job processing started.
        finished_at:
          type:
            - string
            - 'null'
          format: date-time
          readOnly: true
          description: When the job processing successfully finished.
        cost_credits:
          type: string
          format: decimal
          pattern: ^-?\d{0,6}(?:\.\d{0,4})?$
          readOnly: true
          description: Job cost in 🪙 Credits.
      required:
        - cost_credits
        - created_at
        - error_message
        - finished_at
        - id
        - real_estate_shot
        - started_at
        - status
        - updated_at
    TensorshotsJobStatusEnum:
      enum:
        - queued
        - processing
        - expired
        - cancelled
        - completed
        - failed
      type: string
      description: |-
        * `queued` - Queued
        * `processing` - Processing
        * `expired` - Expired
        * `cancelled` - Cancelled
        * `completed` - Completed
        * `failed` - Failed
  securitySchemes:
    tokenAuth:
      type: apiKey
      in: header
      name: Authorization
      description: Token-based authentication with required prefix "Token"
    jwtAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.