Skip to content

Connect API — Brand Templates

Brand Templates Overview

The Canva Connect APIs for working with brand templates.

<Warning> Brand templates were migrated to use a new ID format in September 2025. If your integration stores brand template IDs, you'll need to migrate to use the new IDs. Old brand template IDs will continue to be accepted for 6 months to give you time to migrate to the new IDs. </Warning>

AVAILABILITY: To use the brand templates APIs, your integration must act on behalf of a user that's a member of a Canva Enterprise organization.

Brand templates, part of Canva Brand Kits, let teams create branded templates to help them keep all their designs consistent and aligned to their brand.

The Brand template APIs allow you to work with a team's brand templates.

For more information on setting up a brand template, see Canva Help — Publish designs as Brand Templates

Brand template APIs

  • List brand templates: List all the user's brand templates.
  • Get brand template: Get the metadata for one of the user's brand templates.
  • Get brand template dataset: Check if you can autofill a brand template and what information you can autofill. If the brand template has a dataset, you can autofill it with the Autofill APIs.

Get Brand Template

Get the metadata for one of the user's brand templates.

WARNING: Brand templates were migrated to use a new ID format in September 2025. If your integration stores brand template IDs, you'll need to migrate to use the new IDs. Old brand template IDs will continue to be accepted for 6 months to give you time to migrate to the new IDs.

AVAILABILITY: To use this API, your integration must act on behalf of a user that's a member of a Canva Enterprise organization.

Retrieves the metadata for a brand template.

HTTP method and URL path

GET https://api.canva.com/rest/v1/brand-templates/{brandTemplateId}

This operation is rate limited to 100 requests per minute for each user of your integration.

Authentication and authorization

This endpoint requires a valid access token that acts on behalf of a user.

Scopes

The access token must have all the following scopes (permissions):

  • brandtemplate:meta:read

Header parameters

<Prop.List> <Prop name="Authorization" type="string" required> Provides credentials to authenticate the request, in the form of a Bearer token.

For example: `Authorization: Bearer {token}`

</Prop> </Prop.List>

Path parameters

<Prop.List> <Prop name="brandTemplateId" type="string" required> The brand template ID. </Prop> </Prop.List>

Example request

Examples for using the /v1/brand-templates/{brandTemplateId} endpoint:

<Tabs storageKey="example.language" disableContentTransition> <Tab name="cURL"> sh curl --request GET 'https://api.canva.com/rest/v1/brand-templates/{brandTemplateId}' \ --header 'Authorization: Bearer {token}' </Tab>

<Tab name="Node.js"> ```js const fetch = require("node-fetch");

fetch("https://api.canva.com/rest/v1/brand-templates/{brandTemplateId}", {
  method: "GET",
  headers: {
    "Authorization": "Bearer {token}",
  },
})
  .then(async (response) => {
    const data = await response.json();
    console.log(data);
  })
  .catch(err => console.error(err));
```

</Tab>

<Tab name="Java"> ```java import java.io.IOException; import java.net.URI; import java.net.http.*;

public class ApiExample {
    public static void main(String[] args) throws IOException, InterruptedException {
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.canva.com/rest/v1/brand-templates/{brandTemplateId}"))
            .header("Authorization", "Bearer {token}")
            .method("GET", HttpRequest.BodyPublishers.noBody())
            .build();

        HttpResponse<String> response = HttpClient.newHttpClient().send(
            request,
            HttpResponse.BodyHandlers.ofString()
        );
        System.out.println(response.body());
    }
}
```

</Tab>

<Tab name="Python"> ```py import requests

headers = {
    "Authorization": "Bearer {token}"
}

response = requests.get("https://api.canva.com/rest/v1/brand-templates/{brandTemplateId}",
    headers=headers
)
print(response.json())
```

</Tab>

<Tab name="C#"> ```csharp using System.Net.Http;

var client = new HttpClient();
var request = new HttpRequestMessage
{
  Method = HttpMethod.Get,
  RequestUri = new Uri("https://api.canva.com/rest/v1/brand-templates/{brandTemplateId}"),
  Headers =
  {
    { "Authorization", "Bearer {token}" },
  },
};

using (var response = await client.SendAsync(request))
{
  response.EnsureSuccessStatusCode();
  var body = await response.Content.ReadAsStringAsync();
  Console.WriteLine(body);
};
```

</Tab>

<Tab name="Go"> ```go package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	url := "https://api.canva.com/rest/v1/brand-templates/{brandTemplateId}"
	req, _ := http.NewRequest("GET", url, nil)
	req.Header.Add("Authorization", "Bearer {token}")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)
	fmt.Println(string(body))
}
```

</Tab>

<Tab name="PHP"> ```php $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://api.canva.com/rest/v1/brand-templates/{brandTemplateId}", CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => array( 'Authorization: Bearer {token}', ), ));

$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);

if (empty($err)) {
  echo $response;
} else {
  echo "Error: " . $err;
}
```

</Tab>

<Tab name="Ruby"> ```ruby require 'net/http' require 'uri'

url = URI('https://api.canva.com/rest/v1/brand-templates/{brandTemplateId}')
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request['Authorization'] = 'Bearer {token}'

response = http.request(request)
puts response.read_body
```

</Tab> </Tabs>

Success response

If successful, the endpoint returns a 200 response with a JSON body with the following parameters:

<Prop.List> <Prop name="brand_template" type="BrandTemplate" required mode="output"> An object representing a brand template with associated metadata.

&lt;PillAccordion title={&lt;&gt;Properties of &lt;strong&gt;brand_template&lt;/strong&gt;&lt;/&gt;} defaultExpanded={true}&gt;
  &lt;Prop.List&gt;
    &lt;Prop name="id" type="string" required mode="output"&gt;
      The brand template ID.
    &lt;/Prop&gt;

    &lt;Prop name="title" type="string" required mode="output"&gt;
      The brand template title, as shown in the Canva UI.
    &lt;/Prop&gt;

    &lt;Prop name="view_url" type="string" required mode="output"&gt;
      A URL Canva users can visit to view the brand template.
    &lt;/Prop&gt;

    &lt;Prop name="create_url" type="string" required mode="output"&gt;
      A URL Canva users can visit to create a new design from the template.
    &lt;/Prop&gt;

    &lt;Prop name="created_at" type="integer" required mode="output"&gt;
      When the brand template was created, as a Unix timestamp
      (in seconds since the Unix Epoch).
    &lt;/Prop&gt;

    &lt;Prop name="updated_at" type="integer" required mode="output"&gt;
      When the brand template was last updated, as a Unix timestamp
      (in seconds since the Unix Epoch).
    &lt;/Prop&gt;

    &lt;Prop name="thumbnail" type="Thumbnail" mode="output"&gt;
      A thumbnail image representing the object.

      &lt;PillAccordion title={&lt;&gt;Properties of &lt;strong&gt;thumbnail&lt;/strong&gt;&lt;/&gt;}&gt;
        &lt;Prop.List&gt;
          &lt;Prop name="width" type="integer" required mode="output"&gt;
            The width of the thumbnail image in pixels.
          &lt;/Prop&gt;

          &lt;Prop name="height" type="integer" required mode="output"&gt;
            The height of the thumbnail image in pixels.
          &lt;/Prop&gt;

          &lt;Prop name="url" type="string" required mode="output"&gt;
            A URL for retrieving the thumbnail image.
            This URL expires after 15 minutes. This URL includes a query string
            that's required for retrieving the thumbnail.
          &lt;/Prop&gt;
        &lt;/Prop.List&gt;
      &lt;/PillAccordion&gt;
    &lt;/Prop&gt;
  &lt;/Prop.List&gt;
&lt;/PillAccordion&gt;

</Prop> </Prop.List>

Example response

json
{
  "brand_template": {
    "id": "DEMzWSwy3BI",
    "title": "Advertisement Template",
    "view_url": "https://www.canva.com/design/DAE35hE8FA4/view",
    "create_url": "https://www.canva.com/design/DAE35hE8FA4/remix",
    "thumbnail": {
      "width": 595,
      "height": 335,
      "url": "https://document-export.canva.com/Vczz9/zF9vzVtdADc/2/thumbnail/0001.png?<query-string>"
    },
    "created_at": 1704110400,
    "updated_at": 1719835200
  }
}

Get Brand Template Dataset

Check if you can autofill a brand template and what information you can autofill.

WARNING: Brand templates were migrated to use a new ID format in September 2025. If your integration stores brand template IDs, you'll need to migrate to use the new IDs. Old brand template IDs will continue to be accepted for 6 months to give you time to migrate to the new IDs.

AVAILABILITY: To use this API, your integration must act on behalf of a user that's a member of a Canva Enterprise organization.

Gets the dataset definition of a brand template. If the brand template contains autofill data fields, this API returns an object with the data field names and the type of data they accept.

Available data field types include:

  • Images
  • Text
  • Charts

You can autofill a brand template using the Create a design autofill job API.

WARNING: Chart data fields are a preview feature. There might be unannounced breaking changes to this feature which won't produce a new API version.

HTTP method and URL path

GET https://api.canva.com/rest/v1/brand-templates/{brandTemplateId}/dataset

This operation is rate limited to 100 requests per minute for each user of your integration.

Authentication and authorization

This endpoint requires a valid access token that acts on behalf of a user.

Scopes

The access token must have all the following scopes (permissions):

  • brandtemplate:content:read

Header parameters

<Prop.List> <Prop name="Authorization" type="string" required> Provides credentials to authenticate the request, in the form of a Bearer token.

For example: `Authorization: Bearer {token}`

</Prop> </Prop.List>

Path parameters

<Prop.List> <Prop name="brandTemplateId" type="string" required> The brand template ID. </Prop> </Prop.List>

Example request

Examples for using the /v1/brand-templates/{brandTemplateId}/dataset endpoint:

<Tabs storageKey="example.language" disableContentTransition> <Tab name="cURL"> sh curl --request GET 'https://api.canva.com/rest/v1/brand-templates/{brandTemplateId}/dataset' \ --header 'Authorization: Bearer {token}' </Tab>

<Tab name="Node.js"> ```js const fetch = require("node-fetch");

fetch("https://api.canva.com/rest/v1/brand-templates/{brandTemplateId}/dataset", {
  method: "GET",
  headers: {
    "Authorization": "Bearer {token}",
  },
})
  .then(async (response) => {
    const data = await response.json();
    console.log(data);
  })
  .catch(err => console.error(err));
```

</Tab>

<Tab name="Java"> ```java import java.io.IOException; import java.net.URI; import java.net.http.*;

public class ApiExample {
    public static void main(String[] args) throws IOException, InterruptedException {
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.canva.com/rest/v1/brand-templates/{brandTemplateId}/dataset"))
            .header("Authorization", "Bearer {token}")
            .method("GET", HttpRequest.BodyPublishers.noBody())
            .build();

        HttpResponse<String> response = HttpClient.newHttpClient().send(
            request,
            HttpResponse.BodyHandlers.ofString()
        );
        System.out.println(response.body());
    }
}
```

</Tab>

<Tab name="Python"> ```py import requests

headers = {
    "Authorization": "Bearer {token}"
}

response = requests.get("https://api.canva.com/rest/v1/brand-templates/{brandTemplateId}/dataset",
    headers=headers
)
print(response.json())
```

</Tab>

<Tab name="C#"> ```csharp using System.Net.Http;

var client = new HttpClient();
var request = new HttpRequestMessage
{
  Method = HttpMethod.Get,
  RequestUri = new Uri("https://api.canva.com/rest/v1/brand-templates/{brandTemplateId}/dataset"),
  Headers =
  {
    { "Authorization", "Bearer {token}" },
  },
};

using (var response = await client.SendAsync(request))
{
  response.EnsureSuccessStatusCode();
  var body = await response.Content.ReadAsStringAsync();
  Console.WriteLine(body);
};
```

</Tab>

<Tab name="Go"> ```go package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	url := "https://api.canva.com/rest/v1/brand-templates/{brandTemplateId}/dataset"
	req, _ := http.NewRequest("GET", url, nil)
	req.Header.Add("Authorization", "Bearer {token}")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)
	fmt.Println(string(body))
}
```

</Tab>

<Tab name="PHP"> ```php $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://api.canva.com/rest/v1/brand-templates/{brandTemplateId}/dataset", CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => array( 'Authorization: Bearer {token}', ), ));

$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);

if (empty($err)) {
  echo $response;
} else {
  echo "Error: " . $err;
}
```

</Tab>

<Tab name="Ruby"> ```ruby require 'net/http' require 'uri'

url = URI('https://api.canva.com/rest/v1/brand-templates/{brandTemplateId}/dataset')
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request['Authorization'] = 'Bearer {token}'

response = http.request(request)
puts response.read_body
```

</Tab> </Tabs>

Success response

If successful, the endpoint returns a 200 response with a JSON body with the following parameters:

<Prop.List> <Prop name="dataset" type="object" mode="output"> The dataset definition for the brand template. The dataset definition contains the data inputs available for use with the Create design autofill job API.

&lt;PillAccordion title={&lt;&gt;Properties of &lt;strong&gt;dataset&lt;/strong&gt;&lt;/&gt;} defaultExpanded={true}&gt;
  &lt;Prop.List&gt;
    &lt;Prop name="&lt;KEY&gt;" type="object of DataFields" mode="output" required&gt;
      A named data field that can be autofilled in the brand template.

      ```json
      {
        "cute_pet_image_of_the_day": {
          "type": "image"
        },
        "cute_pet_witty_pet_says": {
          "type": "text"
        },
        "cute_pet_sales_chart": {
          "type": "chart"
        }
      }
      ```

      &lt;Tabs&gt;
        &lt;Tab name="image"&gt;
          An image for a brand template. You can autofill the brand template with an image by providing its `asset_id`.

          &lt;Prop.List&gt;
            &lt;Prop name="type" type="string" required mode="output"&gt;
              &lt;Prop.Extras&gt;
                **Available values:** The only valid value is `image`.
              &lt;/Prop.Extras&gt;
            &lt;/Prop&gt;
          &lt;/Prop.List&gt;
        &lt;/Tab&gt;

        &lt;Tab name="text"&gt;
          Some text for a brand template. You can autofill the brand template with this value.

          &lt;Prop.List&gt;
            &lt;Prop name="type" type="string" required mode="output"&gt;
              &lt;Prop.Extras&gt;
                **Available values:** The only valid value is `text`.
              &lt;/Prop.Extras&gt;
            &lt;/Prop&gt;
          &lt;/Prop.List&gt;
        &lt;/Tab&gt;

        &lt;Tab name="chart"&gt;
          Chart data for a brand template. You can autofill the brand template with tabular data.

          WARNING: Chart data fields are a preview feature. There might be unannounced breaking changes to this feature which won't produce a new API version.

          &lt;Prop.List&gt;
            &lt;Prop name="type" type="string" required mode="output"&gt;
              &lt;Prop.Extras&gt;
                **Available values:** The only valid value is `chart`.
              &lt;/Prop.Extras&gt;
            &lt;/Prop&gt;
          &lt;/Prop.List&gt;
        &lt;/Tab&gt;
      &lt;/Tabs&gt;
    &lt;/Prop&gt;
  &lt;/Prop.List&gt;
&lt;/PillAccordion&gt;

</Prop> </Prop.List>

Example response

json
{
  "dataset": {
    "cute_pet_image_of_the_day": {
      "type": "image"
    },
    "cute_pet_witty_pet_says": {
      "type": "text"
    },
    "cute_pet_sales_chart": {
      "type": "chart"
    }
  }
}

List Brand Templates

List all the user's brand templates.

WARNING: Brand templates were migrated to use a new ID format in September 2025. If your integration stores brand template IDs, you'll need to migrate to use the new IDs. Old brand template IDs will continue to be accepted for 6 months to give you time to migrate to the new IDs.

AVAILABILITY: To use this API, your integration must act on behalf of a user that's a member of a Canva Enterprise organization.

Get a list of the brand templates the user has access to.

HTTP method and URL path

GET https://api.canva.com/rest/v1/brand-templates

This operation is rate limited to 100 requests per minute for each user of your integration.

Authentication and authorization

This endpoint requires a valid access token that acts on behalf of a user.

Scopes

The access token must have all the following scopes (permissions):

  • brandtemplate:meta:read

Header parameters

<Prop.List> <Prop name="Authorization" type="string" required> Provides credentials to authenticate the request, in the form of a Bearer token.

For example: `Authorization: Bearer {token}`

</Prop> </Prop.List>

Query parameters

<Prop.List> <Prop name="query" type="string"> Lets you search the brand templates available to the user using a search term or terms. </Prop>

<Prop name="continuation" type="string"> If the success response contains a continuation token, the user has access to more brand templates you can list. You can use this token as a query parameter and retrieve more templates from the list, for example /v1/brand-templates?continuation={continuation}. To retrieve all the brand templates available to the user, you might need to make multiple requests. </Prop>

<Prop name="limit" type="integer"> The number of brand templates to return.

&lt;Prop.Extras&gt;
  **Minimum:** `1`

  **Maximum:** `100`

  **Default value:** `25`
&lt;/Prop.Extras&gt;

</Prop>

<Prop name="ownership" type="string"> Filter the list of brand templates based on the user's ownership of the brand templates.

&lt;Prop.Extras&gt;
  **Default value:** `any`

  **Available values:**

  * `any`: Owned by and shared with the user.
  * `owned`: Owned by the user.
  * `shared`: Shared with the user.
&lt;/Prop.Extras&gt;

</Prop>

<Prop name="sort_by" type="string"> Sort the list of brand templates.

&lt;Prop.Extras&gt;
  **Default value:** `relevance`

  **Available values:**

  * `relevance`: Sort results using a relevance algorithm.
  * `modified_descending`: Sort results by the date last modified in descending order.
  * `modified_ascending`: Sort results by the date last modified in ascending order.
  * `title_descending`: Sort results by title in descending order.
  * `title_ascending`: Sort results by title in ascending order
&lt;/Prop.Extras&gt;

</Prop>

<Prop name="dataset" type="string"> Filter the list of brand templates based on the brand templates' dataset definitions. Brand templates with dataset definitions are mainly used with the Autofill APIs.

&lt;Prop.Extras&gt;
  **Default value:** `any`

  **Available values:**

  * `any`: Brand templates with and without dataset definitions.
  * `non_empty`: Brand templates with one or more data fields defined.
&lt;/Prop.Extras&gt;

</Prop> </Prop.List>

Example request

Examples for using the /v1/brand-templates endpoint:

<Tabs storageKey="example.language" disableContentTransition> <Tab name="cURL"> sh curl --request GET 'https://api.canva.com/rest/v1/brand-templates' \ --header 'Authorization: Bearer {token}' </Tab>

<Tab name="Node.js"> ```js const fetch = require("node-fetch");

fetch("https://api.canva.com/rest/v1/brand-templates", {
  method: "GET",
  headers: {
    "Authorization": "Bearer {token}",
  },
})
  .then(async (response) => {
    const data = await response.json();
    console.log(data);
  })
  .catch(err => console.error(err));
```

</Tab>

<Tab name="Java"> ```java import java.io.IOException; import java.net.URI; import java.net.http.*;

public class ApiExample {
    public static void main(String[] args) throws IOException, InterruptedException {
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.canva.com/rest/v1/brand-templates"))
            .header("Authorization", "Bearer {token}")
            .method("GET", HttpRequest.BodyPublishers.noBody())
            .build();

        HttpResponse<String> response = HttpClient.newHttpClient().send(
            request,
            HttpResponse.BodyHandlers.ofString()
        );
        System.out.println(response.body());
    }
}
```

</Tab>

<Tab name="Python"> ```py import requests

headers = {
    "Authorization": "Bearer {token}"
}

response = requests.get("https://api.canva.com/rest/v1/brand-templates",
    headers=headers
)
print(response.json())
```

</Tab>

<Tab name="C#"> ```csharp using System.Net.Http;

var client = new HttpClient();
var request = new HttpRequestMessage
{
  Method = HttpMethod.Get,
  RequestUri = new Uri("https://api.canva.com/rest/v1/brand-templates"),
  Headers =
  {
    { "Authorization", "Bearer {token}" },
  },
};

using (var response = await client.SendAsync(request))
{
  response.EnsureSuccessStatusCode();
  var body = await response.Content.ReadAsStringAsync();
  Console.WriteLine(body);
};
```

</Tab>

<Tab name="Go"> ```go package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	url := "https://api.canva.com/rest/v1/brand-templates"
	req, _ := http.NewRequest("GET", url, nil)
	req.Header.Add("Authorization", "Bearer {token}")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)
	fmt.Println(string(body))
}
```

</Tab>

<Tab name="PHP"> ```php $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://api.canva.com/rest/v1/brand-templates", CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => array( 'Authorization: Bearer {token}', ), ));

$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);

if (empty($err)) {
  echo $response;
} else {
  echo "Error: " . $err;
}
```

</Tab>

<Tab name="Ruby"> ```ruby require 'net/http' require 'uri'

url = URI('https://api.canva.com/rest/v1/brand-templates')
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request['Authorization'] = 'Bearer {token}'

response = http.request(request)
puts response.read_body
```

</Tab> </Tabs>

Success response

If successful, the endpoint returns a 200 response with a JSON body with the following parameters:

<Prop.List> <Prop name="items" type="BrandTemplate[]" required mode="output"> The list of brand templates.

&lt;PillAccordion title={&lt;&gt;Properties of &lt;strong&gt;items&lt;/strong&gt;&lt;/&gt;} defaultExpanded={true}&gt;
  &lt;Prop.List&gt;
    &lt;Prop name="id" type="string" required mode="output"&gt;
      The brand template ID.
    &lt;/Prop&gt;

    &lt;Prop name="title" type="string" required mode="output"&gt;
      The brand template title, as shown in the Canva UI.
    &lt;/Prop&gt;

    &lt;Prop name="view_url" type="string" required mode="output"&gt;
      A URL Canva users can visit to view the brand template.
    &lt;/Prop&gt;

    &lt;Prop name="create_url" type="string" required mode="output"&gt;
      A URL Canva users can visit to create a new design from the template.
    &lt;/Prop&gt;

    &lt;Prop name="created_at" type="integer" required mode="output"&gt;
      When the brand template was created, as a Unix timestamp
      (in seconds since the Unix Epoch).
    &lt;/Prop&gt;

    &lt;Prop name="updated_at" type="integer" required mode="output"&gt;
      When the brand template was last updated, as a Unix timestamp
      (in seconds since the Unix Epoch).
    &lt;/Prop&gt;

    &lt;Prop name="thumbnail" type="Thumbnail" mode="output"&gt;
      A thumbnail image representing the object.

      &lt;PillAccordion title={&lt;&gt;Properties of &lt;strong&gt;thumbnail&lt;/strong&gt;&lt;/&gt;}&gt;
        &lt;Prop.List&gt;
          &lt;Prop name="width" type="integer" required mode="output"&gt;
            The width of the thumbnail image in pixels.
          &lt;/Prop&gt;

          &lt;Prop name="height" type="integer" required mode="output"&gt;
            The height of the thumbnail image in pixels.
          &lt;/Prop&gt;

          &lt;Prop name="url" type="string" required mode="output"&gt;
            A URL for retrieving the thumbnail image.
            This URL expires after 15 minutes. This URL includes a query string
            that's required for retrieving the thumbnail.
          &lt;/Prop&gt;
        &lt;/Prop.List&gt;
      &lt;/PillAccordion&gt;
    &lt;/Prop&gt;
  &lt;/Prop.List&gt;
&lt;/PillAccordion&gt;

</Prop>

<Prop name="continuation" type="string" mode="output"> If the success response contains a continuation token, the user has access to more brand templates you can list. You can use this token as a query parameter and retrieve more templates from the list, for example /v1/brand-templates?continuation={continuation}. To retrieve all the brand templates available to the user, you might need to make multiple requests. </Prop> </Prop.List>

Example response

json
{
  "continuation": "RkFGMgXlsVTDbMd:MR3L0QjiaUzycIAjx0yMyuNiV0OildoiOwL0x32G4NjNu4FwtAQNxowUQNMMYN",
  "items": [
    {
      "id": "DEMzWSwy3BI",
      "title": "Advertisement Template",
      "view_url": "https://www.canva.com/design/DAE35hE8FA4/view",
      "create_url": "https://www.canva.com/design/DAE35hE8FA4/remix",
      "thumbnail": {
        "width": 595,
        "height": 335,
        "url": "https://document-export.canva.com/Vczz9/zF9vzVtdADc/2/thumbnail/0001.png?<query-string>"
      },
      "created_at": 1704110400,
      "updated_at": 1719835200
    }
  ]
}

Canva Developer Documentation SOP Site