Overview
This guide covers the journey for a partner that owns the customer relationship in its own product and uses etoro as the brokerage and identity layer underneath. The user never has to register on etoro first. The journey has two parts, and they run on different channels:Access is provisioned per partner. Before you start, your etoro contact must have set up your application (client credentials and redirect URIs), the scopes below, your API key, and the allow-listing of your egress IP addresses. See Before you start.
https://www.etoro.com; the API is https://public-api.etoro.com.
Before you start
Ask your etoro contact to confirm each of the following:1
Application and credentials
A
client_id and client_secret for your application, and the exact redirect URI or URIs you will use for silent login. Keep the secret on your backend only.2
Scopes
The scopes this journey uses are listed below; the full scope map is in Permitted operations and scopes. A scope outside your grant is rejected.
3
API key and IP allow-listing
An
x-api-key for your application, and your egress addresses registered with etoro, as described in the integration prerequisites.4
Trusted-partner entitlement
Direct email and phone confirmation, and trusted user verification, are available only to partners etoro has approved as trusted, and only for users your application created.
Part A: Create the user and submit KYC
1. Obtain a partner token
Authenticate your application with the OAuth 2.0 client credentials grant. No end user is involved at this stage.access_token and the scopes granted to your application. Send the client secret in the form body, as above, or as HTTP Basic — not both. Request a new token when it expires.
2. Check eligibility and get the consent documents
Which legal documents a user must accept depends on their country. Always fetch them for the country you are onboarding; never hard-code document identifiers.Response 200
blocked or restricted is true, do not continue to registration for that country. Present every returned document to the user, and record the time they accepted it and their IP address.
3. Register the user
Send oneconsents entry for every document returned in step 2.
No password is supplied; etoro generates one. A successful call returns
201 and a token bundle for the new user:
Response 201
- The
subclaim of theid_token. On a partner application this is the user’sexternalUserId, and you need it for silent login. It is not an etoro customer id. - The
access_token. It is short-lived; honorexpires_in. Use it as a bearer token for the next user-scoped calls, then replace it with a non-interactive token.
409 for a username, email, or partnerCorrelationId that is already in use (use new values); 422 for an invalid or missing consent, or a stale signedAt. See Errors and rate limits for the rest.
4. Issue a non-interactive token
The registrationaccess_token expires. To keep calling user-scoped endpoints from your backend after that, issue a non-interactive token (NIT) for the user.
The NIT published in this portal is the sub-account user token in Issue a non-interactive token. That call needs the registration access_token and an x-sub-account-id, and it returns the secret only once. Store it in a secret store, and set expiresAt and ipsWhitelist.
That path applies when the user is an etoro trading sub-account of your application. If your application registers a user directly and you do not have a sub-account id, confirm the issuance path with your etoro contact before you build it. Do not call an internal host.
Authorization: Bearer and the registration access_token. After it exists, they use your x-api-key and the user’s x-user-key. The two are mutually exclusive; see Issue a non-interactive token. The examples below show the key pair.
5. Prepare the profile and submit KYC
Call the operations below for the new user. Each lists the scopes it needs in the Partners API reference.
Where your own provider has already verified the user, you can supply that evidence instead of asking the user to repeat it.
Confirm email and phone with your own evidence
Direct confirmation records that you verified the email or phone, so etoro does not send a one-time code. Both calls take averificationEvidence object:
phoneNumber is digits only, without the country code, and must be a valid national number for that country. A 409 means the email or phone is already verified, or is in use by another user; where the verification was intentional, treat an “already verified” response as done.
Submit trusted user verification
When the user has reached the required verification level, submit your verification evidence to complete trusted verification:400; complete the earlier profile and verification steps and check GET /api/v1/kyc/gaps rather than retrying. Use the verificationMethod value document_verification on this operation; the enumeration in the table above applies to the email and phone confirmations.
Part B: Sign the user in silently
Silent login opens etoro in the user’s browser already signed in. It is a handshake between the browser, your backend, and etoro, and the order matters.1. The user’s browser calls initiate
There is no initiate page to open with query parameters. The user’s browser sends:curl shows the contract. Run it in the user’s browser (so the Set-Cookie is stored there), not on your server. X-STS-DeviceId is a GUID you generate for this handshake. fromClientId is your application’s client id and must be a GUID. redirectUri must match a registered redirect URI character for character, including scheme and path. state is optional.
A successful call returns 201 and sets etoro-silent-login-tid (HttpOnly, Secure, domain .etoro.com, about five minutes):
Response 201
redirectUrl. tid is a GUID with no dashes. When you sent state, it is appended and URL-encoded; when you omitted it, the callback has tid only. An unregistered redirectUri is rejected with 403.
2. Exchange the tid for a one-time token
On your backend, readtid from the callback and identify the user. Authenticate with a partner token (see step 1 of Part A) and send the user’s externalUserId, which is the sub claim saved at registration:
Response 201
tid must be the GUID from the callback. externalUserId must be the value saved from registration and must belong to your application; a value minted for another application is rejected.
3. Open the verify URL in the same browser
Redirect the browser to theredirectUrl exactly as returned. Do not change its host, path, or query string. The etoro page combines the cookie from step 1 with the one-time token, establishes the session, and lands the user on etoro signed in. You do not call the verify endpoint yourself.
Timing and single use
- The cookie lives for about five minutes. Complete steps 1 to 3 promptly.
- The one-time token (
ott) is single use. If a sign-in fails, start again from step 1; do not reuse anottor atid. - The cookie must come from the same browser that opens the verify URL.
Silent login errors
Errors and rate limits
Each operation’s rate limit is stated in the Partners API reference; most share a default of 60 requests per 60 seconds, and exceeding it returns429. See Rate limits. Common causes of failure across the guide:
Go-live checklist
- Consent documents fetched per country at registration time, never hard-coded, with an accurate
signedAtand the end user’s ownclientIp. externalUserId(thesubclaim) andpartnerCorrelationIdstored against your own user record.- Every item in the partner security checklist: NIT storage, expiry and IP restriction, egress allow-listing, and no personal data in logs or events.
- Silent login initiated only from the user’s browser, with
partner-login-tokencalled only from your backend. - A full dry run of Part A and Part B in a non-production environment, agreed with your etoro contact, before any customer sees it.
Reference
Partners API reference
Every Partners API endpoint, with the scopes each one requires.
Partner integration flow
Non-interactive tokens, account association, scopes, and event reporting.
SSO with OAuth 2.0
The standard sign-in flow for users who already hold an etoro account.
API keys and headers
The
x-api-key / x-user-key pair and request header format.