---
title: "Create a new discussion post"
method: POST
path: "/api/v1/posts"
tags: ["Social Feeds"]
---

# Create a new discussion post

`POST /api/v1/posts`

**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 discussion post in the feed system. This endpoint allows users to create posts that can be associated with instruments, users, or general discussions.

## Headers

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

## Request body

- DiscussionCreateRequest — Request body for creating a new discussion post
  - `message` string — Post text content (max 1000 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`

Post created successfully

- Post — A feed post returned by create / update / get-by-ID
  - `id` string — Unique post 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 post ID
  - `created` string, date-time — Creation timestamp
  - `message` object — Post/comment text content
    - `text` string — Text content
    - `languageCode` string — BCP-47 language code
  - `updated` string, date-time, nullable — Last-edited timestamp
  - `isDeleted` boolean — True when the post has been soft-deleted
  - `type` 'Default' | 'Share' | 'MarketEvent' | 'Trade' | 'Order' | 'Copy' | 'Poll' | 'Article' — Post type
  - `metadata` object — Post type–specific metadata — only the relevant key is populated
    - `share` object — Share metadata — present when type is Share
      - `sharedPost` Post — recursive
      - `sharedOriginPost` Post — recursive
    - `marketEvent` object — Market event metadata — present when type is MarketEvent
      - `earningReportId` integer — Earnings report ID
      - `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
      - `stocksIndustryId` integer — Industry sector ID
      - `earningsDate` string, date-time — Earnings announcement date
      - `isBeforeMarketOpen` boolean — Event occurs before market open
      - `earningsYear` integer — Fiscal year of earnings
      - `earningsQuarter` integer — Fiscal quarter (1–4)
      - `verified` boolean — Whether the event data is verified
      - `marketCap` number, double — Market capitalisation in USD
      - `estimatedEps` number, double — Estimated earnings per share
      - `estimatedSales` number, double — Estimated revenue in USD
      - `tagName` 'Reports' | 'Dividends' | 'Split' | 'ReverseSplit' — Event tag
      - `textKey` integer — Localisation key for event label
    - `trade` object — Trade metadata — present when type is Trade
      - `type` 'Open' | 'Close' — Trade lifecycle stage
      - `positionId` integer — Internal position ID
      - `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
      - `gain` number, float — P&L gain/loss percentage
      - `rate` number, float — Entry/exit rate
      - `direction` 'Long' | 'Short' — Trade direction
    - `order` object — Order metadata — present when type is Order
      - `type` 'Open' | 'Close' — Order lifecycle stage
      - `orderId` integer — Internal order ID
      - `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
      - `rate` number, float — Limit/entry rate
      - `direction` 'Long' | 'Short' — Order direction
    - `copy` object — Copy metadata — present when type is Copy
      - `type` 'Start' | 'Stop' — Copy event type
      - `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)
    - `poll` object — Poll metadata — present when type is Poll
      - `id` integer — Poll ID
      - `title` string — Poll question
      - `gcid` integer — Poll creator GCID
      - `options` object[]
        - `id` integer — Option ID
        - `index` integer — Display order (1-based, matches the index supplied at poll creation)
        - `text` string — Option label
        - `isUserVoted` boolean — Requester voted for this option
        - `votesCount` integer — Total votes for this option
    - `article` object — Article metadata — present when post type is Article
      - `id` integer — Article ID
      - `title` string — Article title
      - `url` string — Canonical article URL
      - `rating` 'Bearish' | 'Bullish', nullable — Analyst rating
      - `featuredImage` Attachment — Media or link 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
              - …
      - `body` string — Full article HTML body
      - `bodyPreview` string — Plain-text preview (≈200 chars)
      - `aiSummary` string — AI-generated summary
      - `languageCode` string — BCP-47 language code
      - `status` 'Draft' | 'Published' | 'Deleted' — Publication status
      - `editStatus` 'None' | 'Edited' | 'Moderated' — Edit status
      - `ownerId` integer — Author's internal user ID
      - `created` string, date-time — When the article was created
      - `updated` string, date-time, nullable — Last edit timestamp
      - `published` string, date-time, nullable — Publication timestamp
      - `readingTimeMinutes` number, float — Estimated reading time
      - `wordCount` integer — Word count
  - `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
  - `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
  - `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
  - `isSpam` boolean — True when the post is classified as spam
  - `editStatus` 'None' | 'Edited' | 'Moderated' — Edit lifecycle status

## Other responses

- `401` — Authentication required
- `403` — User is blocked
- `422` — Validation error — content rejected (e.g. by the spam classifier) or fields contain invalid data
- `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)
