eToro Notifications API
The Notifications API from eToro — 1 operation(s) for notifications.
The Notifications API from eToro — 1 operation(s) for notifications.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/etoro:etoro-notifications-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: eToro Notifications API
version: v1.395.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.
## Authentication
Every request must be authenticated with exactly one of two options: an OAuth 2.0 access token (`Authorization: Bearer `), 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: Notifications
paths:
/api/v1/notifications/messages:
get:
operationId: getNotificationsMessages
tags:
- Notifications
summary: Get in-app notifications
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.
---
Retrieves all in-app notifications for the authenticated user. Rate limit: 1 request per second.'
responses:
'200':
description: Notifications retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/InAppNotificationsResult'
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
'401':
description: Unauthorized
'422':
description: Validation failed
'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
security:
- apiKeyAuth: []
userKeyAuth: []
- oauth2:
- etoro-public:notifications:read
x-ratelimit:
limit: 60
window: 60
shared: true
defaultPool: true
parameters:
- name: x-request-id
in: header
required: true
schema:
type: string
format: uuid
example: 9fdfe802-4dcd-444f-b39d-6a63e368159a
description: A unique request identifier.
example: 9fdfe802-4dcd-444f-b39d-6a63e368159a
patch:
operationId: patchNotificationsMessages
tags:
- Notifications
summary: Mark all notifications as read
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.
---
Marks all notifications as read for the authenticated user. Rate limit: 20 requests per minute.'
responses:
'204':
description: All notifications marked as read
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
'401':
description: Unauthorized
'422':
description: Validation failed
'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
security:
- apiKeyAuth: []
userKeyAuth: []
- oauth2:
- etoro-public:notifications:write
x-ratelimit:
limit: 60
window: 60
shared: true
defaultPool: true
parameters:
- name: x-request-id
in: header
required: true
schema:
type: string
format: uuid
example: 5e52f498-6f87-4b5b-8f04-5839badd4ef6
description: A unique request identifier.
example: 5e52f498-6f87-4b5b-8f04-5839badd4ef6
components:
schemas:
InAppNotificationsMetadata:
type: object
description: Metadata about the notifications result
properties:
notSeen:
type: integer
format: int32
description: Count of unseen notifications
example: 5
InAppNotificationsResult:
type: object
description: Response containing notifications and metadata
properties:
messages:
type: array
description: List of notification messages
items:
$ref: '#/components/schemas/InAppNotificationMessage'
meta:
$ref: '#/components/schemas/InAppNotificationsMetadata'
InAppNotificationMessage:
type: object
description: A single in-app notification message
properties:
messageId:
type: string
format: uuid
description: Unique identifier of the notification message
example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
correlationId:
type: string
format: uuid
description: Correlation ID for request tracing
actionLink:
type: string
description: URL for the notification action
imageTitle:
type: string
description: Title for the notification image
imageUrl:
type: string
description: URL of the notification image
notificationType:
type: string
description: Type of notification
version:
type: string
description: Version of the notification format
aggregatable:
type: boolean
description: Whether this notification can be aggregated
grouped:
type: boolean
description: Whether this notification is grouped
aggregationId:
type: string
description: ID for aggregation grouping
message:
type: string
description: Notification content text
readStatus:
type: string
enum:
- New
- Seen
- Read
description: Current read status of the notification
publishDate:
type: string
format: date-time
description: When the notification was published
subCategory:
type: string
description: Sub-category of the notification
category:
type: string
description: Category of the notification
rtlLanguage:
type: boolean
description: Whether the notification content is in an RTL language
section:
type: string
description: Section the notification belongs to
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`'
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_`'
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.
x-provenance:
method: harvested
publisher: eToro
source: https://builders.etoro.com/openapi.json
note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
stamped by stamp-openapi-provenance.py (roadmap#793)