List replies

List the replies to a comment on a design.

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.

Retrieves a list of replies for a comment or suggestion thread 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).

HTTP method and URL path

GET https://api.canva.com/rest/v1/designs/{designId}/comments/{threadId}/replies

This operation is rate limited to 100 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:read

For more information, see Scopes.

Header parameters

AuthorizationstringRequired

Provides credentials to authenticate the request, in the form of a Bearer token.

For example: Authorization: Bearer {token}

Path parameters

designIdstringRequired

The design ID.

threadIdstringRequired

The ID of the thread.

Query parameters

limitintegerOptional

The number of replies to return.

Minimum: 1

Maximum: 100

Default value: 50

continuationstringOptional

If the success response contains a continuation token, the list contains more items you can list. You can use this token as a query parameter and retrieve more items from the list, for example ?continuation={continuation}.

To retrieve all items, you might need to make multiple requests.

Example request

Examples for using the /v1/designs/{designId}/comments/{threadId}/replies endpoint:

curl --request GET 'https://api.canva.com/rest/v1/designs/{designId}/comments/{threadId}/replies' \
--header 'Authorization: Bearer {token}'
SH
const fetch = require("node-fetch");
fetch("https://api.canva.com/rest/v1/designs/{designId}/comments/{threadId}/replies", {
method: "GET",
headers: {
"Authorization": "Bearer {token}",
},
})
.then(async (response) => {
const data = await response.json();
console.log(data);
})
.catch(err => console.error(err));
JS
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}/comments/{threadId}/replies"))
.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());
}
}
JAVA
import requests
headers = {
"Authorization": "Bearer {token}"
}
response = requests.get("https://api.canva.com/rest/v1/designs/{designId}/comments/{threadId}/replies",
headers=headers
)
print(response.json())
PY
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}/comments/{threadId}/replies"),
Headers =
{
{ "Authorization", "Bearer {token}" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
};
CSHARP
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://api.canva.com/rest/v1/designs/{designId}/comments/{threadId}/replies"
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))
}
GO
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.canva.com/rest/v1/designs/{designId}/comments/{threadId}/replies",
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;
}
PHP
require 'net/http'
require 'uri'
url = URI('https://api.canva.com/rest/v1/designs/{designId}/comments/{threadId}/replies')
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request['Authorization'] = 'Bearer {token}'
response = http.request(request)
puts response.read_body
RUBY

Success response

If successful, the endpoint returns a 200 response with a JSON body with the following parameters:

itemsReply[]

A reply to a thread.

The author of the reply might be missing if that user account no longer exists.

idstring

The ID of the reply.

design_idstring

The ID of the design that the thread for this reply is attached to.

thread_idstring

The ID of the thread this reply is in.

contentCommentContent

The content of a comment thread or reply.

plaintextstring

The content in plaintext. Any user mention tags are shown in the format [user_id:team_id].

markdownstringOptional

The content in markdown. Any user mention tags are shown in the format [user_id:team_id]

mentionsobject

The Canva users mentioned in the comment thread or reply.

<KEY>object of UserMentions

Information about the user mentioned in a comment thread or reply. Each user mention is keyed using the user's user ID and team ID separated by a colon (user_id:team_id).

{
"oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP": {
"tag": "oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP",
"user": {
"user_id": "oUnPjZ2k2yuhftbWF7873o",
"team_id": "oBpVhLW22VrqtwKgaayRbP",
"display_name": "John Doe"
}
}
}
JSON
tagstring

The mention tag for the user mentioned in the comment thread or reply content. This has the format of the user's user ID and team ID separated by a colon (user_id:team_id).

userTeamUser

Metadata for the user, consisting of the User ID, Team ID, and display name.

user_idstringOptional

The ID of the user.

team_idstringOptional

The ID of the user's Canva Team.

display_namestringOptional

The name of the user as shown in the Canva UI.

created_atinteger

When the reply was created, as a Unix timestamp (in seconds since the Unix Epoch).

updated_atinteger

When the reply was last updated, as a Unix timestamp (in seconds since the Unix Epoch).

authorUserOptional

Metadata for the user, consisting of the User ID and display name.

idstring

The ID of the user.

display_namestringOptional

The name of the user as shown in the Canva UI.

continuationstringOptional

If the success response contains a continuation token, the list contains more items you can list. You can use this token as a query parameter and retrieve more items from the list, for example ?continuation={continuation}.

To retrieve all items, you might need to make multiple requests.

Example response

{
"continuation": "RkFGMgXlsVTDbMd:MR3L0QjiaUzycIAjx0yMyuNiV0OildoiOwL0x32G4NjNu4FwtAQNxowUQNMMYN",
"items": [
{
"id": "KeAZEAjijEb",
"design_id": "DAFVztcvd9z",
"thread_id": "KeAbiEAjZEj",
"author": {
"id": "uKakKUfI03Fg8k2gZ6OkT",
"display_name": "John Doe"
},
"content": {
"plaintext": "Great work [oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP]!",
"markdown": "*_Great work_* [oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP]!"
},
"mentions": {
"oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP": {
"tag": "oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP",
"user": {
"user_id": "oUnPjZ2k2yuhftbWF7873o",
"team_id": "oBpVhLW22VrqtwKgaayRbP",
"display_name": "John Doe"
}
}
},
"created_at": 1692929800,
"updated_at": 1692929900
}
]
}
JSON

Try it out

Step 1: Enter your access token

To get started, generate an access token or provide your own below