Create folder Create a new folder in the user's Projects.
Creates a folder in either the top level of a Canva user's
projects (using the ID root
), or
another folder (using the parent folder's ID). When a folder is successfully created, the
endpoint returns its folder ID, along with other information.
HTTP method and URL path
POST https://api.canva.com /rest /v1 /folders
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):
For more information, see Scopes .
Provides credentials to authenticate the request, in the form of a Bearer
token.
For example: Authorization: Bearer {token}
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
The name of the folder. Must be less than 256 characters.
The folder ID of the parent folder. To create a new folder at the top level of a user's
projects , use the ID root
.
Example request
Examples for using the /v1/folders
endpoint:
cURL Node.js Java Python C# Go PHP Ruby
curl --request POST 'https://api.canva.com/rest/v1/folders' \
--header 'Authorization: Bearer {token}' \
--header 'Content-Type: application/json' \
--data '{
"name": "My awesome holiday",
"parent_folder_id": "FAF2lZtloor"
}'
const fetch = require ( "node-fetch" ) ;
fetch ( "https://api.canva.com/rest/v1/folders" , {
method : "POST" ,
headers : {
"Authorization" : "Bearer {token}" ,
"Content-Type" : "application/json" ,
} ,
body : JSON . stringify ( {
"name" : "My awesome holiday" ,
"parent_folder_id" : "FAF2lZtloor"
} ) ,
} )
. 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/folders" ) )
. header ( "Authorization" , "Bearer {token}" )
. header ( "Content-Type" , "application/json" )
. method ( "POST" , HttpRequest . BodyPublishers . ofString ( "{\"name\": \"My awesome holiday\", \"parent_folder_id\": \"FAF2lZtloor\"}" ) )
. build ( ) ;
HttpResponse < String > response = HttpClient . newHttpClient ( ) . send (
request ,
HttpResponse . BodyHandlers . ofString ( )
) ;
System . out . println ( response . body ( ) ) ;
}
}
import requests
headers = {
"Authorization" : "Bearer {token}" ,
"Content-Type" : "application/json"
}
data = {
"name" : "My awesome holiday" ,
"parent_folder_id" : "FAF2lZtloor"
}
response = requests . post ( "https://api.canva.com/rest/v1/folders" ,
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/folders" ) ,
Headers =
{
{ "Authorization" , "Bearer {token}" } ,
} ,
Content = new StringContent (
"{\"name\": \"My awesome holiday\", \"parent_folder_id\": \"FAF2lZtloor\"}" ,
Encoding . UTF8 ,
"application/json"
) ,
} ;
using ( var response = await client . SendAsync ( request ) )
{
response . EnsureSuccessStatusCode ( ) ;
var body = await response . Content . ReadAsStringAsync ( ) ;
Console . WriteLine ( body ) ;
} ;
package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main ( ) {
payload := strings . NewReader ( `{
"name": "My awesome holiday",
"parent_folder_id": "FAF2lZtloor"
}` )
url := "https://api.canva.com/rest/v1/folders"
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/folders" ,
CURLOPT_CUSTOMREQUEST => "POST" ,
CURLOPT_RETURNTRANSFER => true ,
CURLOPT_HTTPHEADER => array (
'Authorization: Bearer {token}' ,
'Content-Type: application/json' ,
) ,
CURLOPT_POSTFIELDS => json_encode ( [
"name" => "My awesome holiday" ,
"parent_folder_id" => "FAF2lZtloor"
] )
) ) ;
$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/folders' )
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
{
"name": "My awesome holiday",
"parent_folder_id": "FAF2lZtloor"
}
REQUEST_BODY
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:
The folder object, which contains metadata about the folder.
Properties of folder
When the folder was created, as a Unix timestamp (in seconds since the
Unix Epoch).
When the folder was last updated, as a Unix timestamp (in seconds since the
Unix Epoch).
A thumbnail image representing the object.
Properties of thumbnail
The width of the thumbnail image in pixels.
The height of the thumbnail image in pixels.
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.
Example response
{
"folder" : {
"id" : "FAF2lZtloor" ,
"name" : "My awesome holiday" ,
"created_at" : 1377396000 ,
"updated_at" : 1692928800 ,
"thumbnail" : {
"width" : 595 ,
"height" : 335 ,
"url" : "https://document-export.canva.com/Vczz9/zF9vzVtdADc/2/thumbnail/0001.png?<query-string>"
}
}
}
Try it out