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

# Notify signed upload complete

> Signal that the client has finished uploading bytes to a signed upload URL returned by `/enterprise/api/upload_media`.
This starts asynchronous verification so the media can be used for generation.


## Usage Example

Call this after uploading bytes to the `upload_url` returned by `upload_media` with `input.type: "signed_url"`.

```bash theme={null}
curl -X POST https://api.viddyscribe.com/enterprise/api/notify_upload_complete \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "media_id": "550e8400-e29b-41d4-a716-446655440000",
    "gcs_path": "users/user_123/videos/video.mp4"
  }'
```


## OpenAPI

````yaml post /enterprise/api/notify_upload_complete
openapi: 3.0.3
info:
  title: ViddyScribe Enterprise API
  version: 1.0.0
  description: >
    Enterprise API for ViddyScribe video processing and audio description
    generation.


    ## Authentication

    All endpoints require API key authentication via the `X-API-Key` header.


    ## Workflow

    1. Upload media using `/upload_media` - Returns `media_id`

    2. Generate text with `/generate_ad_text`, video with `/generate_ad_video`,
    or audio with `/generate_ad_audio` - Returns `job_id`

    3. Poll for results using `/get_results` - Returns status and outputs when
    done
  contact:
    name: ViddyScribe Support
    email: hello@viddyscribe.com
servers:
  - url: https://api.viddyscribe.com
    description: Production server
security:
  - ApiKeyAuth: []
tags:
  - name: Media
    description: Media upload operations
  - name: Processing
    description: Video processing operations
  - name: Results
    description: Results retrieval operations
paths:
  /enterprise/api/notify_upload_complete:
    post:
      tags:
        - Media
      summary: Notify signed upload complete
      description: >
        Signal that the client has finished uploading bytes to a signed upload
        URL returned by `/enterprise/api/upload_media`.

        This starts asynchronous verification so the media can be used for
        generation.
      operationId: notifyUploadComplete
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - media_id
                - gcs_path
              properties:
                media_id:
                  type: string
                  format: uuid
                  description: Media ID returned by `upload_media`
                gcs_path:
                  type: string
                  description: Storage path returned by `upload_media`
            example:
              media_id: 550e8400-e29b-41d4-a716-446655440000
              gcs_path: users/user_123/videos/video.mp4
      responses:
        '202':
          description: Upload verification accepted
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: accepted
                    description: >-
                      Always `accepted` when the verification request was queued
                      successfully.
                  media_id:
                    type: string
                    format: uuid
                    description: Media being verified
              example:
                status: accepted
                media_id: 550e8400-e29b-41d4-a716-446655440000
        '400':
          description: Bad request - missing or invalid parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Media not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too many requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
          description: >-
            Primary error field. Many endpoints return a machine-readable value
            here, while some 409 media-state responses return a human-readable
            string and place the machine-readable identifier in code
        code:
          type: string
          description: >-
            Optional machine-readable identifier for responses that separate the
            human-readable error text from the stable error code, such as
            upload_not_ready or upload_failed
        upload_status:
          type: string
          description: >-
            Optional media upload status included on media-state conflict
            responses
        message:
          type: string
          description: Human-readable error message
        details:
          type: string
          description: Additional error details when available
      example:
        error: invalid_input
        message: video_id is required
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: >
        API key for authentication. Obtain from your team admin.


        Example: `X-API-Key:
        vsk_abc123def456ghi789jkl012mno345pqr678stu901vwx234yz`

````