Get design dataset
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
https://api.canva.com /rest /v1 /designs/{designId}/datasetThis 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
Path parameters
designIdstringThe 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}'
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));
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());}}
import requestsheaders = {"Authorization": "Bearer {token}"}response = requests.get("https://api.canva.com/rest/v1/designs/{designId}/dataset",headers=headers)print(response.json())
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);};
package mainimport ("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))}
$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;}
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 = truerequest = Net::HTTP::Get.new(url)request['Authorization'] = 'Bearer {token}'response = http.request(request)puts response.read_body
Success response
If successful, the endpoint returns a 200 response with a JSON body with the following parameters:
datasetobjectThe dataset definition. It contains the data inputs available for use with the Create design autofill job API.
<KEY>object of DataFieldsA 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"}}
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.
typestringAvailable values: The only valid value is image.
A text data field. You can autofill it with a text value.
typestringAvailable 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.
typestringAvailable 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"}}}
Error responses
403 Forbidden
codestringA short string indicating what failed. This field can be used to handle errors programmatically. For a complete list of error codes, see Error responses.
messagestringA 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}'"}
404 Not Found
codestringA short string indicating what failed. This field can be used to handle errors programmatically. For a complete list of error codes, see Error responses.
messagestringA human-readable description of what went wrong.
Example error response
Design not found
{"code": "not_found","message": "Design with id '{designId}' not found"}