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

# Request presigned URL for large files

> Returns a temporary AWS S3 presigned URL that allows direct file uploads up to 500MB without hitting the Vercel payload limit. After successfully uploading to the provided `url`, you must call `POST /deliverables` with the returned `key` and `product_id` to finalize the attachment.

### Important Note on Headers
When you perform the `PUT` request to the returned S3 `url`, you **must** include the exact same `Content-Type` header that you specified in your initial request to this endpoint (e.g. `Content-Type: application/zip`). If the header is missing or does not match, AWS will reject the upload with a 403 Forbidden error.



## OpenAPI

````yaml post /deliverables/presigned
openapi: 3.0.0
info:
  title: Blink API
  description: Comprehensive API documentation for Blink.
  version: 1.0.0
servers:
  - url: https://api.blink.store/v1
security: []
tags:
  - name: Categories
    description: Endpoints for fetching store product categories
paths:
  /deliverables/presigned:
    post:
      tags:
        - Deliverables
      summary: Request presigned URL for large files
      description: >-
        Returns a temporary AWS S3 presigned URL that allows direct file uploads
        up to 500MB without hitting the Vercel payload limit. After successfully
        uploading to the provided `url`, you must call `POST /deliverables` with
        the returned `key` and `product_id` to finalize the attachment.


        ### Important Note on Headers

        When you perform the `PUT` request to the returned S3 `url`, you
        **must** include the exact same `Content-Type` header that you specified
        in your initial request to this endpoint (e.g. `Content-Type:
        application/zip`). If the header is missing or does not match, AWS will
        reject the upload with a 403 Forbidden error.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                filename:
                  type: string
                  description: The name of the file to be uploaded (e.g. big-video.mp4)
                contentType:
                  type: string
                  description: >-
                    The MIME type of the file (e.g. video/mp4). Defaults to
                    application/octet-stream
              required:
                - filename
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  url:
                    type: string
                    description: The temporary URL to PUT your file to
                  key:
                    type: string
                    description: >-
                      The file_key to use in the subsequent POST /deliverables
                      call

````