eToro Comments and Replies API
The Comments and Replies API from eToro — 4 operation(s) for comments and replies.
The Comments and Replies API from eToro — 4 operation(s) for comments and replies.
openapi: 3.0.1
info:
title: Deprecated eToro Public API operations Agent Portfolios Comments and Replies API
version: v1.158.0
description: Snapshot of API operations that existed in the previous docs OpenAPI file and are no longer present in the current upstream Swagger.
tags:
- name: Comments and Replies
paths:
/api/v1/posts/{postId}/comments:
post:
tags:
- Comments and Replies
summary: Create a comment on a post
description: Creates a new comment on a specific discussion post. Comments can include text, mentions, tags, and attachments.
parameters:
- name: x-request-id
in: header
required: true
schema:
type: string
format: uuid
example: 29312cd0-780c-418d-93f2-879c5e95cf1d
description: A unique request identifier.
- name: x-api-key
in: header
required: true
schema:
type: string
format: password
example: lhgfaslk21490FAScVPkdsb53F9dNkfHG4faZSG5vfjndfcfgdssdgsdHF4663
description: API key for authentication.
- name: x-user-key
in: header
required: true
schema:
type: string
format: password
example: eyJlYW4iOiJVbnJlZ2lzdGVyZWRBcHBsaWNhdGlvbiIsImVrIjoiOE5sZ2cwcW5EUVdROUFNWGpXT2lmOWktZnpidG5KcUlqWGJ3WHJZZkpZcldrbG90ZEhvLVBjSWhQaU8xU1ZtMW84aU1WZGZqN2xWNzFjLXFxLmcybXE1dnh4Q1hUT25xaWRUaTFlcEhmVk1fIn0_
description: User-specific authentication key.
- name: postId
in: path
description: ID of the post to comment on (UUID)
required: true
schema:
type: string
format: uuid
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
requestBody:
description: Comment creation details. `message` is required; `attachments` is optional.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CommentCreateRequest'
examples:
textComment:
summary: Plain text comment
value:
message: Great analysis — I've been watching $TSLA closely too.
commentWithAttachment:
summary: Comment with an image attachment
value:
message: Check out this chart I made!
attachments:
- url: https://cdn.etoro.com/rich-media/images/johndoe/abc-2025-01-15.jpg
mediaType: Image
responses:
'201':
description: Comment created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Comment'
'401':
description: Authentication required
'404':
description: Parent post not found
'422':
description: Validation failed — missing message body or spam classification rejected the content
operationId: createACommentOnAPost
get:
tags:
- Comments and Replies
summary: List comments on a post
description: 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.
parameters:
- name: x-request-id
in: header
required: true
schema:
type: string
format: uuid
example: 2f88fea0-f7af-4f63-9ce8-edb4ffef7a42
description: A unique request identifier.
- name: x-api-key
in: header
required: true
schema:
type: string
format: password
example: lhgfaslk21490FAScVPkdsb53F9dNkfHG4faZSG5vfjndfcfgdssdgsdHF4663
description: API key for authentication.
- name: x-user-key
in: header
required: true
schema:
type: string
format: password
example: eyJlYW4iOiJVbnJlZ2lzdGVyZWRBcHBsaWNhdGlvbiIsImVrIjoiOE5sZ2cwcW5EUVdROUFNWGpXT2lmOWktZnpidG5KcUlqWGJ3WHJZZkpZcldrbG90ZEhvLVBjSWhQaU8xU1ZtMW84aU1WZGZqN2xWNzFjLXFxLmcybXE1dnh4Q1hUT25xaWRUaTFlcEhmVk1fIn0_
description: User-specific authentication key.
- name: postId
in: path
description: ID of the parent post (UUID)
schema:
type: string
format: uuid
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
required: true
- name: take
in: query
description: Number of items to return (1–100, default 20)
schema:
type: integer
default: 20
minimum: 1
maximum: 100
example: 20
- name: offsetEntityId
in: query
description: Opaque cursor from previous response for stable paging
schema:
type: string
example: b2c3d4e5-f6a7-4890-bcde-f23456789012
- name: order
in: query
description: Sort order
schema:
type: string
enum:
- Asc
- Desc
default: Desc
example: Desc
- name: badgesExperimentIsEnabled
in: query
description: Include user badges in the response
schema:
type: boolean
default: false
responses:
'200':
description: Paginated comment list
content:
application/json:
schema:
$ref: '#/components/schemas/CommentsResponse'
'404':
description: Post not found
operationId: listCommentsOnAPost
/api/v1/posts/{postId}/comments/{commentId}:
put:
tags:
- Comments and Replies
summary: Update a comment
description: Edits the authenticated user's own comment in-place. Sets editStatus to Edited. Emotion counts, repliesCount, and created are preserved. Owner is derived from the auth token.
parameters:
- name: x-request-id
in: header
required: true
schema:
type: string
format: uuid
example: f77ef9ed-152e-4386-9bb9-a98ae8d7a612
description: A unique request identifier.
- name: x-api-key
in: header
required: true
schema:
type: string
format: password
example: lhgfaslk21490FAScVPkdsb53F9dNkfHG4faZSG5vfjndfcfgdssdgsdHF4663
description: API key for authentication.
- name: x-user-key
in: header
required: true
schema:
type: string
format: password
example: eyJlYW4iOiJVbnJlZ2lzdGVyZWRBcHBsaWNhdGlvbiIsImVrIjoiOE5sZ2cwcW5EUVdROUFNWGpXT2lmOWktZnpidG5KcUlqWGJ3WHJZZkpZcldrbG90ZEhvLVBjSWhQaU8xU1ZtMW84aU1WZGZqN2xWNzFjLXFxLmcybXE1dnh4Q1hUT25xaWRUaTFlcEhmVk1fIn0_
description: User-specific authentication key.
- name: postId
in: path
description: ID of the parent post (UUID)
schema:
type: string
format: uuid
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
required: true
- name: commentId
in: path
description: ID of the comment (UUID)
schema:
type: string
format: uuid
example: 7c9e6679-7425-40de-944b-e07fc1f90ae7
required: true
requestBody:
description: Updated comment content
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CommentUpdateRequest'
responses:
'200':
description: Updated comment
content:
application/json:
schema:
$ref: '#/components/schemas/Comment'
'401':
description: Authentication required
'403':
description: Requester is not the comment owner
'404':
description: Post or comment not found
'422':
description: Validation failed — missing message body or spam classification rejected the content
operationId: updateAComment
delete:
tags:
- Comments and Replies
summary: Soft-delete a comment
description: Soft-deletes the authenticated user's own comment. Sets isDeleted=true and blanks message text and attachments. Replies are preserved and the parent post's totalCommentsAndReplies is decremented only by the deleted node.
parameters:
- name: x-request-id
in: header
required: true
schema:
type: string
format: uuid
example: 643b333f-b00f-43a2-a033-8d6a36f824ea
description: A unique request identifier.
- name: x-api-key
in: header
required: true
schema:
type: string
format: password
example: lhgfaslk21490FAScVPkdsb53F9dNkfHG4faZSG5vfjndfcfgdssdgsdHF4663
description: API key for authentication.
- name: x-user-key
in: header
required: true
schema:
type: string
format: password
example: eyJlYW4iOiJVbnJlZ2lzdGVyZWRBcHBsaWNhdGlvbiIsImVrIjoiOE5sZ2cwcW5EUVdROUFNWGpXT2lmOWktZnpidG5KcUlqWGJ3WHJZZkpZcldrbG90ZEhvLVBjSWhQaU8xU1ZtMW84aU1WZGZqN2xWNzFjLXFxLmcybXE1dnh4Q1hUT25xaWRUaTFlcEhmVk1fIn0_
description: User-specific authentication key.
- name: postId
in: path
description: ID of the parent post (UUID)
schema:
type: string
format: uuid
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
required: true
- name: commentId
in: path
description: ID of the comment (UUID)
schema:
type: string
format: uuid
example: 7c9e6679-7425-40de-944b-e07fc1f90ae7
required: true
responses:
'204':
description: Comment deleted successfully
'401':
description: Authentication required
'403':
description: Requester is not the comment owner
'404':
description: Post or comment not found
operationId: softDeleteAComment
/api/v1/posts/{postId}/comments/{commentId}/replies:
get:
tags:
- Comments and Replies
summary: List replies on a comment
description: Returns a paginated list of replies nested under a specific comment. Authentication is optional.
parameters:
- name: x-request-id
in: header
required: true
schema:
type: string
format: uuid
example: 967bd734-c758-446a-a447-d88ae65f4346
description: A unique request identifier.
- name: x-api-key
in: header
required: true
schema:
type: string
format: password
example: lhgfaslk21490FAScVPkdsb53F9dNkfHG4faZSG5vfjndfcfgdssdgsdHF4663
description: API key for authentication.
- name: x-user-key
in: header
required: true
schema:
type: string
format: password
example: eyJlYW4iOiJVbnJlZ2lzdGVyZWRBcHBsaWNhdGlvbiIsImVrIjoiOE5sZ2cwcW5EUVdROUFNWGpXT2lmOWktZnpidG5KcUlqWGJ3WHJZZkpZcldrbG90ZEhvLVBjSWhQaU8xU1ZtMW84aU1WZGZqN2xWNzFjLXFxLmcybXE1dnh4Q1hUT25xaWRUaTFlcEhmVk1fIn0_
description: User-specific authentication key.
- name: postId
in: path
description: ID of the parent post (UUID)
schema:
type: string
format: uuid
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
required: true
- name: commentId
in: path
description: ID of the comment (UUID)
schema:
type: string
format: uuid
example: 7c9e6679-7425-40de-944b-e07fc1f90ae7
required: true
- name: take
in: query
description: Number of items to return (1–100, default 20)
schema:
type: integer
default: 20
minimum: 1
maximum: 100
example: 20
- name: offsetEntityId
in: query
description: Opaque cursor from previous response for stable paging
schema:
type: string
example: b2c3d4e5-f6a7-4890-bcde-f23456789012
- name: order
in: query
description: Sort order
schema:
type: string
enum:
- Asc
- Desc
default: Desc
example: Desc
- name: badgesExperimentIsEnabled
in: query
description: Include user badges in the response
schema:
type: boolean
default: false
responses:
'200':
description: Paginated reply list
content:
application/json:
schema:
$ref: '#/components/schemas/CommentsResponse'
'404':
description: Post or comment not found
operationId: listRepliesOnAComment
post:
tags:
- Comments and Replies
summary: Create a reply
description: Creates a reply nested under an existing comment. Replies are 1-level deep — replying to a reply attaches to the same parent comment with an inline @mention to the reply author. Increments parent comment's repliesCount and the post's totalCommentsAndReplies.
parameters:
- name: x-request-id
in: header
required: true
schema:
type: string
format: uuid
example: 4de03db6-51fa-4ce3-a54f-50f846eed5ea
description: A unique request identifier.
- name: x-api-key
in: header
required: true
schema:
type: string
format: password
example: lhgfaslk21490FAScVPkdsb53F9dNkfHG4faZSG5vfjndfcfgdssdgsdHF4663
description: API key for authentication.
- name: x-user-key
in: header
required: true
schema:
type: string
format: password
example: eyJlYW4iOiJVbnJlZ2lzdGVyZWRBcHBsaWNhdGlvbiIsImVrIjoiOE5sZ2cwcW5EUVdROUFNWGpXT2lmOWktZnpidG5KcUlqWGJ3WHJZZkpZcldrbG90ZEhvLVBjSWhQaU8xU1ZtMW84aU1WZGZqN2xWNzFjLXFxLmcybXE1dnh4Q1hUT25xaWRUaTFlcEhmVk1fIn0_
description: User-specific authentication key.
- name: postId
in: path
description: ID of the parent post (UUID)
schema:
type: string
format: uuid
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
required: true
- name: commentId
in: path
description: ID of the comment (UUID)
schema:
type: string
format: uuid
example: 7c9e6679-7425-40de-944b-e07fc1f90ae7
required: true
requestBody:
description: Reply content. `message` is required; `attachments` is optional.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CommentCreateRequest'
examples:
textReply:
summary: Plain text reply
value:
message: Totally agree — and the latest earnings back this up.
replyWithAttachment:
summary: Reply with an image attachment
value:
message: Here's the chart I was talking about!
attachments:
- url: https://cdn.etoro.com/rich-media/images/johndoe/abc-2025-01-15.jpg
mediaType: Image
responses:
'201':
description: Reply created
content:
application/json:
schema:
$ref: '#/components/schemas/Comment'
'401':
description: Authentication required
'404':
description: Post or comment not found
'422':
description: Validation failed — missing message body or spam classification rejected the content
operationId: createAReply
/api/v1/posts/{postId}/comments/{commentId}/replies/{replyId}:
put:
tags:
- Comments and Replies
summary: Update a reply
description: Edits the authenticated user's own reply in-place. Same semantics as updating a comment.
parameters:
- name: x-request-id
in: header
required: true
schema:
type: string
format: uuid
example: 8d810c19-fec7-4461-9774-fb038729fee6
description: A unique request identifier.
- name: x-api-key
in: header
required: true
schema:
type: string
format: password
example: lhgfaslk21490FAScVPkdsb53F9dNkfHG4faZSG5vfjndfcfgdssdgsdHF4663
description: API key for authentication.
- name: x-user-key
in: header
required: true
schema:
type: string
format: password
example: eyJlYW4iOiJVbnJlZ2lzdGVyZWRBcHBsaWNhdGlvbiIsImVrIjoiOE5sZ2cwcW5EUVdROUFNWGpXT2lmOWktZnpidG5KcUlqWGJ3WHJZZkpZcldrbG90ZEhvLVBjSWhQaU8xU1ZtMW84aU1WZGZqN2xWNzFjLXFxLmcybXE1dnh4Q1hUT25xaWRUaTFlcEhmVk1fIn0_
description: User-specific authentication key.
- name: postId
in: path
description: ID of the parent post (UUID)
schema:
type: string
format: uuid
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
required: true
- name: commentId
in: path
description: ID of the comment (UUID)
schema:
type: string
format: uuid
example: 7c9e6679-7425-40de-944b-e07fc1f90ae7
required: true
- name: replyId
in: path
description: ID of the reply (UUID)
schema:
type: string
format: uuid
example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
required: true
requestBody:
description: Updated reply content
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CommentUpdateRequest'
responses:
'200':
description: Updated reply
content:
application/json:
schema:
$ref: '#/components/schemas/Comment'
'401':
description: Authentication required
'403':
description: Requester is not the reply owner
'404':
description: Post, comment, or reply not found
'422':
description: Validation failed — missing message body or spam classification rejected the content
operationId: updateAReply
delete:
tags:
- Comments and Replies
summary: Soft-delete a reply
description: Soft-deletes the authenticated user's own reply.
parameters:
- name: x-request-id
in: header
required: true
schema:
type: string
format: uuid
example: a03cae57-ccf4-4635-b909-de9e7921e2c5
description: A unique request identifier.
- name: x-api-key
in: header
required: true
schema:
type: string
format: password
example: lhgfaslk21490FAScVPkdsb53F9dNkfHG4faZSG5vfjndfcfgdssdgsdHF4663
description: API key for authentication.
- name: x-user-key
in: header
required: true
schema:
type: string
format: password
example: eyJlYW4iOiJVbnJlZ2lzdGVyZWRBcHBsaWNhdGlvbiIsImVrIjoiOE5sZ2cwcW5EUVdROUFNWGpXT2lmOWktZnpidG5KcUlqWGJ3WHJZZkpZcldrbG90ZEhvLVBjSWhQaU8xU1ZtMW84aU1WZGZqN2xWNzFjLXFxLmcybXE1dnh4Q1hUT25xaWRUaTFlcEhmVk1fIn0_
description: User-specific authentication key.
- name: postId
in: path
description: ID of the parent post (UUID)
schema:
type: string
format: uuid
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
required: true
- name: commentId
in: path
description: ID of the comment (UUID)
schema:
type: string
format: uuid
example: 7c9e6679-7425-40de-944b-e07fc1f90ae7
required: true
- name: replyId
in: path
description: ID of the reply (UUID)
schema:
type: string
format: uuid
example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
required: true
responses:
'204':
description: Reply deleted successfully
'401':
description: Authentication required
'403':
description: Requester is not the reply owner
'404':
description: Post, comment, or reply not found
operationId: softDeleteAReply
components:
schemas:
User:
type: object
description: eToro user profile (slim projection)
properties:
id:
type: string
description: User's GCID (string form)
example: '7890'
username:
type: string
description: Unique username
example: johndoe
firstName:
type: string
description: First name
example: John
lastName:
type: string
description: Last name
example: Doe
avatar:
type: object
description: Profile picture URLs
properties:
small:
type: string
description: 32 px avatar URL
example: https://etoro-cdn.etorostatic.com/avatars/150X150/johndoe.jpg
medium:
type: string
description: 64 px avatar URL
example: https://etoro-cdn.etorostatic.com/avatars/200X200/johndoe.jpg
large:
type: string
description: 128 px avatar URL
example: https://etoro-cdn.etorostatic.com/avatars/300X300/johndoe.jpg
svg:
type: object
nullable: true
description: SVG avatar with brand colours (null when not available)
properties:
url:
type: string
description: SVG URL
example: https://etoro-cdn.etorostatic.com/avatars/svg/johndoe.svg
backgroundColor:
type: string
description: Background colour hex
example: '#2196F3'
textColor:
type: string
description: Text colour hex
example: '#FFFFFF'
roles:
type: array
description: User roles
items:
type: string
enum:
- Regular
- PI
- Moderator
- Anonymous
- eToroTeam
- eTorian
- CopyPortfolio
- Depositor
- Admin
- Verified
- Analyst
example:
- Regular
isBlocked:
type: boolean
description: Owner has blocked the requester
example: false
isPrivate:
type: boolean
description: User's profile is private
example: false
countryCode:
type: integer
description: ISO numeric country code
example: 840
piLevel:
type: integer
description: Popular Investor level (0 = not PI)
example: 0
Attachment:
type: object
description: Media or link attachment
properties:
url:
type: string
description: Full URL of the attachment
example: https://cdn.etoro.com/rich-media/images/johndoe/abc-2025-01-15.jpg
title:
type: string
description: Title of the attachment
example: Tesla Q4 Earnings Chart
host:
type: string
description: Host domain of the attachment
example: cdn.etoro.com
description:
type: string
description: Short description of the attachment
example: Tesla quarterly earnings breakdown
mediaType:
type: string
enum:
- None
- Link
- Image
- Video
description: Type of media
example: Image
media:
type: object
description: Media content details
properties:
image:
type: object
description: Image dimensions and URL
properties:
width:
type: integer
description: Width in pixels
example: 1200
height:
type: integer
description: Height in pixels
example: 630
url:
type: string
description: Image URL
example: https://cdn.etoro.com/rich-media/images/johndoe/abc-2025-01-15.jpg
video:
type: object
description: Video source details
properties:
videoSourceId:
type: string
description: External video ID
example: dQw4w9WgXcQ
videoSource:
type: string
enum:
- None
- YouTube
- Vimeo
description: Video provider
example: YouTube
image:
type: object
description: Video thumbnail
properties:
width:
type: integer
description: Thumbnail width in pixels
example: 1280
height:
type: integer
description: Thumbnail height in pixels
example: 720
url:
type: string
description: Thumbnail URL
example: https://img.youtube.com/vi/dQw4w9WgXcQ/hqdefault.jpg
CommentCreateRequest:
type: object
description: Request body for creating a comment or reply
required:
- message
properties:
message:
type: string
description: Comment text (max 500 chars)
example: Great analysis! I agree — the fundamentals are solid.
attachments:
$ref: '#/components/schemas/Attachments'
Market:
type: object
description: Financial instrument / market
properties:
id:
type: string
description: Market identifier
example: TSLA
symbolName:
type: string
description: Ticker symbol
example: TSLA
displayName:
type: string
description: Human-readable name
example: Tesla
updated:
type: string
format: date-time
nullable: true
description: Last update timestamp
example: '2025-01-15T00:00:00Z'
assetType:
type: string
enum:
- Stocks
- Bonds
- ETF
- Index
- Warrants
- Options
- Futures
- CFD
- TRS
- FOREX
- CommodityMetals
- CommodityEnergyAgriculture
- CryptoCoin
- NFT
description: Asset class
example: Stocks
internalId:
type: integer
description: Internal numeric market ID
example: 59114
avatar:
type: object
description: Market logo images
properties:
small:
type: string
description: Small logo URL (32 px)
example: https://cdn.etoro.com/assets/img/markets/TSLA/small.png
medium:
type: string
description: Medium logo URL (64 px)
example: https://cdn.etoro.com/assets/img/markets/TSLA/medium.png
large:
type: string
description: Large logo URL (128 px)
example: https://cdn.etoro.com/assets/img/markets/TSLA/large.png
svg:
type: object
nullable: true
description: SVG logo with brand colours
properties:
url:
type: string
description: SVG URL
example: https://cdn.etoro.com/assets/img/markets/TSLA/logo.svg
backgroundColor:
type: string
description: Brand background colour (hex)
example: '#CC0000'
textColor:
type: string
description: Brand text colour (hex)
example: '#FFFFFF'
application:
type: string
enum:
- eToro
- Delta
- Gatsby
description: Source application
example: eToro
metadata:
type: string
description: Opaque JSON metadata string
example: '{}'
assetTypeId:
type: integer
description: Numeric asset type ID
example: 10
assetTypeSubCategoryId:
type: integer
description: Numeric asset sub-category ID
example: 101
Attachments:
type: array
description: List of attachments for a post or comment (request body format)
items:
type: object
description: Media or link attachment
properties:
url:
type: string
description: Full URL of the attachment
example: https://cdn.etoro.com/rich-media/images/johndoe/abc-2025-01-15.jpg
title:
type: string
description: Title of the attachment
example: Tesla Q4 Earnings Chart
host:
type: string
description: Host domain of the attachment
example: cdn.etoro.com
description:
type: string
description: Short description of the attachment
example: Tesla quarterly earnings breakdown
mediaType:
type: string
enum:
- None
- Link
- Image
description: Type of media (video not supported for upload)
example: Image
media:
type: object
description: Media content details (images only)
properties:
image:
type: object
description: Image dimensions and URL
properties:
width:
type: integer
description: Width in pixels
example: 1200
height:
type: integer
description: Height in pixels
example: 630
url:
type: string
description: Image URL
example: https://cdn.etoro.com/rich-media/images/johndoe/abc-2025-01-15.jpg
Comment:
type: object
description: A comment (or reply) on a post, wrapped with interaction data
properties:
entity:
type: object
description: Core comment data
properties:
id:
type: string
description: Comment ID
example: 7c9e6679-7425-40de-944b-e07fc1f90ae7
owner:
$ref: '#/components/schemas/User'
obsoleteId:
type: string
description: Legacy numeric comment ID
example: '98765'
created:
type: string
format: date-time
description: Creation timestamp
example: '2025-01-15T10:30:00Z'
updated:
type: string
format: date-time
nullable: true
description: Last-edited timestamp
example: '2025-01-15T11:00:00Z'
message:
type: object
description: Post/comment text content
properties:
text:
type: string
description: Text content
example: Excited about $TSLA earnings next week!
languageCode:
type: string
description: BCP-47 language code
example: en
attachments:
type: array
items:
$ref: '#/components/schemas/Attachment'
mentions:
# --- truncated at 32 KB (38 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/etoro/refs/heads/main/openapi/etoro-comments-and-replies-api-openapi.yml