curl --request GET \
--url https://public-api.etoro.com/api/v1/clubs \
--header 'Authorization: Bearer <token>' \
--header 'x-api-key: <x-api-key>' \
--header 'x-request-id: <x-request-id>' \
--header 'x-user-key: <x-user-key>'import requests
url = "https://public-api.etoro.com/api/v1/clubs"
headers = {
"x-request-id": "<x-request-id>",
"x-api-key": "<x-api-key>",
"x-user-key": "<x-user-key>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'x-request-id': '<x-request-id>',
'x-api-key': '<x-api-key>',
'x-user-key': '<x-user-key>',
Authorization: 'Bearer <token>'
}
};
fetch('https://public-api.etoro.com/api/v1/clubs', 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/clubs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"x-api-key: <x-api-key>",
"x-request-id: <x-request-id>",
"x-user-key: <x-user-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/clubs"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-request-id", "<x-request-id>")
req.Header.Add("x-api-key", "<x-api-key>")
req.Header.Add("x-user-key", "<x-user-key>")
req.Header.Add("Authorization", "Bearer <token>")
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/clubs")
.header("x-request-id", "<x-request-id>")
.header("x-api-key", "<x-api-key>")
.header("x-user-key", "<x-user-key>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api.etoro.com/api/v1/clubs")
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"] = '<x-api-key>'
request["x-user-key"] = '<x-user-key>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"clubs": [
{
"name": "Silver",
"minRealizedEquity": 5000,
"maxRealizedEquity": 10000,
"rank": 2
}
],
"contacts": {
"manager": {
"firstName": "John",
"lastName": "Smith",
"email": "john.smith@etoro.com",
"calendarUrl": "https://calendly.com/etoro-club",
"avatars": [
{
"url": "https://openbook-static-files.s3.amazonaws.com/images/avatoros/50x50/af.png",
"width": 50,
"height": 50
}
]
}
},
"downgradeRisk": {
"isAtRisk": false,
"daysUntilDowngrade": 30
},
"offers": {
"currentPlayerLevelAvailableOffers": [
{
"id": "80",
"displayName": "Tax Return Offer",
"description": "Discounted assistance with preparing annual tax returns from certified tax companies in your country.",
"status": "Claimed",
"type": "Financial",
"deliveryMethod": "Static",
"minimumClubLevel": "Silver",
"offerUrl": "https://www.etoro.com/club/offers/80",
"offersInBundle": [
{
"type": "Services",
"offerLimit": 3
}
],
"subOffers": "<array>"
}
],
"nextPlayerLevelAvailableOffers": [
{
"id": "80",
"displayName": "Tax Return Offer",
"description": "Discounted assistance with preparing annual tax returns from certified tax companies in your country.",
"status": "Claimed",
"type": "Financial",
"deliveryMethod": "Static",
"minimumClubLevel": "Silver",
"offerUrl": "https://www.etoro.com/club/offers/80",
"offersInBundle": [
{
"type": "Services",
"offerLimit": 3
}
],
"subOffers": "<array>"
}
],
"staticEligibleOffers": [
{
"id": "80",
"displayName": "Tax Return Offer",
"description": "Discounted assistance with preparing annual tax returns from certified tax companies in your country.",
"status": "Claimed",
"type": "Financial",
"deliveryMethod": "Static",
"eligibleClubLevels": [
"Gold",
"Silver",
"Platinum",
"PlatinumPlus",
"Diamond"
]
}
]
},
"webinars": {
"upcomingWebinars": [
{
"id": 83618564462,
"topic": "Club Webinars with Lale Akoner and Sam North",
"startTime": "2026-05-20T14:00:00Z",
"joinUrl": "https://us02web.zoom.us/j/83618564462",
"recordUrl": "https://us02web.zoom.us/rec/play/example"
}
],
"previousWebinars": [
{
"id": 83618564462,
"topic": "Club Webinars with Lale Akoner and Sam North",
"startTime": "2026-05-20T14:00:00Z",
"joinUrl": "https://us02web.zoom.us/j/83618564462",
"recordUrl": "https://us02web.zoom.us/rec/play/example"
}
]
}
}{
"errorCode": "Unauthorized",
"errorMessage": "Unauthorized"
}{
"errorCode": "InsufficientPermissions",
"errorMessage": "Insufficient permissions to access this resource"
}{
"errorCode": "TooManyRequests",
"errorMessage": "Too many requests"
}{
"errorCode": "UnhandledException",
"errorMessage": "Global Error"
}Get club dashboard data
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.
Retrieves club dashboard data for the authenticated user, including tier information, benefits, account manager details, offers, downgrade risk, and webinars.
curl --request GET \
--url https://public-api.etoro.com/api/v1/clubs \
--header 'Authorization: Bearer <token>' \
--header 'x-api-key: <x-api-key>' \
--header 'x-request-id: <x-request-id>' \
--header 'x-user-key: <x-user-key>'import requests
url = "https://public-api.etoro.com/api/v1/clubs"
headers = {
"x-request-id": "<x-request-id>",
"x-api-key": "<x-api-key>",
"x-user-key": "<x-user-key>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'x-request-id': '<x-request-id>',
'x-api-key': '<x-api-key>',
'x-user-key': '<x-user-key>',
Authorization: 'Bearer <token>'
}
};
fetch('https://public-api.etoro.com/api/v1/clubs', 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/clubs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"x-api-key: <x-api-key>",
"x-request-id: <x-request-id>",
"x-user-key: <x-user-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/clubs"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-request-id", "<x-request-id>")
req.Header.Add("x-api-key", "<x-api-key>")
req.Header.Add("x-user-key", "<x-user-key>")
req.Header.Add("Authorization", "Bearer <token>")
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/clubs")
.header("x-request-id", "<x-request-id>")
.header("x-api-key", "<x-api-key>")
.header("x-user-key", "<x-user-key>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api.etoro.com/api/v1/clubs")
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"] = '<x-api-key>'
request["x-user-key"] = '<x-user-key>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"clubs": [
{
"name": "Silver",
"minRealizedEquity": 5000,
"maxRealizedEquity": 10000,
"rank": 2
}
],
"contacts": {
"manager": {
"firstName": "John",
"lastName": "Smith",
"email": "john.smith@etoro.com",
"calendarUrl": "https://calendly.com/etoro-club",
"avatars": [
{
"url": "https://openbook-static-files.s3.amazonaws.com/images/avatoros/50x50/af.png",
"width": 50,
"height": 50
}
]
}
},
"downgradeRisk": {
"isAtRisk": false,
"daysUntilDowngrade": 30
},
"offers": {
"currentPlayerLevelAvailableOffers": [
{
"id": "80",
"displayName": "Tax Return Offer",
"description": "Discounted assistance with preparing annual tax returns from certified tax companies in your country.",
"status": "Claimed",
"type": "Financial",
"deliveryMethod": "Static",
"minimumClubLevel": "Silver",
"offerUrl": "https://www.etoro.com/club/offers/80",
"offersInBundle": [
{
"type": "Services",
"offerLimit": 3
}
],
"subOffers": "<array>"
}
],
"nextPlayerLevelAvailableOffers": [
{
"id": "80",
"displayName": "Tax Return Offer",
"description": "Discounted assistance with preparing annual tax returns from certified tax companies in your country.",
"status": "Claimed",
"type": "Financial",
"deliveryMethod": "Static",
"minimumClubLevel": "Silver",
"offerUrl": "https://www.etoro.com/club/offers/80",
"offersInBundle": [
{
"type": "Services",
"offerLimit": 3
}
],
"subOffers": "<array>"
}
],
"staticEligibleOffers": [
{
"id": "80",
"displayName": "Tax Return Offer",
"description": "Discounted assistance with preparing annual tax returns from certified tax companies in your country.",
"status": "Claimed",
"type": "Financial",
"deliveryMethod": "Static",
"eligibleClubLevels": [
"Gold",
"Silver",
"Platinum",
"PlatinumPlus",
"Diamond"
]
}
]
},
"webinars": {
"upcomingWebinars": [
{
"id": 83618564462,
"topic": "Club Webinars with Lale Akoner and Sam North",
"startTime": "2026-05-20T14:00:00Z",
"joinUrl": "https://us02web.zoom.us/j/83618564462",
"recordUrl": "https://us02web.zoom.us/rec/play/example"
}
],
"previousWebinars": [
{
"id": 83618564462,
"topic": "Club Webinars with Lale Akoner and Sam North",
"startTime": "2026-05-20T14:00:00Z",
"joinUrl": "https://us02web.zoom.us/j/83618564462",
"recordUrl": "https://us02web.zoom.us/rec/play/example"
}
]
}
}{
"errorCode": "Unauthorized",
"errorMessage": "Unauthorized"
}{
"errorCode": "InsufficientPermissions",
"errorMessage": "Insufficient permissions to access this resource"
}{
"errorCode": "TooManyRequests",
"errorMessage": "Too many requests"
}{
"errorCode": "UnhandledException",
"errorMessage": "Global Error"
}Authorizations
eToro OAuth2. 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. The same scopes back the x-api-key/x-user-key credential pair.
Headers
A unique request identifier.
"c505fd5d-8b6a-4466-9c4f-0d7a934e6d20"
API key for authentication.
"lhgfaslk21490FAScVPkdsb53F9dNkfHG4faZSG5vfjndfcfgdssdgsdHF4663"
User-specific authentication key.
"eyJlYW4iOiJVbnJlZ2lzdGVyZWRBcHBsaWNhdGlvbiIsImVrIjoiOE5sZ2cwcW5EUVdROUFNWGpXT2lmOWktZnpidG5KcUlqWGJ3WHJZZkpZcldrbG90ZEhvLVBjSWhQaU8xU1ZtMW84aU1WZGZqN2xWNzFjLXFxLmcybXE1dnh4Q1hUT25xaWRUaTFlcEhmVk1fIn0_"
Response
Club dashboard data retrieved successfully
Club dashboard data for a user
List of club tiers with equity thresholds
Show child attributes
Show child attributes
Account manager contact information for eligible users
Show child attributes
Show child attributes
Club tier downgrade risk assessment
Show child attributes
Show child attributes
Club benefit offers categorized by tier availability
Show child attributes
Show child attributes
Upcoming and past club webinars
Show child attributes
Show child attributes