> ## Documentation Index
> Fetch the complete documentation index at: https://www.canva.dev/docs/apps/llms.txt
> Use this file to discover all available pages before exploring further.
# 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](https://www.canva.dev/docs/apps/rest-apis/versions/).
* Public apps 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](https://www.canva.com/help/comments/).
## 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 app.
## Authentication and authorization
This endpoint requires a valid access token that acts on behalf of a user. For more information, see [Generate an access token](/docs/apps/rest-apis/reference/authentication/generate-access-token).
### Scopes
The access token must have all the following [scopes](/docs/apps/rest-apis/scopes) (permissions):
* `comment:read`
## Header parameters
Provides credentials to authenticate the request, in the form of a `Bearer` token.
For example: `Authorization: Bearer {token}`
## Path parameters
The design ID.
The ID of the thread.
## Query parameters
The number of replies to return.
**Minimum:** `1`
**Maximum:** `100`
**Default value:** `50`
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:
```sh
curl --request GET 'https://api.canva.com/rest/v1/designs/{designId}/comments/{threadId}/replies' \
--header 'Authorization: Bearer {token}'
```
```js
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));
```
```java
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 response = HttpClient.newHttpClient().send(
request,
HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
```
```py
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())
```
```csharp
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);
};
```
```go
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))
}
```
```php
$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;
}
```
```ruby
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
```
## Success response
If successful, the endpoint returns a `200` response with a JSON body with the following parameters:
A reply to a thread.
The `author` of the reply might be missing if that user account no longer exists.
Properties of items>} defaultExpanded={true}>
The ID of the reply.
The ID of the design that the thread for this reply is attached to.
The ID of the thread this reply is in.
The content of a comment thread or reply.
Properties of content>}>
The content in plaintext.
Any user mention tags are shown in the format `[user_id:team_id]`.
The content in markdown.
Any user mention tags are shown in the format `[user_id:team_id]`
The Canva users mentioned in the comment thread or reply.
Properties of mentions>}>
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`).
```json
{
"oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP": {
"tag": "oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP",
"user": {
"user_id": "oUnPjZ2k2yuhftbWF7873o",
"team_id": "oBpVhLW22VrqtwKgaayRbP",
"display_name": "John Doe"
}
}
}
```
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`).
Metadata for the user, consisting of the User ID, Team ID, and display name.
Properties of user>}>
The ID of the user.
The ID of the user's Canva Team.
The name of the user as shown in the Canva UI.
When the reply was created, as a Unix timestamp
(in seconds since the Unix Epoch).
When the reply was last updated, as a Unix timestamp
(in seconds since the Unix Epoch).
Metadata for the user, consisting of the User ID and display name.
Properties of author>}>
The ID of the user.
The name of the user as shown in the Canva UI.
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
```json
{
"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
}
]
}
```
## Error responses
### 403 Forbidden
A short string indicating what failed. This field can be used to handle errors programmatically. For a complete list of error codes, see [Error responses](/docs/apps/rest-apis/error-responses/).
A human-readable description of what went wrong.
#### Example error response
##### Not allowed to fetch replies
```json
{
"code": "permission_denied",
"message": "Not allowed to fetch replies"
}
```
### 404 Not Found
A short string indicating what failed. This field can be used to handle errors programmatically. For a complete list of error codes, see [Error responses](/docs/apps/rest-apis/error-responses/).
A human-readable description of what went wrong.
#### Example error response
##### Design or comment not found
```json
{
"code": "design_or_thread_not_found",
"message": "Design or comment not found"
}
```