Get design dataset

Check if a design has autofillable fields and what type of information the fields accept.

This API is currently provided as a preview. Be aware of the following:

  • There might be unannounced breaking changes.
  • Any breaking changes to preview APIs won't produce a new API version.
  • Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users.

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

To get the dataset definition of a brand template, use the Get brand template dataset API.

Available data field types include:

  • Images (which you can autofill with an image or a video asset)
  • Text
  • Charts

Use the returned field names and types to build the data payload for the Create a design autofill job API with type: create_from_design.

Chart data fields and autofilling a video are preview features. There might be unannounced breaking changes to these features which won't produce a new API version.

HTTP method and URL path

GET https://api.canva.com/rest/v1/designs/{designId}/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):

  • design:content:read

Header parameters

Authorizationstring
Required

Provides credentials to authenticate the request, in the form of a Bearer token.

For example: Authorization: Bearer {token}

Path parameters

designIdstring
Required

The design ID.

Example request

Examples for using the /v1/designs/{designId}/dataset endpoint:

curl --request GET 'https://api.canva.com/rest/v1/designs/{designId}/dataset' \
--header 'Authorization: Bearer {token}'
SH
const fetch = require("node-fetch");
fetch("https://api.canva.com/rest/v1/designs/{designId}/dataset", {
method: "GET",
headers: {
"Authorization": "Bearer {token}",
},
})
.then(async (response) => {
const data = await response.json();
console.log(data);
})
.catch(err => console.error(err));
JS
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/designs/{designId}/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());
}
}
JAVA
import requests
headers = {
"Authorization": "Bearer {token}"
}
response = requests.get("https://api.canva.com/rest/v1/designs/{designId}/dataset",
headers=headers
)
print(response.json())
PY
using System.Net.Http;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://api.canva.com/rest/v1/designs/{designId}/dataset"),
Headers =
{
{ "Authorization", "Bearer {token}" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
};
CSHARP
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://api.canva.com/rest/v1/designs/{designId}/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))
}
GO
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.canva.com/rest/v1/designs/{designId}/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;
}
PHP
require 'net/http'
require 'uri'
url = URI('https://api.canva.com/rest/v1/designs/{designId}/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
RUBY

Success response

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

datasetobject
Optional

The dataset definition. It contains the data inputs available for use with the Create design autofill job API.

<KEY>object of DataFields

A named data field that can be autofilled.

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

An image data field. You can autofill it with an image by providing its asset_id.

You can also autofill it with a video asset. Autofilling a video is currently a preview feature.

typestring

Available values: The only valid value is image.

A text data field. You can autofill it with a text value.

typestring

Available values: The only valid value is text.

A chart data field. You can autofill it with tabular data.

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

typestring

Available values: The only valid value is chart.

Example response

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

Error responses

403 Forbidden

codestring

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.

messagestring

A human-readable description of what went wrong.

Example error response

Not allowed to access the design
{
"code": "permission_denied",
"message": "Not allowed to access design with id '{designId}'"
}
JSON

404 Not Found

codestring

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.

messagestring

A human-readable description of what went wrong.

Example error response

Design not found
{
"code": "not_found",
"message": "Design with id '{designId}' not found"
}
JSON

Try it out

This uses your live Canva data.

This is not a sandbox/playground. This form performs API requests against your account's actual live Canva data. Make sure that you understand what the request is doing, as well as the requirements for each parameter detailed above.

Step 1: Enter your access token

To get started, generate an access token or provide your own below