curl --request GET \
--url https://public-api.etoro.com/api/v1/data/instruments/{instrumentId}/identity \
--header 'x-api-key: <api-key>' \
--header 'x-request-id: <x-request-id>' \
--header 'x-user-key: <api-key>'import requests
url = "https://public-api.etoro.com/api/v1/data/instruments/{instrumentId}/identity"
headers = {
"x-request-id": "<x-request-id>",
"x-api-key": "<api-key>",
"x-user-key": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'x-request-id': '<x-request-id>',
'x-api-key': '<api-key>',
'x-user-key': '<api-key>'
}
};
fetch('https://public-api.etoro.com/api/v1/data/instruments/{instrumentId}/identity', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://public-api.etoro.com/api/v1/data/instruments/{instrumentId}/identity",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>",
"x-request-id: <x-request-id>",
"x-user-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://public-api.etoro.com/api/v1/data/instruments/{instrumentId}/identity"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-request-id", "<x-request-id>")
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("x-user-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://public-api.etoro.com/api/v1/data/instruments/{instrumentId}/identity")
.header("x-request-id", "<x-request-id>")
.header("x-api-key", "<api-key>")
.header("x-user-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api.etoro.com/api/v1/data/instruments/{instrumentId}/identity")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-request-id"] = '<x-request-id>'
request["x-api-key"] = '<api-key>'
request["x-user-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"instrumentId": 1001,
"symbol": "AAPL",
"instrumentDisplayName": "Apple"
}{
"error": {
"code": "invalid_instrument_id",
"message": "instrumentId must be a positive 32-bit integer"
},
"requestId": "3f6c1b7e-9a41-4c2e-8f0d-1b2a3c4d5e6f"
}{
"error": {
"code": "instrument_not_found",
"message": "Instrument identity was not found"
},
"requestId": "3f6c1b7e-9a41-4c2e-8f0d-1b2a3c4d5e6f"
}{
"error": {
"code": "data_integrity_error",
"message": "The requested resource could not be resolved"
},
"requestId": "3f6c1b7e-9a41-4c2e-8f0d-1b2a3c4d5e6f"
}{
"error": {
"code": "dependency_unavailable",
"message": "The requested resource is temporarily unavailable"
},
"requestId": "3f6c1b7e-9a41-4c2e-8f0d-1b2a3c4d5e6f"
}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.
curl --request GET \
--url https://public-api.etoro.com/api/v1/data/instruments/{instrumentId}/identity \
--header 'x-api-key: <api-key>' \
--header 'x-request-id: <x-request-id>' \
--header 'x-user-key: <api-key>'import requests
url = "https://public-api.etoro.com/api/v1/data/instruments/{instrumentId}/identity"
headers = {
"x-request-id": "<x-request-id>",
"x-api-key": "<api-key>",
"x-user-key": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'x-request-id': '<x-request-id>',
'x-api-key': '<api-key>',
'x-user-key': '<api-key>'
}
};
fetch('https://public-api.etoro.com/api/v1/data/instruments/{instrumentId}/identity', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://public-api.etoro.com/api/v1/data/instruments/{instrumentId}/identity",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>",
"x-request-id: <x-request-id>",
"x-user-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://public-api.etoro.com/api/v1/data/instruments/{instrumentId}/identity"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-request-id", "<x-request-id>")
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("x-user-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://public-api.etoro.com/api/v1/data/instruments/{instrumentId}/identity")
.header("x-request-id", "<x-request-id>")
.header("x-api-key", "<api-key>")
.header("x-user-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api.etoro.com/api/v1/data/instruments/{instrumentId}/identity")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-request-id"] = '<x-request-id>'
request["x-api-key"] = '<api-key>'
request["x-user-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"instrumentId": 1001,
"symbol": "AAPL",
"instrumentDisplayName": "Apple"
}{
"error": {
"code": "invalid_instrument_id",
"message": "instrumentId must be a positive 32-bit integer"
},
"requestId": "3f6c1b7e-9a41-4c2e-8f0d-1b2a3c4d5e6f"
}{
"error": {
"code": "instrument_not_found",
"message": "Instrument identity was not found"
},
"requestId": "3f6c1b7e-9a41-4c2e-8f0d-1b2a3c4d5e6f"
}{
"error": {
"code": "data_integrity_error",
"message": "The requested resource could not be resolved"
},
"requestId": "3f6c1b7e-9a41-4c2e-8f0d-1b2a3c4d5e6f"
}{
"error": {
"code": "dependency_unavailable",
"message": "The requested resource is temporarily unavailable"
},
"requestId": "3f6c1b7e-9a41-4c2e-8f0d-1b2a3c4d5e6f"
}Authorizations
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
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_
Headers
A unique request identifier.
"15c0970d-e4c3-4faa-800a-06d31d882d96"
Path Parameters
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.
0 <= x <= 2147483647Response
The instrument's identity.
Canonical identity of one instrument.