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.
Creates a reply to a comment in a design.
To reply to an existing thread of comments, you can use either the id
of the parent
(original) comment, or the thread_id
of a comment in the thread. Each comment can
have a maximum of 100 replies created for it.
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).
HTTP method and URL path
https://api.canva.com /rest /v1 /comments/{commentId}/replies
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):
comment:write
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
Path parameters
commentId
string
The id
of the comment.
Body parameters
attached_to
CommentObjectInput
An object containing identifying information for the design or other object you want to attach the comment to.
Properties of attached_to
type
string
This can be one of the following:
design
: If the comment is attached to a Canva Design.
design_id
string
The ID of the design you want to attach this comment to.
message
string
The reply comment message. This is the reply 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]
.
Example request
Examples for using the /v1/comments/{commentId}/replies
endpoint:
curl --request POST 'https://api.canva.com/rest/v1/comments/{commentId}/replies' \--header 'Authorization: Bearer {token}' \--header 'Content-Type: application/json' \--data '{"attached_to": {"design_id": "DAFVztcvd9z","type": "design"},"message": "Thanks!"}'
const fetch = require("node-fetch");fetch("https://api.canva.com/rest/v1/comments/{commentId}/replies", {method: "POST",headers: {"Authorization": "Bearer {token}","Content-Type": "application/json",},body: JSON.stringify({"attached_to": {"design_id": "DAFVztcvd9z","type": "design"},"message": "Thanks!"}),}).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/{commentId}/replies")).header("Authorization", "Bearer {token}").header("Content-Type", "application/json").method("POST", HttpRequest.BodyPublishers.ofString("{\"attached_to\": {\"design_id\": \"DAFVztcvd9z\", \"type\": \"design\"}, \"message\": \"Thanks!\"}")).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": "Thanks!"}response = requests.post("https://api.canva.com/rest/v1/comments/{commentId}/replies",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/{commentId}/replies"),Headers ={{ "Authorization", "Bearer {token}" },},Content = new StringContent("{\"attached_to\": {\"design_id\": \"DAFVztcvd9z\", \"type\": \"design\"}, \"message\": \"Thanks!\"}",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": "Thanks!"}`)url := "https://api.canva.com/rest/v1/comments/{commentId}/replies"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/{commentId}/replies",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" => "Thanks!"])));$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/{commentId}/replies')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": "Thanks!"}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:
comment
ReplyComment
Data about the reply comment, including the message, author, and the object (such as a design) the comment is attached to.
Properties of comment
type
string
The type of comment. When creating a reply to a top-level
comment, the type
is reply
.
id
string
The ID of the comment.
message
string
The comment message. This is the comment body shown in the Canva UI.
User mentions are shown here in the format [user_id:team_id]
.
mentions
object
The Canva users mentioned in the comment.
Properties of mentions
<KEY>
object of TeamUsers
Metadata for the user, consisting of the User ID, Team ID, and display name.
{"oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP": {"user_id": "oUnPjZ2k2yuhftbWF7873o","team_id": "oBpVhLW22VrqtwKgaayRbP","display_name": "John Doe"}}
user_id
string
The ID of the user.
team_id
string
The ID of the user's Canva Team.
display_name
string
The name of the user as shown in the Canva UI.
thread_id
string
The ID of the comment thread this reply is in. This ID is the same as the id
of the
parent comment.
attached_to
CommentObject
Identifying information about the object (such as a design) that the comment is attached to.
Properties of attached_to
type
string
This can be one of the following:
design
: If the comment is attached to a Canva Design.
design_id
string
The ID of the design this comment is attached to.
created_at
integer
When the comment or reply was created, as a Unix timestamp (in seconds since the Unix Epoch).
updated_at
integer
When the comment or reply was last updated, as a Unix timestamp (in seconds since the Unix Epoch).
Example response
{"comment": {"type": "reply","id": "KeAZEAjijEb","attached_to": {"design_id": "DAFVztcvd9z","type": "design"},"message": "Thanks!","author": {"id": "uKakKUfI03Fg8k2gZ6OkT","display_name": "John Doe"},"created_at": 1692929800,"updated_at": 1692929900,"mentions": {"oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP": {"user_id": "oUnPjZ2k2yuhftbWF7873o","team_id": "oBpVhLW22VrqtwKgaayRbP","display_name": "John Doe"}},"thread_id": "KeAbiEAjZEj"}}