> ## Documentation Index > Fetch the complete documentation index at: https://www.canva.dev/docs/extensions/llms.txt > Use this file to discover all available pages before exploring further. # POST /publish/resources/upload API reference for the "/publish/resources/upload" endpoint. When a user publishes their design via a [publish extension](https://www.canva.dev/docs/extensions/extensions/publish-extensions/), Canva sends a `POST` request to the following endpoint: ```bash /publish/resources/upload ``` The purpose of the request is to upload the user's design to the destination platform. The body of the request includes an array of [assets](https://www.canva.dev/#asset). If a user publishes their design as a JPG or PNG, each page of the design is a separate asset. If the user publishes their design as a PDF or PPTX, the entire design is a single asset. Each asset has a URL, which the extension must use to download the asset and upload it to the destination platform. ## Notes * Extensions must respond to this request within 8 seconds. * When sending this request, Canva replaces `` with the extension's **Base URL**. You can configure the **Base URL** via the Developer Portal. * If a user publishes a design that contains embedded media, such as a YouTube video or Instagram photo, Canva temporarily caches that media. If the user re-publishes their design, any changes to the underlying media (for example, a new thumbnail for a YouTube video) may not be reflected in the published design. The cache duration is approximately 24 hours. * Extensions should meet the [UX guidelines](https://www.canva.dev/docs/extensions/distribution/ux-guidelines/publish-extensions/). ## Request ### Endpoint ```bash POST /publish/resources/upload ``` ### Headers | Property | Type | Required | Description | | -------------------- | ------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------ | | `X-Canva-Signatures` | string | Yes | A comma-separated list of request signatures. The name of this header is sometimes lowercase (e.g. `x-canva-signatures`). | | `X-Canva-Timestamp` | string | Yes | The UNIX timestamp (in seconds) of when Canva sent the request. The name of this header is sometimes lowercase (e.g. `x-canva-timestamp`). | ### Body #### Properties | Property | Type | Required | Description | | ---------- | --------------------------------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------- | | `message` | string | No | A message the user provides before publishing their design. To use this feature, enable **Requires custom message** via the Developer Portal. | | `parent` | string | No | The ID of the selected container. | | `user` | string | Yes | The ID of the user. | | `brand` | string | Yes | The ID of the user's team. | | `label` | string | Yes | The type of extension that sent the request. | | `assets` | Array\<[Asset](https://www.canva.dev/#asset)> | Yes | The assets to upload to the destination platform. | | `designId` | string | Yes | The ID of the user's design. This ID does not change if the user republishes their design. | #### Example ```json { "assets": [], "user": "", "brand": "", "label": "