curl --request GET \
--url https://public-api.etoro.com/api/v1/posts/{postId}/comments \
--header 'x-api-key: <api-key>' \
--header 'x-request-id: <x-request-id>' \
--header 'x-user-key: <api-key>'import requests
url = "https://public-api.etoro.com/api/v1/posts/{postId}/comments"
headers = {
"x-request-id": "<x-request-id>",
"x-api-key": "<api-key>",
"x-user-key": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'x-request-id': '<x-request-id>',
'x-api-key': '<api-key>',
'x-user-key': '<api-key>'
}
};
fetch('https://public-api.etoro.com/api/v1/posts/{postId}/comments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://public-api.etoro.com/api/v1/posts/{postId}/comments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>",
"x-request-id: <x-request-id>",
"x-user-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://public-api.etoro.com/api/v1/posts/{postId}/comments"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-request-id", "<x-request-id>")
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("x-user-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://public-api.etoro.com/api/v1/posts/{postId}/comments")
.header("x-request-id", "<x-request-id>")
.header("x-api-key", "<api-key>")
.header("x-user-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api.etoro.com/api/v1/posts/{postId}/comments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-request-id"] = '<x-request-id>'
request["x-api-key"] = '<api-key>'
request["x-user-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"reactionPaging": {
"totalCount": 42,
"offsetEntityId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"next": "/api/v1/reactions/3fa85f64-5717-4562-b3fc-2c963f66afa6/comments?take=20&offsetEntityId=7c9e6679-7425-40de-944b-e07fc1f90ae7"
},
"comments": [
{
"entity": {
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"owner": {
"id": "7890",
"username": "johndoe",
"firstName": "John",
"lastName": "Doe",
"avatar": {
"small": "https://etoro-cdn.etorostatic.com/avatars/150X150/johndoe.jpg",
"medium": "https://etoro-cdn.etorostatic.com/avatars/200X200/johndoe.jpg",
"large": "https://etoro-cdn.etorostatic.com/avatars/300X300/johndoe.jpg",
"svg": {
"url": "https://etoro-cdn.etorostatic.com/avatars/svg/johndoe.svg",
"backgroundColor": "#2196F3",
"textColor": "#FFFFFF"
}
},
"roles": [
"Regular"
],
"isBlocked": false,
"isPrivate": false,
"countryCode": 840,
"piLevel": 0
},
"obsoleteId": "98765",
"created": "2025-01-15T10:30:00Z",
"updated": "2025-01-15T11:00:00Z",
"message": {
"text": "Excited about $TSLA earnings next week!",
"languageCode": "en"
},
"attachments": [
{
"url": "https://cdn.etoro.com/rich-media/images/johndoe/abc-2025-01-15.jpg",
"title": "Tesla Q4 Earnings Chart",
"host": "cdn.etoro.com",
"description": "Tesla quarterly earnings breakdown",
"mediaType": "Image",
"media": {
"image": {
"width": 1200,
"height": 630,
"url": "https://cdn.etoro.com/rich-media/images/johndoe/abc-2025-01-15.jpg"
},
"video": {
"videoSourceId": "dQw4w9WgXcQ",
"videoSource": "YouTube",
"image": {
"width": 1280,
"height": 720,
"url": "https://img.youtube.com/vi/dQw4w9WgXcQ/hqdefault.jpg"
}
}
}
}
],
"mentions": [
{
"user": {
"id": "7890",
"username": "johndoe",
"firstName": "John",
"lastName": "Doe",
"avatar": {
"small": "https://etoro-cdn.etorostatic.com/avatars/150X150/johndoe.jpg",
"medium": "https://etoro-cdn.etorostatic.com/avatars/200X200/johndoe.jpg",
"large": "https://etoro-cdn.etorostatic.com/avatars/300X300/johndoe.jpg",
"svg": {
"url": "https://etoro-cdn.etorostatic.com/avatars/svg/johndoe.svg",
"backgroundColor": "#2196F3",
"textColor": "#FFFFFF"
}
},
"roles": [
"Regular"
],
"isBlocked": false,
"isPrivate": false,
"countryCode": 840,
"piLevel": 0
},
"isDirect": true
}
],
"tags": [
{
"market": {
"id": "TSLA",
"symbolName": "TSLA",
"displayName": "Tesla",
"updated": "2025-01-15T00:00:00Z",
"assetType": "Stocks",
"internalId": 59114,
"avatar": {
"small": "https://cdn.etoro.com/assets/img/markets/TSLA/small.png",
"medium": "https://cdn.etoro.com/assets/img/markets/TSLA/medium.png",
"large": "https://cdn.etoro.com/assets/img/markets/TSLA/large.png",
"svg": {
"url": "https://cdn.etoro.com/assets/img/markets/TSLA/logo.svg",
"backgroundColor": "#CC0000",
"textColor": "#FFFFFF"
}
},
"application": "eToro",
"metadata": "{}",
"assetTypeId": 10,
"assetTypeSubCategoryId": 101
}
}
],
"isSpam": false,
"editStatus": "None",
"parent": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"obsoleteId": "12345",
"type": "Post"
}
},
"repliesCount": 2,
"replies": "<array>",
"emotionsData": {
"like": {
"paging": {
"totalCount": 42,
"offsetEntityId": "b2c3d4e5-f6a7-4890-bcde-f23456789012",
"next": "/api/v1/reactions/3fa85f64-5717-4562-b3fc-2c963f66afa6/emotions?offset=10&take=10"
},
"emotions": [
{
"type": "Like",
"id": "b2c3d4e5-f6a7-4890-bcde-f23456789012",
"owner": {
"id": "7890",
"username": "johndoe",
"firstName": "John",
"lastName": "Doe",
"avatar": {
"small": "https://etoro-cdn.etorostatic.com/avatars/150X150/johndoe.jpg",
"medium": "https://etoro-cdn.etorostatic.com/avatars/200X200/johndoe.jpg",
"large": "https://etoro-cdn.etorostatic.com/avatars/300X300/johndoe.jpg",
"svg": {
"url": "https://etoro-cdn.etorostatic.com/avatars/svg/johndoe.svg",
"backgroundColor": "#2196F3",
"textColor": "#FFFFFF"
}
},
"roles": [
"Regular"
],
"isBlocked": false,
"isPrivate": false,
"countryCode": 840,
"piLevel": 0
},
"obsoleteId": "54321",
"parent": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"obsoleteId": "12345",
"type": "Post"
},
"created": "2025-01-15T10:30:00Z"
}
]
}
},
"requesterContext": {
"isOwner": false,
"isFlaggingAsSpam": false,
"isSubscribed": false,
"isLiking": false,
"isSaved": false,
"isPinned": false,
"isRequesterBlocking": false,
"isInteractionRestricted": false
}
}
]
}List comments on a post
Rate limit: 60 requests per 60 seconds. This is the default shared quota — it is shared with every other endpoint that has no dedicated limit, so requests across those endpoints all draw from the same budget.
Returns a paginated list of top-level comments on a post. Soft-deleted comments are included with isDeleted=true and blanked content so reply trees remain navigable. Authentication is optional — unauthenticated requests omit requesterContext.
curl --request GET \
--url https://public-api.etoro.com/api/v1/posts/{postId}/comments \
--header 'x-api-key: <api-key>' \
--header 'x-request-id: <x-request-id>' \
--header 'x-user-key: <api-key>'import requests
url = "https://public-api.etoro.com/api/v1/posts/{postId}/comments"
headers = {
"x-request-id": "<x-request-id>",
"x-api-key": "<api-key>",
"x-user-key": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'x-request-id': '<x-request-id>',
'x-api-key': '<api-key>',
'x-user-key': '<api-key>'
}
};
fetch('https://public-api.etoro.com/api/v1/posts/{postId}/comments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://public-api.etoro.com/api/v1/posts/{postId}/comments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>",
"x-request-id: <x-request-id>",
"x-user-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://public-api.etoro.com/api/v1/posts/{postId}/comments"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-request-id", "<x-request-id>")
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("x-user-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://public-api.etoro.com/api/v1/posts/{postId}/comments")
.header("x-request-id", "<x-request-id>")
.header("x-api-key", "<api-key>")
.header("x-user-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api.etoro.com/api/v1/posts/{postId}/comments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-request-id"] = '<x-request-id>'
request["x-api-key"] = '<api-key>'
request["x-user-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"reactionPaging": {
"totalCount": 42,
"offsetEntityId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"next": "/api/v1/reactions/3fa85f64-5717-4562-b3fc-2c963f66afa6/comments?take=20&offsetEntityId=7c9e6679-7425-40de-944b-e07fc1f90ae7"
},
"comments": [
{
"entity": {
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"owner": {
"id": "7890",
"username": "johndoe",
"firstName": "John",
"lastName": "Doe",
"avatar": {
"small": "https://etoro-cdn.etorostatic.com/avatars/150X150/johndoe.jpg",
"medium": "https://etoro-cdn.etorostatic.com/avatars/200X200/johndoe.jpg",
"large": "https://etoro-cdn.etorostatic.com/avatars/300X300/johndoe.jpg",
"svg": {
"url": "https://etoro-cdn.etorostatic.com/avatars/svg/johndoe.svg",
"backgroundColor": "#2196F3",
"textColor": "#FFFFFF"
}
},
"roles": [
"Regular"
],
"isBlocked": false,
"isPrivate": false,
"countryCode": 840,
"piLevel": 0
},
"obsoleteId": "98765",
"created": "2025-01-15T10:30:00Z",
"updated": "2025-01-15T11:00:00Z",
"message": {
"text": "Excited about $TSLA earnings next week!",
"languageCode": "en"
},
"attachments": [
{
"url": "https://cdn.etoro.com/rich-media/images/johndoe/abc-2025-01-15.jpg",
"title": "Tesla Q4 Earnings Chart",
"host": "cdn.etoro.com",
"description": "Tesla quarterly earnings breakdown",
"mediaType": "Image",
"media": {
"image": {
"width": 1200,
"height": 630,
"url": "https://cdn.etoro.com/rich-media/images/johndoe/abc-2025-01-15.jpg"
},
"video": {
"videoSourceId": "dQw4w9WgXcQ",
"videoSource": "YouTube",
"image": {
"width": 1280,
"height": 720,
"url": "https://img.youtube.com/vi/dQw4w9WgXcQ/hqdefault.jpg"
}
}
}
}
],
"mentions": [
{
"user": {
"id": "7890",
"username": "johndoe",
"firstName": "John",
"lastName": "Doe",
"avatar": {
"small": "https://etoro-cdn.etorostatic.com/avatars/150X150/johndoe.jpg",
"medium": "https://etoro-cdn.etorostatic.com/avatars/200X200/johndoe.jpg",
"large": "https://etoro-cdn.etorostatic.com/avatars/300X300/johndoe.jpg",
"svg": {
"url": "https://etoro-cdn.etorostatic.com/avatars/svg/johndoe.svg",
"backgroundColor": "#2196F3",
"textColor": "#FFFFFF"
}
},
"roles": [
"Regular"
],
"isBlocked": false,
"isPrivate": false,
"countryCode": 840,
"piLevel": 0
},
"isDirect": true
}
],
"tags": [
{
"market": {
"id": "TSLA",
"symbolName": "TSLA",
"displayName": "Tesla",
"updated": "2025-01-15T00:00:00Z",
"assetType": "Stocks",
"internalId": 59114,
"avatar": {
"small": "https://cdn.etoro.com/assets/img/markets/TSLA/small.png",
"medium": "https://cdn.etoro.com/assets/img/markets/TSLA/medium.png",
"large": "https://cdn.etoro.com/assets/img/markets/TSLA/large.png",
"svg": {
"url": "https://cdn.etoro.com/assets/img/markets/TSLA/logo.svg",
"backgroundColor": "#CC0000",
"textColor": "#FFFFFF"
}
},
"application": "eToro",
"metadata": "{}",
"assetTypeId": 10,
"assetTypeSubCategoryId": 101
}
}
],
"isSpam": false,
"editStatus": "None",
"parent": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"obsoleteId": "12345",
"type": "Post"
}
},
"repliesCount": 2,
"replies": "<array>",
"emotionsData": {
"like": {
"paging": {
"totalCount": 42,
"offsetEntityId": "b2c3d4e5-f6a7-4890-bcde-f23456789012",
"next": "/api/v1/reactions/3fa85f64-5717-4562-b3fc-2c963f66afa6/emotions?offset=10&take=10"
},
"emotions": [
{
"type": "Like",
"id": "b2c3d4e5-f6a7-4890-bcde-f23456789012",
"owner": {
"id": "7890",
"username": "johndoe",
"firstName": "John",
"lastName": "Doe",
"avatar": {
"small": "https://etoro-cdn.etorostatic.com/avatars/150X150/johndoe.jpg",
"medium": "https://etoro-cdn.etorostatic.com/avatars/200X200/johndoe.jpg",
"large": "https://etoro-cdn.etorostatic.com/avatars/300X300/johndoe.jpg",
"svg": {
"url": "https://etoro-cdn.etorostatic.com/avatars/svg/johndoe.svg",
"backgroundColor": "#2196F3",
"textColor": "#FFFFFF"
}
},
"roles": [
"Regular"
],
"isBlocked": false,
"isPrivate": false,
"countryCode": 840,
"piLevel": 0
},
"obsoleteId": "54321",
"parent": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"obsoleteId": "12345",
"type": "Post"
},
"created": "2025-01-15T10:30:00Z"
}
]
}
},
"requesterContext": {
"isOwner": false,
"isFlaggingAsSpam": false,
"isSubscribed": false,
"isLiking": false,
"isSaved": false,
"isPinned": false,
"isRequesterBlocking": false,
"isInteractionRestricted": false
}
}
]
}Authorizations
API key of the application. Only valid together with the x-user-key header — the pair is an alternative to OAuth bearer authentication, never sent alongside it. The pair is granted the same permissions the operation's OAuth scopes describe.
Demo credential for trying the API from these docs: lhgfaslk21490FAScVPkdsb53F9dNkfHG4faZSG5vfjndfcfgdssdgsdHF4663
User-specific authentication key. Only valid together with the x-api-key header — the pair is an alternative to OAuth bearer authentication, never sent alongside it.
Demo credential for trying the API from these docs: eyJlYW4iOiJVbnJlZ2lzdGVyZWRBcHBsaWNhdGlvbiIsImVrIjoiOE5sZ2cwcW5EUVdROUFNWGpXT2lmOWktZnpidG5KcUlqWGJ3WHJZZkpZcldrbG90ZEhvLVBjSWhQaU8xU1ZtMW84aU1WZGZqN2xWNzFjLXFxLmcybXE1dnh4Q1hUT25xaWRUaTFlcEhmVk1fIn0_
Headers
A unique request identifier.
"48adba60-7193-46be-8bf7-8d558c2ce3e6"
Path Parameters
ID of the parent post (UUID)
Query Parameters
Number of items to return (1–100, default 20)
1 <= x <= 100Opaque cursor from previous response for stable paging
Sort order
Asc, Desc Include user badges in the response