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

# Request a presigned upload URL for artwork

<Warning>
  This endpoint is in beta and subject to change.
</Warning>

<Warning>
  **When you `PUT` the bytes to `uploadUrl`, you must send two headers that are baked into the URL's signature** — omit or mismatch either and Google Cloud Storage rejects the upload with `403 SignatureDoesNotMatch`:

  * `Content-Type` — must equal the `contentType` you sent in this request.
  * `x-goog-content-length-range: 0,<size>` — must use the same `size` (in bytes) you sent in this request.

  The `PUT` goes **directly to Google Cloud Storage**, not Fourthwall — don't send your Fourthwall credentials with it, and note the URL is short-lived.
</Warning>


## OpenAPI

````yaml openapi/channel-api.json POST /channel-api/v1.0/upload-url
openapi: 3.1.0
info:
  title: Fourthwall APIs
  description: Service used for management of orders, carts, and payments.
  termsOfService: https://fourthwall.com/terms-of-service
  contact:
    name: Backend team
    url: https://fourthwall.com
    email: backend@fourthwall.com
  version: unspecified
servers:
  - url: https://api.fourthwall.com
    description: Production server
security: []
externalDocs:
  description: OpenAPI documentation
  url: https://docs.fourthwall.com
paths:
  /channel-api/v1.0/upload-url:
    post:
      tags:
        - Previews
        - Shops
      summary: Request a presigned upload URL for artwork
      operationId: requestUploadUrl
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/com.fourthwall.app.channel.shop.model.UploadUrlXRequest
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/com.fourthwall.app.channel.shop.model.UploadUrlXResponse
components:
  schemas:
    com.fourthwall.app.channel.shop.model.UploadUrlXRequest:
      type: object
      properties:
        contentType:
          type: string
          description: MIME type of the file.
        fileName:
          type: string
          description: Name of the file.
        size:
          type: integer
          format: int64
          description: >-
            Size of the file in bytes. Must match the
            `x-goog-content-length-range` header sent when uploading the bytes
            to `uploadUrl`.
      required:
        - contentType
        - fileName
        - size
      title: Upload Url X Request
    com.fourthwall.app.channel.shop.model.UploadUrlXResponse:
      type: object
      properties:
        uploadUrl:
          type: string
        fileUrl:
          type: string
      required:
        - fileUrl
        - uploadUrl
      title: Upload Url X Response

````