Skip to content

Connect API — Autofills

Autofills Overview

The Canva Connect APIs for working with autofillable 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 Autofill APIs, your integration must act on behalf of a user that's a member of a Canva Enterprise organization.

The Autofill APIs let you create personalized designs using a brand template and input data. You can generate personalized invites, letters, training materials, pitch decks, marketing content, and more.

To get started with autofilled designs, add one or more autofillable data fields to a brand template using the Canva Data autofill app. For help on setting up an autofillable brand template, see the Autofill guide.

To autofill the brand template:

  1. Use the Get brand template dataset API to check which fields you can fill and what kind of data you can use.
  2. Use the Create design autofill job API to provide the data you want autofilled and start generating the design (asynchronously).
  3. Use the Get design autofill job API to check the status of the autofill job and retrieve the design.

Autofill APIs

  • Get brand template dataset: Check if a brand template has autofillable fields and what type of information the fields accept.
  • Create design autofill job: Create an asynchronous job to generate a design from a brand template with your provided field information.
  • Get design autofill job: Get the status and results of the autofill job, including the autofilled design.

Create Autofill Job

Create an asynchronous job to autofill a design from a brand template with your input information.

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.

Starts a new asynchronous job to autofill a Canva design using a brand template and input data.

To get a list of input data fields, use the Get brand template dataset API.

Available data field types to autofill include:

  • Images

  • Text

  • Charts

    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.

NOTE: For more information on the workflow for using asynchronous jobs, see API requests and responses. You can check the status and get the results of autofill jobs created with this API using the Get design autofill job API.

HTTP method and URL path

POST https://api.canva.com/rest/v1/autofills

This operation is rate limited to 60 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):

  • design:content:write

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 name="Content-Type" type="string" required> Indicates the media type of the information sent in the request. This must be set to application/json.

For example: `Content-Type: application/json`

</Prop> </Prop.List>

Body parameters

<Prop.List> <Prop name="brand_template_id" type="string" required> ID of the input brand template. </Prop>

<Prop name="data" type="object" required> Data object containing the data fields and values to autofill.

&lt;PillAccordion title={&lt;&gt;Properties of &lt;strong&gt;data&lt;/strong&gt;&lt;/&gt;} defaultExpanded={true}&gt;
  &lt;Prop.List&gt;
    &lt;Prop name="&lt;KEY&gt;" type="object of DatasetValues" required&gt;
      The data field to autofill.

      ```json
      {
        "cute_pet_image_of_the_day": {
          "type": "image",
          "asset_id": "Msd59349ff"
        },
        "cute_pet_witty_pet_says": {
          "type": "text",
          "text": "It was like this when I got here!"
        },
        "cute_pet_sales_chart": {
          "type": "chart",
          "chart_data": {
            "column_configs": [
              {
                "name": "Geographic Region",
                "type": "string"
              },
              {
                "name": "Sales (millions AUD)",
                "type": "number"
              },
              {
                "name": "Target (millions AUD)",
                "type": "number"
              },
              {
                "name": "Target met?",
                "type": "boolean"
              },
              {
                "name": "Date met",
                "type": "date"
              }
            ],
            "rows": [
              {
                "cells": [
                  {
                    "type": "string",
                    "value": "Asia Pacific"
                  },
                  {
                    "type": "number",
                    "value": 10.2
                  },
                  {
                    "type": "number",
                    "value": 10
                  },
                  {
                    "type": "boolean",
                    "value": true
                  },
                  {
                    "type": "date",
                    "value": 1721944387
                  }
                ]
              },
              {
                "cells": [
                  {
                    "type": "string",
                    "value": "EMEA"
                  },
                  {
                    "type": "number",
                    "value": 13.8
                  },
                  {
                    "type": "number",
                    "value": 14
                  },
                  {
                    "type": "boolean",
                    "value": false
                  },
                  {
                    "type": "date"
                  }
                ]
              }
            ]
          }
        }
      }
      ```

      &lt;Tabs&gt;
        &lt;Tab name="image"&gt;
          If the data field is an image field.

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

            &lt;Prop name="asset_id" type="string" required&gt;
              `asset_id` of the image to insert into the template element.
            &lt;/Prop&gt;
          &lt;/Prop.List&gt;
        &lt;/Tab&gt;

        &lt;Tab name="text"&gt;
          If the data field is a text field.

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

            &lt;Prop name="text" type="string" required&gt;
              Text to insert into the template element.
            &lt;/Prop&gt;
          &lt;/Prop.List&gt;
        &lt;/Tab&gt;

        &lt;Tab name="chart"&gt;
          If the data field is a chart.

          Note the following behavior:

          * If `column_configs` is not provided, the first row is assumed to contain column headers where applicable.
          * `number` cells with formatting metadata are not currently supported for autofill and will result in an error response.
          * `media` cells are not supported for chart autofill and will result in an error response.

          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&gt;
              &lt;Prop.Extras&gt;
                **Available values:** The only valid value is `chart`.
              &lt;/Prop.Extras&gt;
            &lt;/Prop&gt;

            &lt;Prop name="chart_data" type="DataTable" required&gt;
              Tabular data, structured in rows of cells.

              * Each cell must have a data type configured.
              * All rows must have the same number of cells.
              * The number of entries in `column_configs` must match the number of columns in the data.
              * Maximum of 100 rows and 20 columns.

              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;PillAccordion title={&lt;&gt;Properties of &lt;strong&gt;chart_data&lt;/strong&gt;&lt;/&gt;}&gt;
                &lt;Prop.List&gt;
                  &lt;Prop name="rows" type="DataTableRow[]" required&gt;
                    Rows of data.

                    &lt;Prop.Extras&gt;
                      **Maximum items:** `100`
                    &lt;/Prop.Extras&gt;

                    &lt;PillAccordion title={&lt;&gt;Properties of &lt;strong&gt;rows&lt;/strong&gt;&lt;/&gt;}&gt;
                      &lt;Prop.List&gt;
                        &lt;Prop name="cells" type="DataTableCell[]" required&gt;
                          Cells of data in row.

                          All rows must have the same number of cells.

                          &lt;Prop.Extras&gt;
                            **Maximum items:** `20`
                          &lt;/Prop.Extras&gt;

                          &lt;Tabs&gt;
                            &lt;Tab name="string"&gt;
                              A string tabular data cell.

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

                            &lt;Tab name="number"&gt;
                              A number tabular data cell.

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

                                &lt;Prop name="metadata" type="NumberCellMetadata"&gt;
                                  Formatting metadata for number cells.

                                  &lt;PillAccordion title={&lt;&gt;Properties of &lt;strong&gt;metadata&lt;/strong&gt;&lt;/&gt;}&gt;
                                    &lt;Prop.List&gt;
                                      &lt;Prop name="formatting" type="string"&gt;
                                        Formatting pattern using Office Open XML Format.

                                        These patterns control how numbers are displayed to users, including currency symbols,
                                        decimal places, and separators.
                                      &lt;/Prop&gt;
                                    &lt;/Prop.List&gt;
                                  &lt;/PillAccordion&gt;
                                &lt;/Prop&gt;
                              &lt;/Prop.List&gt;
                            &lt;/Tab&gt;

                            &lt;Tab name="boolean"&gt;
                              A boolean tabular data cell.

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

                            &lt;Tab name="date"&gt;
                              A date tabular data cell.

                              Specified as a Unix timestamp (in seconds since the Unix Epoch).

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

                            &lt;Tab name="media"&gt;
                              Cell containing a media collection.

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

                                &lt;Prop name="value" type="DataTableMedia[]" required&gt;
                                  Media collection values.

                                  Provide an empty array for an empty cell.

                                  &lt;Prop.Extras&gt;
                                    **Maximum items:** `20`
                                  &lt;/Prop.Extras&gt;

                                  &lt;Tabs&gt;
                                    &lt;Tab name="image_upload"&gt;
                                      Options for uploading an image asset.

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

                                        &lt;Prop name="url" type="string" required&gt;
                                          The URL of the image file to upload.
                                          This can be an external URL or a data URL.
                                        &lt;/Prop&gt;

                                        &lt;Prop name="thumbnail_url" type="string" required&gt;
                                          The URL of a thumbnail image to display while the image is queued for upload.
                                          This can be an external URL or a data URL.
                                        &lt;/Prop&gt;

                                        &lt;Prop name="mime_type" type="string" required&gt;
                                          The MIME type of an image file that's supported by Canva's backend.

                                          &lt;Prop.Extras&gt;
                                            **Available values:**

                                            * `image/jpeg`
                                            * `image/heic`
                                            * `image/png`
                                            * `image/svg+xml`
                                            * `image/webp`
                                            * `image/tiff`
                                          &lt;/Prop.Extras&gt;
                                        &lt;/Prop&gt;

                                        &lt;Prop name="ai_disclosure" type="string" required&gt;
                                          A disclosure identifying if the app generated this media asset using AI.

                                          &lt;Prop.Extras&gt;
                                            **Available values:**

                                            * `app_generated`: App creates or significantly alters content using AI
                                            * `none`: No AI involvement in creation or alteration
                                          &lt;/Prop.Extras&gt;
                                        &lt;/Prop&gt;

                                        &lt;Prop name="width" type="integer"&gt;
                                          The width of the image in pixels.
                                        &lt;/Prop&gt;

                                        &lt;Prop name="height" type="integer"&gt;
                                          The height of the image in pixels.
                                        &lt;/Prop&gt;
                                      &lt;/Prop.List&gt;
                                    &lt;/Tab&gt;

                                    &lt;Tab name="video_upload"&gt;
                                      Options for uploading a video asset.

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

                                        &lt;Prop name="url" type="string" required&gt;
                                          The URL of the video file to upload.
                                        &lt;/Prop&gt;

                                        &lt;Prop name="thumbnail_image_url" type="string" required&gt;
                                          The URL of a thumbnail image to use as a fallback if thumbnailVideoUrl isn't provided.
                                          This can be an external URL or a data URL.
                                        &lt;/Prop&gt;

                                        &lt;Prop name="mime_type" type="string" required&gt;
                                          The MIME type of a video file that's supported by Canva's backend.

                                          &lt;Prop.Extras&gt;
                                            **Available values:**

                                            * `video/avi`
                                            * `video/x-msvideo`
                                            * `image/gif`: GIFs are treated as videos, not images.
                                            * `video/x-m4v`
                                            * `video/x-matroska`
                                            * `video/quicktime`
                                            * `video/mp4`
                                            * `video/mpeg`
                                            * `video/webm`
                                            * `application/json`: Used for Lottie files.
                                          &lt;/Prop.Extras&gt;
                                        &lt;/Prop&gt;

                                        &lt;Prop name="ai_disclosure" type="string" required&gt;
                                          A disclosure identifying if the app generated this media asset using AI.

                                          &lt;Prop.Extras&gt;
                                            **Available values:**

                                            * `app_generated`: App creates or significantly alters content using AI
                                            * `none`: No AI involvement in creation or alteration
                                          &lt;/Prop.Extras&gt;
                                        &lt;/Prop&gt;

                                        &lt;Prop name="thumbnail_video_url" type="string"&gt;
                                          The URL of a thumbnail video to display while the video is queued for upload.
                                        &lt;/Prop&gt;

                                        &lt;Prop name="width" type="integer"&gt;
                                          The width of the video in pixels.
                                        &lt;/Prop&gt;

                                        &lt;Prop name="height" type="integer"&gt;
                                          The height of the video in pixels.
                                        &lt;/Prop&gt;
                                      &lt;/Prop.List&gt;
                                    &lt;/Tab&gt;
                                  &lt;/Tabs&gt;
                                &lt;/Prop&gt;
                              &lt;/Prop.List&gt;
                            &lt;/Tab&gt;
                          &lt;/Tabs&gt;
                        &lt;/Prop&gt;
                      &lt;/Prop.List&gt;
                    &lt;/PillAccordion&gt;
                  &lt;/Prop&gt;

                  &lt;Prop name="column_configs" type="ColumnConfig[]"&gt;
                    Column definitions with names and data types.

                    &lt;PillAccordion title={&lt;&gt;Properties of &lt;strong&gt;column_configs&lt;/strong&gt;&lt;/&gt;}&gt;
                      &lt;Prop.List&gt;
                        &lt;Prop name="type" type="string" required&gt;
                          Expected data type for cells in this column.

                          &lt;Prop.Extras&gt;
                            **Available values:**

                            * `string`: String data
                            * `number`: Numeric data
                            * `date`: Date data
                            * `boolean`: Boolean data
                            * `media`: Media data (such as images, videos, or combinations of both)
                            * `variant`: Mixed data types (use where the column contains cells of a combination of data types)
                          &lt;/Prop.Extras&gt;
                        &lt;/Prop&gt;

                        &lt;Prop name="name" type="string"&gt;
                          Name for the column, displayed as header text.
                        &lt;/Prop&gt;
                      &lt;/Prop.List&gt;
                    &lt;/PillAccordion&gt;
                  &lt;/Prop&gt;
                &lt;/Prop.List&gt;
              &lt;/PillAccordion&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 name="title" type="string"> Title to use for the autofilled design.

If no design title is provided, the autofilled design will have the same title as the brand template.

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

  **Maximum length:** `255`
&lt;/Prop.Extras&gt;

</Prop> </Prop.List>

Example request

Examples for using the /v1/autofills endpoint:

<Tabs storageKey="example.language" disableContentTransition> <Tab name="cURL"> sh curl --request POST 'https://api.canva.com/rest/v1/autofills' \ --header 'Authorization: Bearer {token}' \ --header 'Content-Type: application/json' \ --data '{ "brand_template_id": "DAFVztcvd9z", "title": "string", "data": { "cute_pet_image_of_the_day": { "type": "image", "asset_id": "Msd59349ff" }, "cute_pet_witty_pet_says": { "type": "text", "text": "It was like this when I got here!" }, "cute_pet_sales_chart": { "type": "chart", "chart_data": { "column_configs": [ { "name": "Geographic Region", "type": "string" }, { "name": "Sales (millions AUD)", "type": "number" }, { "name": "Target (millions AUD)", "type": "number" }, { "name": "Target met?", "type": "boolean" }, { "name": "Date met", "type": "date" } ], "rows": [ { "cells": [ { "type": "string", "value": "Asia Pacific" }, { "type": "number", "value": 10.2 }, { "type": "number", "value": 10 }, { "type": "boolean", "value": true }, { "type": "date", "value": 1721944387 } ] }, { "cells": [ { "type": "string", "value": "EMEA" }, { "type": "number", "value": 13.8 }, { "type": "number", "value": 14 }, { "type": "boolean", "value": false }, { "type": "date" } ] } ] } } } }' </Tab>

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

fetch("https://api.canva.com/rest/v1/autofills", {
  method: "POST",
  headers: {
    "Authorization": "Bearer {token}",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "brand_template_id": "DAFVztcvd9z",
    "title": "string",
    "data": {
      "cute_pet_image_of_the_day": {
        "type": "image",
        "asset_id": "Msd59349ff"
      },
      "cute_pet_witty_pet_says": {
        "type": "text",
        "text": "It was like this when I got here!"
      },
      "cute_pet_sales_chart": {
        "type": "chart",
        "chart_data": {
          "column_configs": [
            {
              "name": "Geographic Region",
              "type": "string"
            },
            {
              "name": "Sales (millions AUD)",
              "type": "number"
            },
            {
              "name": "Target (millions AUD)",
              "type": "number"
            },
            {
              "name": "Target met?",
              "type": "boolean"
            },
            {
              "name": "Date met",
              "type": "date"
            }
          ],
          "rows": [
            {
              "cells": [
                {
                  "type": "string",
                  "value": "Asia Pacific"
                },
                {
                  "type": "number",
                  "value": 10.2
                },
                {
                  "type": "number",
                  "value": 10
                },
                {
                  "type": "boolean",
                  "value": true
                },
                {
                  "type": "date",
                  "value": 1721944387
                }
              ]
            },
            {
              "cells": [
                {
                  "type": "string",
                  "value": "EMEA"
                },
                {
                  "type": "number",
                  "value": 13.8
                },
                {
                  "type": "number",
                  "value": 14
                },
                {
                  "type": "boolean",
                  "value": false
                },
                {
                  "type": "date"
                }
              ]
            }
          ]
        }
      }
    }
  }),
})
  .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/autofills"))
            .header("Authorization", "Bearer {token}")
            .header("Content-Type", "application/json")
            .method("POST", HttpRequest.BodyPublishers.ofString("{\"brand_template_id\": \"DAFVztcvd9z\", \"title\": \"string\", \"data\": {\"cute_pet_image_of_the_day\": {\"type\": \"image\", \"asset_id\": \"Msd59349ff\"}, \"cute_pet_witty_pet_says\": {\"type\": \"text\", \"text\": \"It was like this when I got here!\"}, \"cute_pet_sales_chart\": {\"type\": \"chart\", \"chart_data\": {\"column_configs\": [{\"name\": \"Geographic Region\", \"type\": \"string\"}, {\"name\": \"Sales (millions AUD)\", \"type\": \"number\"}, {\"name\": \"Target (millions AUD)\", \"type\": \"number\"}, {\"name\": \"Target met?\", \"type\": \"boolean\"}, {\"name\": \"Date met\", \"type\": \"date\"}], \"rows\": [{\"cells\": [{\"type\": \"string\", \"value\": \"Asia Pacific\"}, {\"type\": \"number\", \"value\": 10.2}, {\"type\": \"number\", \"value\": 10}, {\"type\": \"boolean\", \"value\": true}, {\"type\": \"date\", \"value\": 1721944387}]}, {\"cells\": [{\"type\": \"string\", \"value\": \"EMEA\"}, {\"type\": \"number\", \"value\": 13.8}, {\"type\": \"number\", \"value\": 14}, {\"type\": \"boolean\", \"value\": false}, {\"type\": \"date\"}]}]}}}}"))
            .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}",
    "Content-Type": "application/json"
}

data = {
    "brand_template_id": "DAFVztcvd9z",
    "title": "string",
    "data": {
        "cute_pet_image_of_the_day": {
            "type": "image",
            "asset_id": "Msd59349ff"
        },
        "cute_pet_witty_pet_says": {
            "type": "text",
            "text": "It was like this when I got here!"
        },
        "cute_pet_sales_chart": {
            "type": "chart",
            "chart_data": {
                "column_configs": [
                    {
                        "name": "Geographic Region",
                        "type": "string"
                    },
                    {
                        "name": "Sales (millions AUD)",
                        "type": "number"
                    },
                    {
                        "name": "Target (millions AUD)",
                        "type": "number"
                    },
                    {
                        "name": "Target met?",
                        "type": "boolean"
                    },
                    {
                        "name": "Date met",
                        "type": "date"
                    }
                ],
                "rows": [
                    {
                        "cells": [
                            {
                                "type": "string",
                                "value": "Asia Pacific"
                            },
                            {
                                "type": "number",
                                "value": 10.2
                            },
                            {
                                "type": "number",
                                "value": 10
                            },
                            {
                                "type": "boolean",
                                "value": True
                            },
                            {
                                "type": "date",
                                "value": 1721944387
                            }
                        ]
                    },
                    {
                        "cells": [
                            {
                                "type": "string",
                                "value": "EMEA"
                            },
                            {
                                "type": "number",
                                "value": 13.8
                            },
                            {
                                "type": "number",
                                "value": 14
                            },
                            {
                                "type": "boolean",
                                "value": False
                            },
                            {
                                "type": "date"
                            }
                        ]
                    }
                ]
            }
        }
    }
}

response = requests.post("https://api.canva.com/rest/v1/autofills",
    headers=headers,
    json=data
)
print(response.json())
```

</Tab>

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

var client = new HttpClient();
var request = new HttpRequestMessage
{
  Method = HttpMethod.Post,
  RequestUri = new Uri("https://api.canva.com/rest/v1/autofills"),
  Headers =
  {
    { "Authorization", "Bearer {token}" },
  },
  Content = new StringContent(
    "{\"brand_template_id\": \"DAFVztcvd9z\", \"title\": \"string\", \"data\": {\"cute_pet_image_of_the_day\": {\"type\": \"image\", \"asset_id\": \"Msd59349ff\"}, \"cute_pet_witty_pet_says\": {\"type\": \"text\", \"text\": \"It was like this when I got here!\"}, \"cute_pet_sales_chart\": {\"type\": \"chart\", \"chart_data\": {\"column_configs\": [{\"name\": \"Geographic Region\", \"type\": \"string\"}, {\"name\": \"Sales (millions AUD)\", \"type\": \"number\"}, {\"name\": \"Target (millions AUD)\", \"type\": \"number\"}, {\"name\": \"Target met?\", \"type\": \"boolean\"}, {\"name\": \"Date met\", \"type\": \"date\"}], \"rows\": [{\"cells\": [{\"type\": \"string\", \"value\": \"Asia Pacific\"}, {\"type\": \"number\", \"value\": 10.2}, {\"type\": \"number\", \"value\": 10}, {\"type\": \"boolean\", \"value\": true}, {\"type\": \"date\", \"value\": 1721944387}]}, {\"cells\": [{\"type\": \"string\", \"value\": \"EMEA\"}, {\"type\": \"number\", \"value\": 13.8}, {\"type\": \"number\", \"value\": 14}, {\"type\": \"boolean\", \"value\": false}, {\"type\": \"date\"}]}]}}}}",
    Encoding.UTF8,
    "application/json"
  ),
};

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"
	"strings"
)

func main() {
	payload := strings.NewReader(`{
	  "brand_template_id": "DAFVztcvd9z",
	  "title": "string",
	  "data": {
	    "cute_pet_image_of_the_day": {
	      "type": "image",
	      "asset_id": "Msd59349ff"
	    },
	    "cute_pet_witty_pet_says": {
	      "type": "text",
	      "text": "It was like this when I got here!"
	    },
	    "cute_pet_sales_chart": {
	      "type": "chart",
	      "chart_data": {
	        "column_configs": [
	          {
	            "name": "Geographic Region",
	            "type": "string"
	          },
	          {
	            "name": "Sales (millions AUD)",
	            "type": "number"
	          },
	          {
	            "name": "Target (millions AUD)",
	            "type": "number"
	          },
	          {
	            "name": "Target met?",
	            "type": "boolean"
	          },
	          {
	            "name": "Date met",
	            "type": "date"
	          }
	        ],
	        "rows": [
	          {
	            "cells": [
	              {
	                "type": "string",
	                "value": "Asia Pacific"
	              },
	              {
	                "type": "number",
	                "value": 10.2
	              },
	              {
	                "type": "number",
	                "value": 10
	              },
	              {
	                "type": "boolean",
	                "value": true
	              },
	              {
	                "type": "date",
	                "value": 1721944387
	              }
	            ]
	          },
	          {
	            "cells": [
	              {
	                "type": "string",
	                "value": "EMEA"
	              },
	              {
	                "type": "number",
	                "value": 13.8
	              },
	              {
	                "type": "number",
	                "value": 14
	              },
	              {
	                "type": "boolean",
	                "value": false
	              },
	              {
	                "type": "date"
	              }
	            ]
	          }
	        ]
	      }
	    }
	  }
	}`)

	url := "https://api.canva.com/rest/v1/autofills"
	req, _ := http.NewRequest("POST", url, payload)
	req.Header.Add("Authorization", "Bearer {token}")
	req.Header.Add("Content-Type", "application/json")

	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/autofills", CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => array( 'Authorization: Bearer {token}', 'Content-Type: application/json', ), CURLOPT_POSTFIELDS => json_encode([ "brand_template_id" => "DAFVztcvd9z", "title" => "string", "data" => [ "cute_pet_image_of_the_day" => [ "type" => "image", "asset_id" => "Msd59349ff" ], "cute_pet_witty_pet_says" => [ "type" => "text", "text" => "It was like this when I got here!" ], "cute_pet_sales_chart" => [ "type" => "chart", "chart_data" => [ "column_configs" => [ [ "name" => "Geographic Region", "type" => "string" ], [ "name" => "Sales (millions AUD)", "type" => "number" ], [ "name" => "Target (millions AUD)", "type" => "number" ], [ "name" => "Target met?", "type" => "boolean" ], [ "name" => "Date met", "type" => "date" ] ], "rows" => [ [ "cells" => [ [ "type" => "string", "value" => "Asia Pacific" ], [ "type" => "number", "value" => 10.2 ], [ "type" => "number", "value" => 10 ], [ "type" => "boolean", "value" => true ], [ "type" => "date", "value" => 1721944387 ] ] ], [ "cells" => [ [ "type" => "string", "value" => "EMEA" ], [ "type" => "number", "value" => 13.8 ], [ "type" => "number", "value" => 14 ], [ "type" => "boolean", "value" => false ], [ "type" => "date" ] ] ] ] ] ] ] ]) ));

$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/autofills')
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request['Authorization'] = 'Bearer {token}'
request['Content-Type'] = 'application/json'
request.body = <<REQUEST_BODY
{
  "brand_template_id": "DAFVztcvd9z",
  "title": "string",
  "data": {
    "cute_pet_image_of_the_day": {
      "type": "image",
      "asset_id": "Msd59349ff"
    },
    "cute_pet_witty_pet_says": {
      "type": "text",
      "text": "It was like this when I got here!"
    },
    "cute_pet_sales_chart": {
      "type": "chart",
      "chart_data": {
        "column_configs": [
          {
            "name": "Geographic Region",
            "type": "string"
          },
          {
            "name": "Sales (millions AUD)",
            "type": "number"
          },
          {
            "name": "Target (millions AUD)",
            "type": "number"
          },
          {
            "name": "Target met?",
            "type": "boolean"
          },
          {
            "name": "Date met",
            "type": "date"
          }
        ],
        "rows": [
          {
            "cells": [
              {
                "type": "string",
                "value": "Asia Pacific"
              },
              {
                "type": "number",
                "value": 10.2
              },
              {
                "type": "number",
                "value": 10
              },
              {
                "type": "boolean",
                "value": true
              },
              {
                "type": "date",
                "value": 1721944387
              }
            ]
          },
          {
            "cells": [
              {
                "type": "string",
                "value": "EMEA"
              },
              {
                "type": "number",
                "value": 13.8
              },
              {
                "type": "number",
                "value": 14
              },
              {
                "type": "boolean",
                "value": false
              },
              {
                "type": "date"
              }
            ]
          }
        ]
      }
    }
  }
}
REQUEST_BODY

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="job" type="DesignAutofillJob" required mode="output"> Details about the autofill job.

&lt;PillAccordion title={&lt;&gt;Properties of &lt;strong&gt;job&lt;/strong&gt;&lt;/&gt;} defaultExpanded={true}&gt;
  &lt;Prop.List&gt;
    &lt;Prop name="id" type="string" required mode="output"&gt;
      ID of the asynchronous job that is creating the design using the provided data.
    &lt;/Prop&gt;

    &lt;Prop name="status" type="string" required mode="output"&gt;
      Status of the design autofill job.

      &lt;Prop.Extras&gt;
        **Available values:**

        * `in_progress`
        * `success`
        * `failed`
      &lt;/Prop.Extras&gt;
    &lt;/Prop&gt;

    &lt;Prop name="result" type="DesignAutofillJobResult" mode="output"&gt;
      Result of the design autofill job. Only present if job status is `success`.

      &lt;Tabs&gt;
        &lt;Tab name="create_design"&gt;
          Design has been created and saved to user's root folder.

          &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 `create_design`.
              &lt;/Prop.Extras&gt;
            &lt;/Prop&gt;

            &lt;Prop name="design" type="DesignSummary" required mode="output"&gt;
              Basic details about the design, such as the design's ID, title, and URL.

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

                  &lt;Prop name="urls" type="DesignLinks" required mode="output"&gt;
                    A temporary set of URLs for viewing or editing the design.

                    &lt;PillAccordion title={&lt;&gt;Properties of &lt;strong&gt;urls&lt;/strong&gt;&lt;/&gt;}&gt;
                      &lt;Prop.List&gt;
                        &lt;Prop name="edit_url" type="string" required mode="output"&gt;
                          A temporary editing URL for the design. This URL is only accessible to the user that made the API request, and is designed to support return navigation workflows.

                          NOTE: This is not a permanent URL, it is only valid for 30 days.
                        &lt;/Prop&gt;

                        &lt;Prop name="view_url" type="string" required mode="output"&gt;
                          A temporary viewing URL for the design. This URL is only accessible to the user that made the API request, and is designed to support return navigation workflows.

                          NOTE: This is not a permanent URL, it is only valid for 30 days.
                        &lt;/Prop&gt;
                      &lt;/Prop.List&gt;
                    &lt;/PillAccordion&gt;
                  &lt;/Prop&gt;

                  &lt;Prop name="created_at" type="integer" required mode="output"&gt;
                    When the design was created in Canva, 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 design was last updated in Canva, as a Unix timestamp (in seconds since the
                    Unix Epoch).
                  &lt;/Prop&gt;

                  &lt;Prop name="title" type="string" mode="output"&gt;
                    The design title.
                  &lt;/Prop&gt;

                  &lt;Prop name="url" type="string" mode="output"&gt;
                    URL of the design.
                  &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 name="page_count" type="integer" mode="output"&gt;
                    The total number of pages in the design. Some design types don't have pages (for example, Canva docs).
                  &lt;/Prop&gt;
                &lt;/Prop.List&gt;
              &lt;/PillAccordion&gt;
            &lt;/Prop&gt;
          &lt;/Prop.List&gt;
        &lt;/Tab&gt;
      &lt;/Tabs&gt;
    &lt;/Prop&gt;

    &lt;Prop name="error" type="AutofillError" mode="output"&gt;
      If the autofill job fails, this object provides details about the error.

      &lt;PillAccordion title={&lt;&gt;Properties of &lt;strong&gt;error&lt;/strong&gt;&lt;/&gt;}&gt;
        &lt;Prop.List&gt;
          &lt;Prop name="code" type="string" required mode="output"&gt;
            &lt;Prop.Extras&gt;
              **Available values:**

              * `autofill_error`
              * `thumbnail_generation_error`
              * `create_design_error`
              * `design_approval_error`
            &lt;/Prop.Extras&gt;
          &lt;/Prop&gt;

          &lt;Prop name="message" type="string" required mode="output"&gt;
            A human-readable description of what went wrong.
          &lt;/Prop&gt;
        &lt;/Prop.List&gt;
      &lt;/PillAccordion&gt;
    &lt;/Prop&gt;
  &lt;/Prop.List&gt;
&lt;/PillAccordion&gt;

</Prop> </Prop.List>

Example responses

In progress job

json
{
  "job": {
    "id": "450a76e7-f96f-43ae-9c37-0e1ce492ac72",
    "status": "in_progress"
  }
}

Successfully completed job

json
{
  "job": {
    "id": "450a76e7-f96f-43ae-9c37-0e1ce492ac72",
    "status": "success",
    "result": {
      "type": "create_design",
      "design": {
        "id": "DAFVztcvd9z",
        "title": "My summer holiday",
        "url": "https://www.canva.com/design/DAFVztcvd9z/edit",
        "urls": {
          "edit_url": "https://www.canva.com/api/ekimus8HTvsdf&/edit",
          "view_url": "https://www.canva.com/api/eylPinTv358hYb8n1U4/view"
        },
        "thumbnail": {
          "width": 595,
          "height": 335,
          "url": "https://document-export.canva.com/Vczz9/zF9vzVtdADc/2/thumbnail/0001.png?<query-string>"
        },
        "created_at": 1586734043,
        "updated_at": 1586734043
      }
    }
  }
}

Failed job

json
{
  "job": {
    "id": "450a76e7-f96f-43ae-9c37-0e1ce492ac72",
    "status": "failed",
    "error": {
      "code": "autofill_error",
      "message": "Error autofilling design from brand template"
    }
  }
}

Error responses

400 Bad Request

<Prop.List> <Prop name="code" type="string" required mode="output"> A short string indicating what failed. This field can be used to handle errors programmatically. For a complete list of error codes, see Error responses. </Prop>

<Prop name="message" type="string" required mode="output"> A human-readable description of what went wrong. </Prop> </Prop.List>

Example error response

json
{
  "code": "bad_request_params",
  "message": "Design title invalid"
}

403 Forbidden

<Prop.List> <Prop name="code" type="string" required mode="output"> A short string indicating what failed. This field can be used to handle errors programmatically. For a complete list of error codes, see Error responses. </Prop>

<Prop name="message" type="string" required mode="output"> A human-readable description of what went wrong. </Prop> </Prop.List>

Example error response

json
{
  "code": "permission_denied",
  "message": "Not allowed to access brand template with id '{brandTemplateId}'"
}

404 Not Found

<Prop.List> <Prop name="code" type="string" required mode="output"> A short string indicating what failed. This field can be used to handle errors programmatically. For a complete list of error codes, see Error responses. </Prop>

<Prop name="message" type="string" required mode="output"> A human-readable description of what went wrong. </Prop> </Prop.List>

Example error response

json
{
  "code": "not_found",
  "message": "Brand template with id '{brandTemplateId}' not found"
}

Get Autofill Job

Get the status and results of an autofill job, including the autofilled design.

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

Get the result of a design autofill job that was created using the Create design autofill job API.

You might need to make multiple requests to this endpoint until you get a success or failed status. For more information on the workflow for using asynchronous jobs, see API requests and responses.

HTTP method and URL path

GET https://api.canva.com/rest/v1/autofills/{jobId}

This operation is rate limited to 60 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):

  • design: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="jobId" type="string" required> The design autofill job ID. </Prop> </Prop.List>

Example request

Examples for using the /v1/autofills/{jobId} endpoint:

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

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

fetch("https://api.canva.com/rest/v1/autofills/{jobId}", {
  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/autofills/{jobId}"))
            .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/autofills/{jobId}",
    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/autofills/{jobId}"),
  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/autofills/{jobId}"
	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/autofills/{jobId}", 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/autofills/{jobId}')
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="job" type="DesignAutofillJob" required mode="output"> Details about the autofill job.

&lt;PillAccordion title={&lt;&gt;Properties of &lt;strong&gt;job&lt;/strong&gt;&lt;/&gt;} defaultExpanded={true}&gt;
  &lt;Prop.List&gt;
    &lt;Prop name="id" type="string" required mode="output"&gt;
      ID of the asynchronous job that is creating the design using the provided data.
    &lt;/Prop&gt;

    &lt;Prop name="status" type="string" required mode="output"&gt;
      Status of the design autofill job.

      &lt;Prop.Extras&gt;
        **Available values:**

        * `in_progress`
        * `success`
        * `failed`
      &lt;/Prop.Extras&gt;
    &lt;/Prop&gt;

    &lt;Prop name="result" type="DesignAutofillJobResult" mode="output"&gt;
      Result of the design autofill job. Only present if job status is `success`.

      &lt;Tabs&gt;
        &lt;Tab name="create_design"&gt;
          Design has been created and saved to user's root folder.

          &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 `create_design`.
              &lt;/Prop.Extras&gt;
            &lt;/Prop&gt;

            &lt;Prop name="design" type="DesignSummary" required mode="output"&gt;
              Basic details about the design, such as the design's ID, title, and URL.

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

                  &lt;Prop name="urls" type="DesignLinks" required mode="output"&gt;
                    A temporary set of URLs for viewing or editing the design.

                    &lt;PillAccordion title={&lt;&gt;Properties of &lt;strong&gt;urls&lt;/strong&gt;&lt;/&gt;}&gt;
                      &lt;Prop.List&gt;
                        &lt;Prop name="edit_url" type="string" required mode="output"&gt;
                          A temporary editing URL for the design. This URL is only accessible to the user that made the API request, and is designed to support return navigation workflows.

                          NOTE: This is not a permanent URL, it is only valid for 30 days.
                        &lt;/Prop&gt;

                        &lt;Prop name="view_url" type="string" required mode="output"&gt;
                          A temporary viewing URL for the design. This URL is only accessible to the user that made the API request, and is designed to support return navigation workflows.

                          NOTE: This is not a permanent URL, it is only valid for 30 days.
                        &lt;/Prop&gt;
                      &lt;/Prop.List&gt;
                    &lt;/PillAccordion&gt;
                  &lt;/Prop&gt;

                  &lt;Prop name="created_at" type="integer" required mode="output"&gt;
                    When the design was created in Canva, 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 design was last updated in Canva, as a Unix timestamp (in seconds since the
                    Unix Epoch).
                  &lt;/Prop&gt;

                  &lt;Prop name="title" type="string" mode="output"&gt;
                    The design title.
                  &lt;/Prop&gt;

                  &lt;Prop name="url" type="string" mode="output"&gt;
                    URL of the design.
                  &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 name="page_count" type="integer" mode="output"&gt;
                    The total number of pages in the design. Some design types don't have pages (for example, Canva docs).
                  &lt;/Prop&gt;
                &lt;/Prop.List&gt;
              &lt;/PillAccordion&gt;
            &lt;/Prop&gt;
          &lt;/Prop.List&gt;
        &lt;/Tab&gt;
      &lt;/Tabs&gt;
    &lt;/Prop&gt;

    &lt;Prop name="error" type="AutofillError" mode="output"&gt;
      If the autofill job fails, this object provides details about the error.

      &lt;PillAccordion title={&lt;&gt;Properties of &lt;strong&gt;error&lt;/strong&gt;&lt;/&gt;}&gt;
        &lt;Prop.List&gt;
          &lt;Prop name="code" type="string" required mode="output"&gt;
            &lt;Prop.Extras&gt;
              **Available values:**

              * `autofill_error`
              * `thumbnail_generation_error`
              * `create_design_error`
              * `design_approval_error`
            &lt;/Prop.Extras&gt;
          &lt;/Prop&gt;

          &lt;Prop name="message" type="string" required mode="output"&gt;
            A human-readable description of what went wrong.
          &lt;/Prop&gt;
        &lt;/Prop.List&gt;
      &lt;/PillAccordion&gt;
    &lt;/Prop&gt;
  &lt;/Prop.List&gt;
&lt;/PillAccordion&gt;

</Prop> </Prop.List>

Example responses

In progress job

json
{
  "job": {
    "id": "450a76e7-f96f-43ae-9c37-0e1ce492ac72",
    "status": "in_progress"
  }
}

Successfully completed job

json
{
  "job": {
    "id": "450a76e7-f96f-43ae-9c37-0e1ce492ac72",
    "status": "success",
    "result": {
      "type": "create_design",
      "design": {
        "id": "DAFVztcvd9z",
        "title": "My summer holiday",
        "url": "https://www.canva.com/design/DAFVztcvd9z/edit",
        "urls": {
          "edit_url": "https://www.canva.com/api/ekimus8HTvsdf&/edit",
          "view_url": "https://www.canva.com/api/eylPinTv358hYb8n1U4/view"
        },
        "thumbnail": {
          "width": 595,
          "height": 335,
          "url": "https://document-export.canva.com/Vczz9/zF9vzVtdADc/2/thumbnail/0001.png?<query-string>"
        },
        "created_at": 1586734043,
        "updated_at": 1586734043
      }
    }
  }
}

Failed job

json
{
  "job": {
    "id": "450a76e7-f96f-43ae-9c37-0e1ce492ac72",
    "status": "failed",
    "error": {
      "code": "autofill_error",
      "message": "Error autofilling design from brand template"
    }
  }
}

Error responses

403 Forbidden

<Prop.List> <Prop name="code" type="string" required mode="output"> A short string indicating what failed. This field can be used to handle errors programmatically. For a complete list of error codes, see Error responses. </Prop>

<Prop name="message" type="string" required mode="output"> A human-readable description of what went wrong. </Prop> </Prop.List>

Example error response

json
{
  "code": "permission_denied",
  "message": "Calling user was not the creator of the autofill job"
}

404 Not Found

<Prop.List> <Prop name="code" type="string" required mode="output"> A short string indicating what failed. This field can be used to handle errors programmatically. For a complete list of error codes, see Error responses. </Prop>

<Prop name="message" type="string" required mode="output"> A human-readable description of what went wrong. </Prop> </Prop.List>

Example error response

json
{
  "code": "not_found",
  "message": "Job {jobId} not found"
}

Canva Developer Documentation SOP Site