Starts a new asynchronous job to export a file from Canva. Once the exported file is generated, you can download it using the link(s) provided.
The request requires the design ID and the exported file format type.
Supported file formats (and export file type values): PDF (pdf
), JPG (jpg
), PNG (png
), GIF (gif
), Microsoft PowerPoint (pptx
), and MP4 (mp4
).
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 export jobs created with this API using the Get design export job API.
HTTP method and URL path
https://api.canva.com /rest /v1 /exports
This operation is rate limited to 20 requests per minute for each user of your integration.
Authentication
This endpoint requires a valid access token that acts on behalf of a user. The token must have the following scopes (permissions):
design:content:read
For more information, see Scopes.
Header parameters
Content-Type
string
Indicates the media type of the information sent in the request. This must be set to application/json
.
For example: Content-Type: application/json
Body parameters
design_id
string
The design ID.
format
ExportFormat
Details about the desired export format.
Properties of format
type
string
This can be one of the following:
-
pdf
: Export the design as a PDF. Providing a paper size is optional. The default paper size is A4. -
jpg
: Export the design as a JPEG. Compression quality must be provided. Height or width (or both) may be specified, otherwise the file will be exported at it's default size.If the user is on the Canva Free plan, the export height and width for a fixed-dimension design can't be upscaled by more than a factor of
1.125
. -
png
: Export the design as a PNG. Height or width (or both) may be specified, otherwise the file will be exported at it's default size. You may also specify whether to export the file losslessly, and whether to export a multi-page design as a single image.If the user is on the Canva Free plan, the export height and width for a fixed-dimension design can't be upscaled by more than a factor of
1.125
. -
pptx
: Export the design as a PPTX. -
gif
: Export the design as a GIF. Height or width (or both) may be specified, otherwise the file will be exported at it's default size. Large designs will be scaled down, and aspect ratio will always be maintained. -
mp4
: Export the design as an MP4. You must specify the quality of the exported video.
quality
integer or string
For the jpg
type, the quality
of the exported JPEG determines how compressed the exported file should be. A low quality
value (minimum 1
) will create a file with a smaller file size, but the resulting file will have pixelated artifacts when compared to a file created with a high quality
value (maximum 100
).
For the mp4
type, the quality
is the orientation and resolution of the exported video. Orientation is either
horizontal
or vertical
, and resolution is one of 480p
, 720p
, 1080p
or 4k
. This can be one of the following:
horizontal_480p
horizontal_720p
horizontal_1080p
horizontal_4k
vertical_480p
vertical_720p
vertical_1080p
vertical_4k
pages
integer[]
To specify which pages to export in a multi-page design, provide the page numbers as
an array. The first page in a design is page 1
.
If pages
isn't specified, all the pages are exported.
export_quality
string
Specifies the export quality of the design. This can be one of the following:
-
regular
: Regular quality export. This is the default. -
pro
: Premium quality export.A
pro
export might fail if the design contains premium elements(opens in a new tab or window) and the calling user either hasn't purchased the elements or isn't on a Canva plan (such as Canva Pro) that has premium features.
size
string
The paper size of the export PDF file. The size
attribute is only supported for Documents (Canva Docs). This can be one of the following:
a4
a3
letter
legal
height
integer
Specify the height in pixels of the exported image. If only one of height or width is specified, then the image will be scaled to match that dimension, respecting the design's aspect ratio. If no width or height is specified, the image will be exported using the dimensions of the design.
width
integer
Specify the width in pixels of the exported image. If only one of height or width is specified, then the image will be scaled to match that dimension, respecting the design's aspect ratio. If no width or height is specified, the image will be exported using the dimensions of the design.
lossless
boolean
If set to true
(Default), the PNG is exported without compression.
If set to false
, the PNG is compressed using a lossy compression algorithm. Lossy PNG compression is only available to users on a Canva plan that has premium features, such as Canva Pro. If the user is on the Canva Free plan and this parameter is set to false
, the export operation will fail.
as_single_image
boolean
When true
, multi-page designs are merged into a single image.
When false
(default), each page is exported as a separate image.
Example request
Examples for using the /v1/exports
endpoint:
curl --request POST 'https://api.canva.com/rest/v1/exports' \--header 'Authorization: Bearer {token}' \--header 'Content-Type: application/json' \--data '{"design_id": "DAVZr1z5464","format": {"type": "pdf","size": "a4","pages": [2,3,4]}}'
const fetch = require("node-fetch");fetch("https://api.canva.com/rest/v1/exports", {method: "POST",headers: {"Authorization": "Bearer {token}","Content-Type": "application/json",},body: JSON.stringify({"design_id": "DAVZr1z5464","format": {"type": "pdf","size": "a4","pages": [2,3,4]}}),}).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/exports")).header("Authorization", "Bearer {token}").header("Content-Type", "application/json").method("POST", HttpRequest.BodyPublishers.ofString("{\"design_id\": \"DAVZr1z5464\", \"format\": {\"type\": \"pdf\", \"size\": \"a4\", \"pages\": [2, 3, 4]}}")).build();HttpResponse<String> response = HttpClient.newHttpClient().send(request,HttpResponse.BodyHandlers.ofString());System.out.println(response.body());}}
import requestsheaders = {"Authorization": "Bearer {token}","Content-Type": "application/json"}data = {"design_id": "DAVZr1z5464","format": {"type": "pdf","size": "a4","pages": [2,3,4]}}response = requests.post("https://api.canva.com/rest/v1/exports",headers=headers,json=data)print(response.json())
using System.Net.Http;var client = new HttpClient();var request = new HttpRequestMessage{Method = HttpMethod.Post,RequestUri = new Uri("https://api.canva.com/rest/v1/exports"),Headers ={{ "Authorization", "Bearer {token}" },},Content = new StringContent("{\"design_id\": \"DAVZr1z5464\", \"format\": {\"type\": \"pdf\", \"size\": \"a4\", \"pages\": [2, 3, 4]}}",Encoding.UTF8,"application/json"),};using (var response = await client.SendAsync(request)){response.EnsureSuccessStatusCode();var body = await response.Content.ReadAsStringAsync();Console.WriteLine(body);};
package mainimport ("fmt""io""net/http""strings")func main() {payload := strings.NewReader(`{"design_id": "DAVZr1z5464","format": {"type": "pdf","size": "a4","pages": [2,3,4]}}`)url := "https://api.canva.com/rest/v1/exports"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))}
$curl = curl_init();curl_setopt_array($curl, array(CURLOPT_URL => "https://api.canva.com/rest/v1/exports",CURLOPT_CUSTOMREQUEST => "POST",CURLOPT_RETURNTRANSFER => true,CURLOPT_HTTPHEADER => array('Authorization: Bearer {token}','Content-Type: application/json',),CURLOPT_POSTFIELDS => json_encode(["design_id" => "DAVZr1z5464","format" => ["type" => "pdf","size" => "a4","pages" => [2,3,4]]])));$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/exports')http = Net::HTTP.new(url.host, url.port)http.use_ssl = truerequest = Net::HTTP::Post.new(url)request['Authorization'] = 'Bearer {token}'request['Content-Type'] = 'application/json'request.body = <<REQUEST_BODY{"design_id": "DAVZr1z5464","format": {"type": "pdf","size": "a4","pages": [2,3,4]}}REQUEST_BODYresponse = 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:
job
ExportJob
The status of the export job.
Properties of job
id
string
The export job ID.
status
string
The export status of the job. A newly created job will be in_progress
and will eventually
become success
or failed
.
urls
string[]
When the export job is completed, also returns a list of urls for the exported resources. The list is sorted by page order.
error
ExportError
If the export fails, this object provides details about the error.
Properties of error
code
string
If the export failed, this specifies the reason why it failed. This can be one of the following:
license_required
: The design contains premium elements(opens in a new tab or window) that haven't been purchased. You can either buy the elements or upgrade to a Canva plan (such as Canva Pro) that has premium features, then try again. Alternatively, you can setexport_quality
toregular
to export your document in regular quality.internal_failure
: The service encountered an error when exporting your design.
message
string
A human-readable description of what went wrong.
Example responses
In progress job
{"job": {"id": "e08861ae-3b29-45db-8dc1-1fe0bf7f1cc8","status": "in_progress"}}
Successfully completed job
{"job": {"id": "e08861ae-3b29-45db-8dc1-1fe0bf7f1cc8","status": "success","urls": ["https://export-download.canva.com/..."]}}
Failed job
{"job": {"id": "e08861ae-3b29-45db-8dc1-1fe0bf7f1cc8","status": "failed","error": {"code": "license_required","message": "User doesn't have the required license to export in PRO quality."}}}