> ## Documentation Index
> Fetch the complete documentation index at: https://api-portal.etoro.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get an instrument's identity

> **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 the canonical identity of a single tradable instrument - its numeric instrument ID, ticker symbol, and display name - served from the eToro data platform's published instrument catalog. This is catalog data: it is identical for every caller and carries no account, position, or personal information, so no user context is sent upstream. Visibility and completeness are decided by the published view behind this endpoint, not by the endpoint itself, which is why a hidden, incomplete, or genuinely nonexistent instrument all return the same 404 rather than distinguishable errors. Look the ID up first via the market-data instrument endpoints if you only have a symbol.



## OpenAPI

````yaml /api-reference/openapi.json get /api/v1/data/instruments/{instrumentId}/identity
openapi: 3.0.1
info:
  title: eToro Api
  version: v1.375.0
  description: >-
    eToro’s public API provides access to real-time financial data, trading
    insights, and account management features, allowing developers to integrate
    eToro’s services into their applications. With access to market prices,
    historical data, and social trading information, the API empowers users to
    enhance their trading strategies. Designed for security and scalability, the
    eToro API ensures smooth and reliable integration for a variety of financial
    applications.


    For more details on integrating with eToro's public WebSocket service,
    please refer to the dedicated [WebSocket
    documentation](./websocket/websocket-doc.html).


    ## Authentication


    Every request must be authenticated with exactly one of two options: an
    OAuth 2.0 access token (`Authorization: Bearer <token>`), or the
    non-interactive credential pair (`x-api-key` + `x-user-key` headers). The
    two options are mutually exclusive — a request carrying both is rejected.
    Each operation lists the OAuth scopes that grant access as alternative
    security requirements: a bearer token needs only ONE of them, and the same
    permissions govern the credential pair.
servers:
  - url: https://public-api.etoro.com
    description: eToro Public API
security:
  - apiKeyAuth: []
    userKeyAuth: []
  - oauth2: []
tags:
  - name: Agent Portfolios
  - name: Social Feeds
  - name: Balances
  - name: Clubs
  - name: Watchlists
  - name: Data
  - name: Top Assets
  - name: App Data
  - name: Market Data
  - name: Identity
  - name: Cash Accounts
  - name: Transfer
  - name: Notifications
  - name: PI Data
  - name: PortfolioSearch
  - name: Price Alerts
  - name: SSO - Applications
  - name: SSO - Scopes
  - name: Sub-Accounts - eToro Trading
  - name: Sub-Accounts
  - name: Trading - Demo
  - name: Trading - Real
  - name: Users Info
  - name: Rankings
  - name: User Stats
  - name: Copy Trading
  - name: Copy Trading - Demo
paths:
  /api/v1/data/instruments/{instrumentId}/identity:
    get:
      tags:
        - Data
      summary: Get an instrument's identity
      description: >-
        **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 the canonical identity of a single tradable instrument - its
        numeric instrument ID, ticker symbol, and display name - served from the
        eToro data platform's published instrument catalog. This is catalog
        data: it is identical for every caller and carries no account, position,
        or personal information, so no user context is sent upstream. Visibility
        and completeness are decided by the published view behind this endpoint,
        not by the endpoint itself, which is why a hidden, incomplete, or
        genuinely nonexistent instrument all return the same 404 rather than
        distinguishable errors. Look the ID up first via the market-data
        instrument endpoints if you only have a symbol.
      operationId: getInstrumentIdentity
      parameters:
        - name: x-request-id
          in: header
          required: true
          schema:
            type: string
            format: uuid
            example: 15c0970d-e4c3-4faa-800a-06d31d882d96
          description: A unique request identifier.
          example: 15c0970d-e4c3-4faa-800a-06d31d882d96
        - name: instrumentId
          in: path
          required: true
          description: >-
            eToro's numeric instrument identifier. Must be a non-negative 32-bit
            integer with no sign, decimal point, or whitespace; anything else is
            rejected with 400 before the catalog is queried.
          schema:
            type: integer
            format: int32
            minimum: 0
            maximum: 2147483647
          example: 1001
      responses:
        '200':
          description: The instrument's identity.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstrumentIdentity'
              example:
                instrumentId: 1001
                symbol: AAPL
                instrumentDisplayName: Apple
          headers:
            RateLimit-Limit:
              description: >-
                Maximum number of requests allowed per window. This is the
                default shared pool used by every endpoint without a dedicated
                limit, so it is NOT per-endpoint — requests across those
                endpoints all draw from this one budget.
              schema:
                type: integer
              example: 60
            RateLimit-Remaining:
              description: Requests remaining in the current window for this quota.
              schema:
                type: integer
            RateLimit-Reset:
              description: Seconds until the current window resets.
              schema:
                type: integer
            RateLimit-Policy:
              description: Quota policy in the form `<limit>;w=<window-seconds>`.
              schema:
                type: string
              example: 60;w=60
        '400':
          description: '`instrumentId` is not a plain non-negative 32-bit integer.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DataApiError'
              example:
                error:
                  code: invalid_instrument_id
                  message: instrumentId must be a positive 32-bit integer
                requestId: 3f6c1b7e-9a41-4c2e-8f0d-1b2a3c4d5e6f
        '404':
          description: >-
            No instrument identity is published for this ID. Returned
            identically whether the instrument does not exist, is not publicly
            visible, or has an incomplete catalog record.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DataApiError'
              example:
                error:
                  code: instrument_not_found
                  message: Instrument identity was not found
                requestId: 3f6c1b7e-9a41-4c2e-8f0d-1b2a3c4d5e6f
        '429':
          description: >-
            Too Many Requests — the shared rate limit (60 requests / 60s) was
            exceeded.
          headers:
            RateLimit-Limit:
              description: >-
                Maximum number of requests allowed per window. This is the
                default shared pool used by every endpoint without a dedicated
                limit, so it is NOT per-endpoint — requests across those
                endpoints all draw from this one budget.
              schema:
                type: integer
              example: 60
            RateLimit-Remaining:
              description: Requests remaining in the current window for this quota.
              schema:
                type: integer
            RateLimit-Reset:
              description: Seconds until the current window resets.
              schema:
                type: integer
            RateLimit-Policy:
              description: Quota policy in the form `<limit>;w=<window-seconds>`.
              schema:
                type: string
              example: 60;w=60
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
              example: 60
        '500':
          description: The catalog returned an inconsistent result for this ID.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DataApiError'
              example:
                error:
                  code: data_integrity_error
                  message: The requested resource could not be resolved
                requestId: 3f6c1b7e-9a41-4c2e-8f0d-1b2a3c4d5e6f
        '503':
          description: >-
            The catalog serving dependency is temporarily unavailable; the
            upstream already retried with backoff before returning this. Safe to
            retry.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DataApiError'
              example:
                error:
                  code: dependency_unavailable
                  message: The requested resource is temporarily unavailable
                requestId: 3f6c1b7e-9a41-4c2e-8f0d-1b2a3c4d5e6f
      security:
        - apiKeyAuth: []
          userKeyAuth: []
        - oauth2:
            - etoro-public:real:read
        - oauth2:
            - etoro-public:demo:read
        - oauth2:
            - etoro-public:market-data:read
components:
  schemas:
    InstrumentIdentity:
      type: object
      description: Canonical identity of one instrument.
      properties:
        instrumentId:
          type: integer
          format: int32
          description: >-
            eToro's numeric instrument identifier. Echoes the value supplied in
            the path.
          example: 1001
        symbol:
          type: string
          description: The instrument's ticker symbol.
          example: AAPL
        instrumentDisplayName:
          type: string
          description: Human-readable instrument name as shown in eToro clients.
          example: Apple
      required:
        - instrumentId
        - symbol
        - instrumentDisplayName
    DataApiError:
      type: object
      description: >-
        Error envelope returned by the data platform upstream. `requestId` is
        the correlation id for that call and is the fastest way for eToro
        support to find the request in logs.
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: Stable machine-readable error code.
            message:
              type: string
              description: >-
                Human-readable description. Not intended for display to end
                users.
          required:
            - code
            - message
        requestId:
          type: string
          nullable: true
          description: Correlation id for this request.
      required:
        - error
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        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`
      x-default: lhgfaslk21490FAScVPkdsb53F9dNkfHG4faZSG5vfjndfcfgdssdgsdHF4663
    userKeyAuth:
      type: apiKey
      in: header
      name: x-user-key
      description: >-
        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_`
      x-default: >-
        eyJlYW4iOiJVbnJlZ2lzdGVyZWRBcHBsaWNhdGlvbiIsImVrIjoiOE5sZ2cwcW5EUVdROUFNWGpXT2lmOWktZnpidG5KcUlqWGJ3WHJZZkpZcldrbG90ZEhvLVBjSWhQaU8xU1ZtMW84aU1WZGZqN2xWNzFjLXFxLmcybXE1dnh4Q1hUT25xaWRUaTFlcEhmVk1fIn0_
    oauth2:
      type: oauth2
      description: >-
        eToro OAuth2 — send the access token as `Authorization: Bearer <token>`.
        Each operation lists the scopes that grant access as separate `security`
        requirements (OpenAPI OR semantics): the caller's token only needs ONE
        of them — you do NOT need all of them. Mutually exclusive with the
        x-api-key/x-user-key credential pair: never send both.
      flows:
        authorizationCode:
          authorizationUrl: https://www.etoro.com/sso
          tokenUrl: https://www.etoro.com/api/sso/v1/token
          scopes:
            etoro-public:agent-portfolio:read: Grants access to the 'etoro-public:agent-portfolio:read' scope.
            etoro-public:agent-portfolio:write: Grants access to the 'etoro-public:agent-portfolio:write' scope.
            etoro-public:club:read: Grants access to the 'etoro-public:club:read' scope.
            etoro-public:demo:read: Grants access to the 'etoro-public:demo:read' scope.
            etoro-public:demo:write: Grants access to the 'etoro-public:demo:write' scope.
            etoro-public:feed:read: Grants access to the 'etoro-public:feed:read' scope.
            etoro-public:feed:write: Grants access to the 'etoro-public:feed:write' scope.
            etoro-public:market-data:read: Grants access to the 'etoro-public:market-data:read' scope.
            etoro-public:money.balance:read: Grants access to the 'etoro-public:money.balance:read' scope.
            etoro-public:money.cash-transactions:read: >-
              Grants access to the 'etoro-public:money.cash-transactions:read'
              scope.
            etoro-public:money.transfer:read: Grants access to the 'etoro-public:money.transfer:read' scope.
            etoro-public:money.transfer:write: Grants access to the 'etoro-public:money.transfer:write' scope.
            etoro-public:money:transfer: Grants access to the 'etoro-public:money:transfer' scope.
            etoro-public:notifications:read: Grants access to the 'etoro-public:notifications:read' scope.
            etoro-public:notifications:write: Grants access to the 'etoro-public:notifications:write' scope.
            etoro-public:pi-data:read: Grants access to the 'etoro-public:pi-data:read' scope.
            etoro-public:price-alerts:read: Grants access to the 'etoro-public:price-alerts:read' scope.
            etoro-public:price-alerts:write: Grants access to the 'etoro-public:price-alerts:write' scope.
            etoro-public:real:read: Grants access to the 'etoro-public:real:read' scope.
            etoro-public:real:write: Grants access to the 'etoro-public:real:write' scope.
            etoro-public:sso-applications:read: Grants access to the 'etoro-public:sso-applications:read' scope.
            etoro-public:sso-applications:write: Grants access to the 'etoro-public:sso-applications:write' scope.
            etoro-public:sso-scopes:read: Grants access to the 'etoro-public:sso-scopes:read' scope.
            etoro-public:sso-scopes:write: Grants access to the 'etoro-public:sso-scopes:write' scope.
            etoro-public:sub-accounts:read: Grants access to the 'etoro-public:sub-accounts:read' scope.
            etoro-public:sub-accounts:write: Grants access to the 'etoro-public:sub-accounts:write' scope.
            etoro-public:trade.demo:read: Grants access to the 'etoro-public:trade.demo:read' scope.
            etoro-public:trade.demo:write: Grants access to the 'etoro-public:trade.demo:write' scope.
            etoro-public:trade.real:read: Grants access to the 'etoro-public:trade.real:read' scope.
            etoro-public:trade.real:write: Grants access to the 'etoro-public:trade.real:write' scope.
            etoro-public:user-info:read: Grants access to the 'etoro-public:user-info:read' scope.
            etoro-public:watchlist:read: Grants access to the 'etoro-public:watchlist:read' scope.
            etoro-public:watchlist:write: Grants access to the 'etoro-public:watchlist:write' scope.

````