> ## 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 a real estate shot

> Create one empty shot in one owned real estate project.



## OpenAPI

````yaml https://backend.tensorpix.ai/api/schema/ post /api/v2/real-estate/projects/{project_id}/shots/
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: Create, read, update, and delete real estate projects.
    x-displayName: Projects
    x-group: Real Estate Projects
  - name: real-estate-shots
    description: Create, read, update, and delete real estate project shots.
    x-displayName: Shots
    x-group: Real Estate Shots
  - name: real-estate-assets
    description: Manage image, video, logo, and music assets for real estate projects.
    x-displayName: Assets
    x-group: Real Estate Assets
  - name: real-estate-voiceover
    description: Manage voiceover text, audio, and text limits for real estate projects.
    x-displayName: Voiceover
    x-group: Real Estate Voiceover
  - name: real-estate-jobs
    description: Start, list, read, and cancel jobs for real estate projects and shots.
    x-displayName: Jobs
    x-group: Real Estate Jobs
  - name: real-estate-branding
    description: Manage reusable agents and brand kits for real estate projects.
    x-displayName: Branding
    x-group: Real Estate Branding
  - name: real-estate-templates
    description: List video templates for real estate projects.
    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}/shots/:
    post:
      tags:
        - real-estate-shots
      summary: Create a real estate shot
      description: Create one empty shot in one owned real estate project.
      operationId: real_estate_shot_list_create_post
      parameters:
        - in: path
          name: project_id
          schema:
            type: string
            format: uuid
          required: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateRealEstateShot'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/CreateRealEstateShot'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CreateRealEstateShot'
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RealEstateShot'
          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: ''
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitError'
          description: ''
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
          description: ''
      security:
        - tokenAuth: []
        - jwtAuth: []
components:
  schemas:
    CreateRealEstateShot:
      type: object
      description: Serializer for creating a real-estate shot.
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
      required:
        - id
    RealEstateShot:
      type: object
      description: Serializer for real-estate shot detail responses.
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        project_real_estate:
          type: string
          format: uuid
          readOnly: true
          description: Real-estate project this shot belongs to.
        order:
          type: integer
          readOnly: true
        created_at:
          type: string
          format: date-time
          readOnly: true
          description: Datetime when the record was created.
        image:
          oneOf:
            - $ref: '#/components/schemas/ImageAsset'
            - type: 'null'
          readOnly: true
        first_frame:
          $ref: '#/components/schemas/ImageAsset'
        original_first_frame:
          $ref: '#/components/schemas/ImageAsset'
        animation_prompt:
          $ref: '#/components/schemas/TextAsset'
        vfx_prompt:
          type: string
          readOnly: true
          description: Original VFX prompt sent by the client for this shot.
        description_job:
          type: string
          format: uuid
          readOnly: true
        camera_movement:
          allOf:
            - $ref: '#/components/schemas/CameraMovementEnum'
          readOnly: true
          description: |-
            Camera motion directive used for real-estate shot video generation.

            * `auto` - Auto
            * `static` - Static
            * `pan_left` - Pan Left
            * `pan_right` - Pan Right
            * `orbit_left_to_right` - Orbit Left To Right
            * `orbit_right_to_left` - Orbit Right To Left
            * `truck_left` - Truck Left
            * `truck_right` - Truck Right
            * `dolly_in` - Dolly In
            * `dolly_out` - Dolly Out
            * `tilt_up` - Tilt Up
            * `tilt_down` - Tilt Down
        status:
          allOf:
            - $ref: '#/components/schemas/RealEstateShotStatusEnum'
          readOnly: true
          description: >-
            Whether this shot needs new video generation or can reuse the
            current selected video.


            * `generation_requested` - Generation Requested

            * `generated` - Generated
        requested_duration_s:
          type: number
          format: double
          description: >-
            Return the selected trim duration or the default when timing is
            incomplete.
          readOnly: true
        requested_duration_mode:
          allOf:
            - $ref: '#/components/schemas/RequestedDurationModeEnum'
          readOnly: true
          description: |-
            Whether requested_duration_s came from auto or manual input.

            * `auto` - Auto
            * `manual` - Manual
        crop_x:
          type:
            - number
            - 'null'
          format: double
          readOnly: true
          description: Saved crop left coordinate in relative image units from 0.0 to 1.0.
        crop_y:
          type:
            - number
            - 'null'
          format: double
          readOnly: true
          description: Saved crop top coordinate in relative image units from 0.0 to 1.0.
        crop_width:
          type:
            - number
            - 'null'
          format: double
          readOnly: true
          description: Saved crop width in relative image units from 0.0 to 1.0.
        crop_height:
          type:
            - number
            - 'null'
          format: double
          readOnly: true
          description: Saved crop height in relative image units from 0.0 to 1.0.
        video_start_time_s:
          type: number
          format: double
          readOnly: true
          description: Start time in seconds of the whole shot composition.
        video_end_time_s:
          type:
            - number
            - 'null'
          format: double
          readOnly: true
          description: End time in seconds of the whole shot composition.
        selected_video:
          $ref: '#/components/schemas/VideoAsset'
        rendered_video:
          $ref: '#/components/schemas/VideoAsset'
      required:
        - animation_prompt
        - camera_movement
        - created_at
        - crop_height
        - crop_width
        - crop_x
        - crop_y
        - description_job
        - first_frame
        - id
        - image
        - order
        - original_first_frame
        - project_real_estate
        - rendered_video
        - requested_duration_mode
        - requested_duration_s
        - selected_video
        - status
        - vfx_prompt
        - video_end_time_s
        - video_start_time_s
    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
    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
    ImageAsset:
      type: object
      description: Serializer for ImageAsset with basic fields.
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        name:
          type: string
          readOnly: true
          description: Human-readable asset name.
        created_at:
          type: string
          format: date-time
          readOnly: true
          description: Datetime when the record was created.
        file:
          type:
            - string
            - 'null'
          format: uri
          readOnly: true
          description: >-
            Image file stored on S3. Pre-signed URL may expire. To generate a
            new URL, call the endpoint again. If the field is `null`, the image
            hasn't been completely uploaded.
        thumbnail:
          type:
            - string
            - 'null'
          format: uri
          readOnly: true
          description: Image thumbnail
        external_url:
          type:
            - string
            - 'null'
          format: uri
          readOnly: true
          description: External URL if image is hosted elsewhere (not on our S3).
        width:
          type: integer
          readOnly: true
          description: Image width in pixels.
        height:
          type: integer
          readOnly: true
          description: Image height in pixels.
        file_size:
          type: integer
          readOnly: true
          description: File size in bytes. Null for text-based images.
        tags:
          type: array
          items:
            type: string
          readOnly: true
        name_tag:
          type: string
          readOnly: true
          description: >-
            Tag identifier for the asset that's based on asset's name. Used on
            frontend to reference the asset '@Parrot-1')
          pattern: ^[-a-zA-Z0-9_]+$
      required:
        - created_at
        - external_url
        - file
        - file_size
        - height
        - id
        - name
        - name_tag
        - tags
        - thumbnail
        - width
    TextAsset:
      type: object
      description: Serializer for TextAsset with basic fields.
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        created_at:
          type: string
          format: date-time
          readOnly: true
          description: Datetime when the record was created.
        text:
          type: string
          readOnly: true
          description: Generated text content.
      required:
        - created_at
        - id
        - text
    CameraMovementEnum:
      enum:
        - auto
        - static
        - pan_left
        - pan_right
        - orbit_left_to_right
        - orbit_right_to_left
        - truck_left
        - truck_right
        - dolly_in
        - dolly_out
        - tilt_up
        - tilt_down
      type: string
      description: |-
        * `auto` - Auto
        * `static` - Static
        * `pan_left` - Pan Left
        * `pan_right` - Pan Right
        * `orbit_left_to_right` - Orbit Left To Right
        * `orbit_right_to_left` - Orbit Right To Left
        * `truck_left` - Truck Left
        * `truck_right` - Truck Right
        * `dolly_in` - Dolly In
        * `dolly_out` - Dolly Out
        * `tilt_up` - Tilt Up
        * `tilt_down` - Tilt Down
    RealEstateShotStatusEnum:
      enum:
        - generation_requested
        - generated
      type: string
      description: |-
        * `generation_requested` - Generation Requested
        * `generated` - Generated
    RequestedDurationModeEnum:
      enum:
        - auto
        - manual
      type: string
      description: |-
        * `auto` - Auto
        * `manual` - Manual
    VideoAsset:
      type: object
      description: Serializer for VideoAsset with basic fields.
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        name:
          type: string
          readOnly: true
          description: Human-readable asset name.
        name_tag:
          type: string
          readOnly: true
          description: >-
            Tag identifier for the asset that's based on asset's name. Used on
            frontend to reference the asset '@Parrot-1')
          pattern: ^[-a-zA-Z0-9_]+$
        tags:
          type: array
          items:
            type: string
          readOnly: true
        created_at:
          type: string
          format: date-time
          readOnly: true
          description: Datetime when the record was created.
        file:
          type:
            - string
            - 'null'
          format: uri
          readOnly: true
          description: >-
            Video file stored on S3. Pre-signed URL may expire. To generate a
            new URL, call the endpoint again. If the field is `null`, it means
            the video hasn't been completely uploaded.
        external_url:
          type:
            - string
            - 'null'
          format: uri
          readOnly: true
          description: External URL if video is hosted elsewhere (not on our S3).
        thumbnail:
          type:
            - string
            - 'null'
          format: uri
          readOnly: true
          description: Image thumbnail of the video
        last_frame:
          type:
            - string
            - 'null'
          format: uri
          readOnly: true
          description: Last frame of the video as an image.
        width:
          type: integer
          readOnly: true
          description: Video width in pixels.
        height:
          type: integer
          readOnly: true
          description: Video height in pixels.
        file_size:
          type: integer
          readOnly: true
          description: File size in bytes.
        num_frames:
          type: integer
          readOnly: true
          description: Total number of frames in the video.
        framerate:
          type: number
          format: double
          readOnly: true
          description: Framerate in frames per second (fps).
        duration_s:
          type: number
          format: double
          description: Calculate video duration in seconds.
          readOnly: true
        bitrate:
          type:
            - integer
            - 'null'
          readOnly: true
          description: Video bitrate in bits per second.
        codec_id:
          type:
            - string
            - 'null'
          readOnly: true
          description: Video codec identifier (e.g., 'h264', 'vp9').
        bit_depth:
          type:
            - integer
            - 'null'
          readOnly: true
          description: Bit depth of the video.
        chroma_subsampling:
          type:
            - string
            - 'null'
          readOnly: true
          description: Chroma subsampling format (e.g., '4:2:0').
        color_space:
          type:
            - string
            - 'null'
          readOnly: true
          description: Color space (e.g., 'bt709', 'bt2020').
      required:
        - bit_depth
        - bitrate
        - chroma_subsampling
        - codec_id
        - color_space
        - created_at
        - duration_s
        - external_url
        - file
        - file_size
        - framerate
        - height
        - id
        - last_frame
        - name
        - name_tag
        - num_frames
        - tags
        - thumbnail
        - width
  securitySchemes:
    tokenAuth:
      type: apiKey
      in: header
      name: Authorization
      description: Token-based authentication with required prefix "Token"
    jwtAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````