eToro Posts API

The Posts API from eToro — 9 operation(s) for posts.

OpenAPI Specification

etoro-posts-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Deprecated eToro Public API operations Agent Portfolios Posts 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: Posts
paths:
  /api/v1/posts:
    post:
      tags:
      - Posts
      summary: Create a new discussion post
      description: 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.
      requestBody:
        description: Discussion post creation details
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DiscussionCreateRequest'
      responses:
        '201':
          description: Post created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Post'
        '401':
          description: Authentication required
        '403':
          description: User is blocked
        '422':
          description: Validation error — content rejected (e.g. by the spam classifier) or fields contain invalid data
      parameters:
      - name: x-request-id
        in: header
        required: true
        schema:
          type: string
          format: uuid
          example: 5753c12d-ff72-498d-b879-50e6b5f3fced
        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.
      operationId: createANewDiscussionPost2
  /api/v1/posts/polls:
    post:
      tags:
      - Posts
      summary: Create a poll post
      description: Creates a new poll post. The poll must include a title and at least 2 options. Once created the poll is immutable — options and title cannot be changed. The post itself can still be deleted.
      requestBody:
        description: Poll post content
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PollCreateRequest'
      responses:
        '201':
          description: Poll post created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Post'
        '401':
          description: Authentication required
        '422':
          description: Validation error — missing message, missing poll title/options, or poll creation failed
      parameters:
      - name: x-request-id
        in: header
        required: true
        schema:
          type: string
          format: uuid
          example: 5d8b0fa3-0fdf-477d-810a-07540f21634c
        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.
      operationId: createAPollPost
  /api/v1/posts/shares:
    post:
      tags:
      - Posts
      summary: Share a post
      description: 'Creates a share post that references an existing post. Two variants are supported:


        - **Reshare** — send `message` as an empty string (`""`).

        - **Quote share** — send `message` with your commentary text.


        Returns 201 on success. See the request body for field-level semantics, including how to collapse share chains.'
      requestBody:
        description: 'Share payload.


          - `message` (required) — set to `""` for a reshare, or to your commentary text for a quote share. Must be present; cannot be null.

          - `sharedOriginDiscussion` (required) — the ID of the post being shared.

          - `sharedDiscussionId` (optional) — set this only when `sharedOriginDiscussion` itself points to a share. It collapses the chain so the created Post''s `metadata.share.sharedPost` refers to `sharedDiscussionId` and `metadata.share.sharedOriginPost` refers to `sharedOriginDiscussion`, giving readers a flat 2-level reference instead of recursing through the share history. Leave unset for first-level shares.'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SharePostRequest'
            examples:
              reshare:
                summary: Reshare (empty message)
                value:
                  message: ''
                  sharedOriginDiscussion: d9020c00-c364-11ee-8080-80005148990b
              quoteShare:
                summary: Quote share with commentary
                value:
                  message: Great insight on Tesla!
                  sharedOriginDiscussion: d9020c00-c364-11ee-8080-80005148990b
      responses:
        '201':
          description: Share post created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Post'
        '400':
          description: Request body is missing or malformed
        '401':
          description: Authentication required
        '403':
          description: Original owner has blocked the requester or restricted interactions
        '404':
          description: Original post not found
        '422':
          description: Validation failed — quote message rejected by spam classifier
      parameters:
      - name: x-request-id
        in: header
        required: true
        schema:
          type: string
          format: uuid
          example: ea5262ff-a374-4562-ba2f-796b6952d27d
        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.
      operationId: shareAPost
  /api/v1/posts/{postId}:
    get:
      tags:
      - Posts
      summary: Get a single post by ID
      description: Retrieves a single discussion post by its ID, including comments preview, emotions data, and requester context. Authentication is optional — unauthenticated requests receive the post without personalised requester context.
      parameters:
      - name: x-request-id
        in: header
        required: true
        schema:
          type: string
          format: uuid
          example: 1b132bec-2bf1-408f-9eab-bd2f8f2e111b
        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 retrieve (UUID)
        required: true
        schema:
          type: string
          format: uuid
        example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
      - name: take
        in: query
        description: Number of inline comments to include in the response
        schema:
          type: integer
          format: int32
          default: 10
          minimum: 0
      - name: badgesExperimentIsEnabled
        in: query
        description: Flag indicating whether to include user badges in the response
        schema:
          type: boolean
          default: false
      responses:
        '200':
          description: Post retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Discussion'
        '404':
          description: Post not found
      operationId: getASinglePostById
    put:
      tags:
      - Posts
      summary: Update an existing post
      description: 'Updates the authenticated user''s own post in-place. The owner field is derived from the authentication token and must not be supplied in the request body. Editable fields: message, tags, mentions, attachments.'
      parameters:
      - name: x-request-id
        in: header
        required: true
        schema:
          type: string
          format: uuid
          example: 76f7af16-4288-4593-bdcb-2a5ebde24206
        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 update (UUID)
        required: true
        schema:
          type: string
          format: uuid
        example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
      requestBody:
        description: Fields to update on the post
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DiscussionUpdateRequest'
      responses:
        '200':
          description: Post updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Post'
        '401':
          description: Authentication required
        '403':
          description: Requester is not the post owner
        '404':
          description: Post not found
        '422':
          description: Validation failed — missing message body or spam classification rejected the content
      operationId: updateAnExistingPost
    delete:
      tags:
      - Posts
      summary: Soft-delete a post
      description: Soft-deletes the authenticated user's own post. Sets isDeleted=true and blanks message text and attachments. Child comments and like/comment counters are preserved. The post is removed from all feed listings.
      parameters:
      - name: x-request-id
        in: header
        required: true
        schema:
          type: string
          format: uuid
          example: 45db71f3-a995-4d82-9045-09549e2ed826
        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 delete (UUID)
        required: true
        schema:
          type: string
          format: uuid
        example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
      responses:
        '204':
          description: Post deleted successfully
        '401':
          description: Authentication required
        '403':
          description: Requester is not the post owner
        '404':
          description: Post not found or already deleted
      operationId: softDeleteAPost
  /api/v1/posts/{postId}/follows:
    post:
      tags:
      - Posts
      summary: Follow a post
      description: Subscribes the authenticated user to push notifications when the post receives new comments or replies. Drives requesterContext.isFollowing on subsequent reads. Idempotent — following an already-followed post succeeds silently. This endpoint takes no request body.
      parameters:
      - name: x-request-id
        in: header
        required: true
        schema:
          type: string
          format: uuid
          example: 8c323824-8cb8-4a46-9678-fdf120c4041b
        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
        required: true
        description: ID of the post to follow (UUID)
        schema:
          type: string
          format: uuid
        example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
      responses:
        '204':
          description: Post followed successfully
        '401':
          description: Authentication required
        '404':
          description: Post not found
      operationId: followAPost
    delete:
      tags:
      - Posts
      summary: Unfollow a post
      description: Unsubscribes the authenticated user from notifications on this post. Idempotent — unfollowing a post that was never followed succeeds silently.
      parameters:
      - name: x-request-id
        in: header
        required: true
        schema:
          type: string
          format: uuid
          example: 416f6c1d-ec6e-49de-95e2-b3a3f6d97931
        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
        required: true
        description: ID of the post to unfollow (UUID)
        schema:
          type: string
          format: uuid
        example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
      responses:
        '204':
          description: Post unfollowed successfully
        '401':
          description: Authentication required
        '404':
          description: Post not found
      operationId: unfollowAPost
  /api/v1/posts/{postId}/pins:
    post:
      tags:
      - Posts
      summary: Pin a post to the user's profile
      description: Pins the specified post to the authenticated user's profile so it appears at the top of their feed. Users can pin only their own posts. The call is idempotent — pinning an already-pinned post succeeds silently.
      parameters:
      - name: x-request-id
        in: header
        required: true
        schema:
          type: string
          format: uuid
          example: 884c9142-5d07-4d52-8cad-1987df6cc40b
        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
        required: true
        description: ID of the post to pin (UUID)
        schema:
          type: string
          format: uuid
        example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
      responses:
        '204':
          description: Post pinned successfully
        '401':
          description: Authentication required
        '403':
          description: Requester is not allowed to pin the specified post (e.g., not the post owner)
        '404':
          description: Post not found
      operationId: pinPostUserSProfile
    delete:
      tags:
      - Posts
      summary: Unpin a post from the user's profile
      description: Removes the authenticated user's pin from the specified post. The call is idempotent — unpinning a post that is not currently pinned succeeds silently.
      parameters:
      - name: x-request-id
        in: header
        required: true
        schema:
          type: string
          format: uuid
          example: 8ab4fe00-2b4a-4448-83cc-b9a043ee46f7
        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
        required: true
        description: ID of the post to unpin (UUID)
        schema:
          type: string
          format: uuid
        example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
      responses:
        '204':
          description: Post unpinned successfully
        '401':
          description: Authentication required
        '403':
          description: Requester is not allowed to unpin the specified post
        '404':
          description: Post not found
      operationId: unpinPostUserSProfile
  /api/v1/posts/{postId}/polls/{pollId}/options/{optionId}/votes:
    post:
      tags:
      - Posts
      summary: Vote on a poll option
      description: Casts the authenticated user's vote on a specific poll option. Each user can vote only once per poll. Poll owners cannot vote on their own poll.
      parameters:
      - name: x-request-id
        in: header
        required: true
        schema:
          type: string
          format: uuid
          example: ead15c94-1028-43ec-aafa-4c5463f10fe5
        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
        required: true
        description: ID of the post containing the poll (UUID)
        schema:
          type: string
          format: uuid
        example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
      - name: pollId
        in: path
        required: true
        description: ID of the poll
        schema:
          type: integer
        example: 42
      - name: optionId
        in: path
        required: true
        description: ID of the option to vote for
        schema:
          type: integer
        example: 1
      - name: client_request_id
        in: query
        required: true
        description: Client-generated correlation ID (UUID). Required for request tracing and idempotency.
        schema:
          type: string
          format: uuid
        example: 6a7aa746-d94d-4c4f-a755-32827ea53141
      responses:
        '202':
          description: Vote accepted
        '401':
          description: Authentication required
        '404':
          description: Post, poll, or option not found
        '422':
          description: Poll is not part of the specified post
      operationId: voteOnAPollOption
    delete:
      tags:
      - Posts
      summary: Remove a vote from a poll option
      description: Removes the authenticated user's vote from a specific poll option.
      parameters:
      - name: x-request-id
        in: header
        required: true
        schema:
          type: string
          format: uuid
          example: 3d00f370-1781-432d-8075-c9d96c5baca8
        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
        required: true
        description: ID of the post containing the poll (UUID)
        schema:
          type: string
          format: uuid
        example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
      - name: pollId
        in: path
        required: true
        description: ID of the poll
        schema:
          type: integer
        example: 42
      - name: optionId
        in: path
        required: true
        description: ID of the option to unvote
        schema:
          type: integer
        example: 1
      - name: client_request_id
        in: query
        required: true
        description: Client-generated correlation ID (UUID). Required for request tracing and idempotency.
        schema:
          type: string
          format: uuid
        example: 6a7aa746-d94d-4c4f-a755-32827ea53141
      responses:
        '202':
          description: Unvote accepted
        '401':
          description: Authentication required
        '404':
          description: Post, poll, or option not found
        '422':
          description: Poll is not part of the specified post
      operationId: removeVotePollOption
  /api/v1/posts/{postId}/saves:
    post:
      tags:
      - Posts
      summary: Save a post
      description: Bookmarks a post for the authenticated user. Idempotent — saving an already-saved post succeeds silently. The save is private and visible only to the saving user. This endpoint takes no request body.
      parameters:
      - name: x-request-id
        in: header
        required: true
        schema:
          type: string
          format: uuid
          example: bb0966f0-4e46-454e-9048-38f04b90ad42
        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
        required: true
        description: ID of the post to save (UUID)
        schema:
          type: string
          format: uuid
        example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
      responses:
        '204':
          description: Post saved successfully
        '401':
          description: Authentication required
        '404':
          description: Post not found
      operationId: saveAPost
    delete:
      tags:
      - Posts
      summary: Unsave a post
      description: Removes a post from the authenticated user's saved bookmarks. Idempotent — unsaving a post that was never saved succeeds silently.
      parameters:
      - name: x-request-id
        in: header
        required: true
        schema:
          type: string
          format: uuid
          example: 69962b64-4570-4f97-bf18-54aacc33d036
        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
        required: true
        description: ID of the post to unsave (UUID)
        schema:
          type: string
          format: uuid
        example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
      responses:
        '204':
          description: Post unsaved successfully
        '401':
          description: Authentication required
        '404':
          description: Post not found
      operationId: unsaveAPost
  /api/v1/posts/{postId}/shares:
    get:
      tags:
      - Posts
      summary: List shares of a post
      description: Returns a paginated list of shares of the specified post, including both plain reshares and quote shares. Authentication is optional.
      parameters:
      - name: x-request-id
        in: header
        required: true
        schema:
          type: string
          format: uuid
          example: 671cbf93-9d82-4172-bd6d-a63fe408e3d1
        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
        required: true
        description: ID of the post to list shares of (UUID)
        schema:
          type: string
          format: uuid
        example: d9020c00-c364-11ee-8080-80005148990b
      - 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 a previous response for stable paging
        schema:
          type: string
        example: c3d4e5f6-a7b8-4901-cdef-345678901234
      - name: order
        in: query
        description: Sort order
        schema:
          type: string
          enum:
          - Asc
          - Desc
          default: Desc
        example: Desc
      - name: client_request_id
        in: query
        required: true
        description: Client-generated correlation ID (UUID). Required for request tracing and idempotency.
        schema:
          type: string
          format: uuid
        example: 2b6361e3-079c-42a1-b6d5-4b9c16601ae1
      responses:
        '200':
          description: Paginated list of shares
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SharesResponse'
        '404':
          description: Post not found
      operationId: listSharesOfAPost
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
                  e

# --- truncated at 32 KB (81 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/etoro/refs/heads/main/openapi/etoro-posts-api-openapi.yml