---
title: "Create a comment on a post"
method: POST
path: "/api/v1/posts/{postId}/comments"
tags: ["Social Feeds"]
---

# Create a comment on a post

`POST /api/v1/posts/{postId}/comments`

**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.

---

Creates a new comment on a specific discussion post. Comments can include text, mentions, tags, and attachments.

## Path parameters

- `postId` string, uuid, required

## Headers

- `x-request-id` string, uuid, required
- `x-api-key` string, password, required
- `x-user-key` string, password, required

## Request body

- CommentCreateRequest — Request body for creating a comment or reply
  - `message` string, required — Comment text (max 500 chars)
  - `attachments` object[] — List of attachments for a post or comment (request body format)
    - `url` string — Full URL of the attachment
    - `title` string — Title of the attachment
    - `host` string — Host domain of the attachment
    - `description` string — Short description of the attachment
    - `mediaType` 'None' | 'Link' | 'Image' — Type of media (video not supported for upload)
    - `media` object — Media content details (images only)
      - `image` object — Image dimensions and URL
        - `width` integer — Width in pixels
        - `height` integer — Height in pixels
        - `url` string — Image URL

## Response `201`

Comment created successfully

- Comment — A comment (or reply) on a post, wrapped with interaction data
  - `entity` object — Core comment data
    - `id` string — Comment ID
    - `owner` User — eToro user profile (slim projection)
      - `id` string — User's GCID (string form)
      - `username` string — Unique username
      - `firstName` string — First name
      - `lastName` string — Last name
      - `avatar` object — Profile picture URLs
        - `small` string — 32 px avatar URL
        - `medium` string — 64 px avatar URL
        - `large` string — 128 px avatar URL
        - `svg` object, nullable — SVG avatar with brand colours (null when not available)
          - `url` string — SVG URL
          - `backgroundColor` string — Background colour hex
          - `textColor` string — Text colour hex
      - `roles` string[] — User roles
      - `isBlocked` boolean — Owner has blocked the requester
      - `isPrivate` boolean — User's profile is private
      - `countryCode` integer — ISO numeric country code
      - `piLevel` integer — Popular Investor level (0 = not PI)
    - `obsoleteId` string — Legacy numeric comment ID
    - `created` string, date-time — Creation timestamp
    - `updated` string, date-time, nullable — Last-edited timestamp
    - `message` object — Post/comment text content
      - `text` string — Text content
      - `languageCode` string — BCP-47 language code
    - `attachments` Attachment[]
      - `url` string — Full URL of the attachment
      - `title` string — Title of the attachment
      - `host` string — Host domain of the attachment
      - `description` string — Short description of the attachment
      - `mediaType` 'None' | 'Link' | 'Image' | 'Video' — Type of media
      - `media` object — Media content details
        - `image` object — Image dimensions and URL
          - `width` integer — Width in pixels
          - `height` integer — Height in pixels
          - `url` string — Image URL
        - `video` object — Video source details
          - `videoSourceId` string — External video ID
          - `videoSource` 'None' | 'YouTube' | 'Vimeo' — Video provider
          - `image` object — Video thumbnail
            - `width` integer — Thumbnail width in pixels
            - `height` integer — Thumbnail height in pixels
            - `url` string — Thumbnail URL
    - `mentions` object[]
      - `user` User — eToro user profile (slim projection)
        - `id` string — User's GCID (string form)
        - `username` string — Unique username
        - `firstName` string — First name
        - `lastName` string — Last name
        - `avatar` object — Profile picture URLs
          - `small` string — 32 px avatar URL
          - `medium` string — 64 px avatar URL
          - `large` string — 128 px avatar URL
          - `svg` object, nullable — SVG avatar with brand colours (null when not available)
            - `url` string — SVG URL
            - `backgroundColor` string — Background colour hex
            - `textColor` string — Text colour hex
        - `roles` string[] — User roles
        - `isBlocked` boolean — Owner has blocked the requester
        - `isPrivate` boolean — User's profile is private
        - `countryCode` integer — ISO numeric country code
        - `piLevel` integer — Popular Investor level (0 = not PI)
      - `isDirect` boolean — Direct @-mention
    - `tags` object[]
      - `market` Market — Financial instrument / market
        - `id` string — Market identifier
        - `symbolName` string — Ticker symbol
        - `displayName` string — Human-readable name
        - `updated` string, date-time, nullable — Last update timestamp
        - `assetType` 'Stocks' | 'Bonds' | 'ETF' | 'Index' | 'Warrants' | 'Options' | 'Futures' | 'CFD' | 'TRS' | 'FOREX' | 'CommodityMetals' | 'CommodityEnergyAgriculture' | 'CryptoCoin' | 'NFT' — Asset class
        - `internalId` integer — Internal numeric market ID
        - `avatar` object — Market logo images
          - `small` string — Small logo URL (32 px)
          - `medium` string — Medium logo URL (64 px)
          - `large` string — Large logo URL (128 px)
          - `svg` object, nullable — SVG logo with brand colours
            - `url` string — SVG URL
            - `backgroundColor` string — Brand background colour (hex)
            - `textColor` string — Brand text colour (hex)
        - `application` 'eToro' | 'Delta' | 'Gatsby' — Source application
        - `metadata` string — Opaque JSON metadata string
        - `assetTypeId` integer — Numeric asset type ID
        - `assetTypeSubCategoryId` integer — Numeric asset sub-category ID
    - `isSpam` boolean — True when classified as spam
    - `editStatus` 'None' | 'Edited' | 'Moderated' — Edit lifecycle status
    - `parent` object — Parent entity reference
      - `id` string — Parent entity ID
      - `obsoleteId` string — Legacy parent ID
      - `type` 'Unknown' | 'Post' | 'Comment' | 'Reply' — Parent entity type
  - `repliesCount` integer — Number of direct replies to this comment
  - `replies` Comment[] — Inline reply preview. Each entry has the same shape as Comment; nested `replies` arrays are not populated at this level.
  - `emotionsData` object — Aggregated emotions (likes) on an entity
    - `like` object
      - `paging` object — Pagination cursor info
        - `totalCount` integer — Total number of items
        - `offsetEntityId` string — Opaque cursor for next page
        - `next` string — URL to next page
      - `emotions` Emotion[]
        - `type` 'Like' — Emotion type (currently only Like is supported)
        - `id` string — Emotion ID
        - `owner` User — eToro user profile (slim projection)
          - `id` string — User's GCID (string form)
          - `username` string — Unique username
          - `firstName` string — First name
          - `lastName` string — Last name
          - `avatar` object — Profile picture URLs
            - `small` string — 32 px avatar URL
            - `medium` string — 64 px avatar URL
            - `large` string — 128 px avatar URL
            - `svg` object, nullable — SVG avatar with brand colours (null when not available)
              - …
          - `roles` string[] — User roles
          - `isBlocked` boolean — Owner has blocked the requester
          - `isPrivate` boolean — User's profile is private
          - `countryCode` integer — ISO numeric country code
          - `piLevel` integer — Popular Investor level (0 = not PI)
        - `obsoleteId` string — Legacy numeric emotion ID
        - `parent` object — Parent entity reference
          - `id` string — Parent entity ID
          - `obsoleteId` string — Legacy parent ID
          - `type` 'Unknown' | 'Post' | 'Comment' | 'Reply' — Parent entity type
        - `created` string, date-time — When the like was created
  - `requesterContext` object — Requester's relationship state with the comment
    - `isOwner` boolean — Requester is the comment owner
    - `isFlaggingAsSpam` boolean — Requester flagged this as spam
    - `isSubscribed` boolean — Requester is subscribed to notifications
    - `isLiking` boolean — Requester has liked this comment
    - `isSaved` boolean — Requester has saved this comment
    - `isPinned` boolean — Comment is pinned
    - `isRequesterBlocking` boolean — Requester is blocking the comment owner
    - `isInteractionRestricted` boolean — Owner has blocked the requester

## Other responses

- `401` — Authentication required
- `404` — Parent post not found
- `422` — Validation failed — missing message body or spam classification rejected the content
- `429` — Too Many Requests — the shared rate limit (60 requests / 60s) was exceeded.

---

[API](https://skmtc.net/etoro/apis/etoro-api.md) · [All operations](https://skmtc.net/etoro/apis/etoro-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/etoro/etoro-api/revisions/69c1fb266c35/schema)
