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

# Create a product-photography shoot



## OpenAPI

````yaml /openapi.yaml post /v1/shoots
openapi: 3.1.0
info:
  title: Cherry Shot API
  version: 1.0.0
  description: >
    Generate studio-quality product photography and video ads programmatically.
    Authenticate with an API key (`Authorization: Bearer cs_...` or `x-api-key:
    cs_...`). Generation is asynchronous: create a shoot or video, then poll it
    until `status` is `completed`. Credits are charged the same as in the app.
servers:
  - url: https://ybhqmgyprapjxomdxifs.supabase.co/functions/v1/api
    description: Production
security:
  - ApiKeyAuth: []
  - BearerAuth: []
paths:
  /v1/shoots:
    post:
      summary: Create a product-photography shoot
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - product_image_urls
                - style
              properties:
                product_image_urls:
                  type: array
                  items:
                    type: string
                    format: uri
                  description: Public http(s) URLs of your product image(s).
                style:
                  type: string
                  enum:
                    - classic
                    - minimal
                    - luxury
                    - loud_luxury
                    - magazine
                    - editorial
                    - avant_garde
                    - element
                    - influencer
                    - lifestyle
                mode:
                  type: string
                  enum:
                    - product_only
                    - with_model
                  default: product_only
                model_url:
                  type: string
                  format: uri
                  description: >-
                    Required when mode is with_model. A public image URL of the
                    model.
                shots:
                  type: integer
                  enum:
                    - 1
                    - 4
                    - 6
                  default: 4
                  description: >-
                    6 is honored only for classic/minimal; otherwise clamped to
                    4.
                aspect_ratio:
                  type: string
                  default: '1:1'
                quality:
                  type: string
                  enum:
                    - standard
                    - pro
                    - 4k
                  default: standard
                  description: standard = 1 credit/image, pro = 2, 4k = 4.
                background_color:
                  type: string
                callback_url:
                  type: string
                  format: uri
                  description: Optional; reserved for push delivery (poll in the meantime).
      responses:
        '201':
          description: Shoot created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Shoot'
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/InsufficientCredits'
components:
  schemas:
    Shoot:
      type: object
      properties:
        id:
          type: string
        object:
          type: string
          example: shoot
        status:
          type: string
          enum:
            - pending
            - analyzing
            - analyzed
            - generating
            - completed
            - failed
        shots:
          type: integer
        shots_adjusted:
          type: boolean
          description: >-
            Present and true when a requested 6 was clamped to 4 (non
            classic/minimal style).
        credits_used:
          type: integer
        credits_remaining:
          type: integer
        images:
          type: array
          items:
            type: object
            properties:
              url:
                type: string
                nullable: true
              thumbnail_url:
                type: string
                nullable: true
              status:
                type: string
                nullable: true
        created_at:
          type: string
          format: date-time
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
            message:
              type: string
  responses:
    ValidationError:
      description: Invalid request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Missing or invalid API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    InsufficientCredits:
      description: Not enough credits
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
    BearerAuth:
      type: http
      scheme: bearer

````