Create comment
This API is deprecated, so you should use the Create thread API instead.
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.
 
Create a new top-level comment on a design. For information on comments and how they're used in the Canva UI, see the Canva Help Center(opens in a new tab or window). A design can have a maximum of 1000 comments.
HTTP method and URL path
  https://api.canva.com /rest /v1 /commentsThis operation is rate limited to 20 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):
comment:write
Header parameters
Content-TypestringIndicates 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
attached_toCommentObjectInputAn object containing identifying information for the design or other object you want to attach the comment to.
If the comment is attached to a Canva Design.
typestringAvailable values: The only valid value is design.
design_idstringThe ID of the design you want to attach this comment to.
messagestringThe comment message. This is the comment body shown in the Canva UI.
You can also mention users in your message by specifying their User ID and Team ID
using the format [user_id:team_id]. If the assignee_id parameter is specified, you
must mention the assignee in the message.
Minimum length: 1
Maximum length: 2048
assignee_idstringLets you assign the comment to a Canva user using their User ID. You must mention the
assigned user in the message.
Example request
Examples for using the /v1/comments endpoint:
curl --request POST 'https://api.canva.com/rest/v1/comments' \--header 'Authorization: Bearer {token}' \--header 'Content-Type: application/json' \--data '{"attached_to": {"design_id": "DAFVztcvd9z","type": "design"},"message": "Great work [oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP]!","assignee_id": "oUnPjZ2k2yuhftbWF7873o"}'
const fetch = require("node-fetch");fetch("https://api.canva.com/rest/v1/comments", {method: "POST",headers: {"Authorization": "Bearer {token}","Content-Type": "application/json",},body: JSON.stringify({"attached_to": {"design_id": "DAFVztcvd9z","type": "design"},"message": "Great work [oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP]!","assignee_id": "oUnPjZ2k2yuhftbWF7873o"}),}).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/comments")).header("Authorization", "Bearer {token}").header("Content-Type", "application/json").method("POST", HttpRequest.BodyPublishers.ofString("{\"attached_to\": {\"design_id\": \"DAFVztcvd9z\", \"type\": \"design\"}, \"message\": \"Great work [oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP]!\", \"assignee_id\": \"oUnPjZ2k2yuhftbWF7873o\"}")).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 = {"attached_to": {"design_id": "DAFVztcvd9z","type": "design"},"message": "Great work [oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP]!","assignee_id": "oUnPjZ2k2yuhftbWF7873o"}response = requests.post("https://api.canva.com/rest/v1/comments",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/comments"),Headers ={{ "Authorization", "Bearer {token}" },},Content = new StringContent("{\"attached_to\": {\"design_id\": \"DAFVztcvd9z\", \"type\": \"design\"}, \"message\": \"Great work [oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP]!\", \"assignee_id\": \"oUnPjZ2k2yuhftbWF7873o\"}",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(`{"attached_to": {"design_id": "DAFVztcvd9z","type": "design"},"message": "Great work [oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP]!","assignee_id": "oUnPjZ2k2yuhftbWF7873o"}`)url := "https://api.canva.com/rest/v1/comments"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/comments",CURLOPT_CUSTOMREQUEST => "POST",CURLOPT_RETURNTRANSFER => true,CURLOPT_HTTPHEADER => array('Authorization: Bearer {token}','Content-Type: application/json',),CURLOPT_POSTFIELDS => json_encode(["attached_to" => ["design_id" => "DAFVztcvd9z","type" => "design"],"message" => "Great work [oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP]!","assignee_id" => "oUnPjZ2k2yuhftbWF7873o"])));$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/comments')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{"attached_to": {"design_id": "DAFVztcvd9z","type": "design"},"message": "Great work [oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP]!","assignee_id": "oUnPjZ2k2yuhftbWF7873o"}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:
commentParentCommentData about the comment, including the message, author, and the object (such as a design) the comment is attached to.
typestringThe type of comment. When creating a new parent (top-level)
comment, the type is parent.
idstringThe ID of the comment.
You can use this ID to create replies to the comment using the Create reply API.
messagestringThe comment message. This is the comment body shown in the Canva UI.
User mentions are shown here in the format [user_id:team_id].
created_atintegerWhen the comment or reply was created, as a Unix timestamp (in seconds since the Unix Epoch).
updated_atintegerWhen the comment or reply was last updated, as a Unix timestamp (in seconds since the Unix Epoch).
assigneeUserMetadata for the user, consisting of the User ID and display name.
idstringThe ID of the user.
display_namestringThe name of the user as shown in the Canva UI.
resolverUserMetadata for the user, consisting of the User ID and display name.
idstringThe ID of the user.
display_namestringThe name of the user as shown in the Canva UI.
mentionsobjectThe Canva users mentioned in the comment.
<KEY>object of TeamUsersMetadata for the user, consisting of the User ID, Team ID, and display name.
user_idstringThe ID of the user.
team_idstringThe ID of the user's Canva Team.
display_namestringThe name of the user as shown in the Canva UI.
attached_toCommentObjectIdentifying information about the object (such as a design) that the comment is attached to.
If the comment is attached to a Canva Design.
typestringAvailable values: The only valid value is design.
design_idstringThe ID of the design this comment is attached to.
Example response
{}