curl --request POST \
--url https://public-api.etoro.com/api/v1/users/verification \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--header 'x-request-id: <x-request-id>' \
--header 'x-user-key: <api-key>' \
--data '
{
"verificationEvidence": {
"partnerReferenceId": "partner-ref-1",
"verificationMethod": "sms",
"verifiedAt": "2026-05-27T12:00:00Z",
"externalProviderId": "provider-1",
"externalReferenceId": "ref-1",
"additionalDetails": "Optional notes"
}
}
'import requests
url = "https://public-api.etoro.com/api/v1/users/verification"
payload = { "verificationEvidence": {
"partnerReferenceId": "partner-ref-1",
"verificationMethod": "sms",
"verifiedAt": "2026-05-27T12:00:00Z",
"externalProviderId": "provider-1",
"externalReferenceId": "ref-1",
"additionalDetails": "Optional notes"
} }
headers = {
"x-request-id": "<x-request-id>",
"x-api-key": "<api-key>",
"x-user-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-request-id': '<x-request-id>',
'x-api-key': '<api-key>',
'x-user-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
verificationEvidence: {
partnerReferenceId: 'partner-ref-1',
verificationMethod: 'sms',
verifiedAt: '2026-05-27T12:00:00Z',
externalProviderId: 'provider-1',
externalReferenceId: 'ref-1',
additionalDetails: 'Optional notes'
}
})
};
fetch('https://public-api.etoro.com/api/v1/users/verification', 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/users/verification",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'verificationEvidence' => [
'partnerReferenceId' => 'partner-ref-1',
'verificationMethod' => 'sms',
'verifiedAt' => '2026-05-27T12:00:00Z',
'externalProviderId' => 'provider-1',
'externalReferenceId' => 'ref-1',
'additionalDetails' => 'Optional notes'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://public-api.etoro.com/api/v1/users/verification"
payload := strings.NewReader("{\n \"verificationEvidence\": {\n \"partnerReferenceId\": \"partner-ref-1\",\n \"verificationMethod\": \"sms\",\n \"verifiedAt\": \"2026-05-27T12:00:00Z\",\n \"externalProviderId\": \"provider-1\",\n \"externalReferenceId\": \"ref-1\",\n \"additionalDetails\": \"Optional notes\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
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>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://public-api.etoro.com/api/v1/users/verification")
.header("x-request-id", "<x-request-id>")
.header("x-api-key", "<api-key>")
.header("x-user-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"verificationEvidence\": {\n \"partnerReferenceId\": \"partner-ref-1\",\n \"verificationMethod\": \"sms\",\n \"verifiedAt\": \"2026-05-27T12:00:00Z\",\n \"externalProviderId\": \"provider-1\",\n \"externalReferenceId\": \"ref-1\",\n \"additionalDetails\": \"Optional notes\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api.etoro.com/api/v1/users/verification")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-request-id"] = '<x-request-id>'
request["x-api-key"] = '<api-key>'
request["x-user-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"verificationEvidence\": {\n \"partnerReferenceId\": \"partner-ref-1\",\n \"verificationMethod\": \"sms\",\n \"verifiedAt\": \"2026-05-27T12:00:00Z\",\n \"externalProviderId\": \"provider-1\",\n \"externalReferenceId\": \"ref-1\",\n \"additionalDetails\": \"Optional notes\"\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"verified": true,
"alreadyVerified": false,
"previousVerificationLevel": 2,
"verificationLevel": 3,
"verifiedAt": "2026-05-27T12:00:00Z",
"partnerVerified": true,
"partnerReferenceId": "partner-ref-1"
}
}Submit trusted partner verification
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.
Submits trusted partner verification for the authenticated user. When the user is already at verification level 3, returns an idempotent success response without re-processing. Otherwise requires verification level 2, uploads POI/POA trusted-partner documents, and upgrades the user to level 3.
curl --request POST \
--url https://public-api.etoro.com/api/v1/users/verification \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--header 'x-request-id: <x-request-id>' \
--header 'x-user-key: <api-key>' \
--data '
{
"verificationEvidence": {
"partnerReferenceId": "partner-ref-1",
"verificationMethod": "sms",
"verifiedAt": "2026-05-27T12:00:00Z",
"externalProviderId": "provider-1",
"externalReferenceId": "ref-1",
"additionalDetails": "Optional notes"
}
}
'import requests
url = "https://public-api.etoro.com/api/v1/users/verification"
payload = { "verificationEvidence": {
"partnerReferenceId": "partner-ref-1",
"verificationMethod": "sms",
"verifiedAt": "2026-05-27T12:00:00Z",
"externalProviderId": "provider-1",
"externalReferenceId": "ref-1",
"additionalDetails": "Optional notes"
} }
headers = {
"x-request-id": "<x-request-id>",
"x-api-key": "<api-key>",
"x-user-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-request-id': '<x-request-id>',
'x-api-key': '<api-key>',
'x-user-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
verificationEvidence: {
partnerReferenceId: 'partner-ref-1',
verificationMethod: 'sms',
verifiedAt: '2026-05-27T12:00:00Z',
externalProviderId: 'provider-1',
externalReferenceId: 'ref-1',
additionalDetails: 'Optional notes'
}
})
};
fetch('https://public-api.etoro.com/api/v1/users/verification', 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/users/verification",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'verificationEvidence' => [
'partnerReferenceId' => 'partner-ref-1',
'verificationMethod' => 'sms',
'verifiedAt' => '2026-05-27T12:00:00Z',
'externalProviderId' => 'provider-1',
'externalReferenceId' => 'ref-1',
'additionalDetails' => 'Optional notes'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://public-api.etoro.com/api/v1/users/verification"
payload := strings.NewReader("{\n \"verificationEvidence\": {\n \"partnerReferenceId\": \"partner-ref-1\",\n \"verificationMethod\": \"sms\",\n \"verifiedAt\": \"2026-05-27T12:00:00Z\",\n \"externalProviderId\": \"provider-1\",\n \"externalReferenceId\": \"ref-1\",\n \"additionalDetails\": \"Optional notes\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
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>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://public-api.etoro.com/api/v1/users/verification")
.header("x-request-id", "<x-request-id>")
.header("x-api-key", "<api-key>")
.header("x-user-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"verificationEvidence\": {\n \"partnerReferenceId\": \"partner-ref-1\",\n \"verificationMethod\": \"sms\",\n \"verifiedAt\": \"2026-05-27T12:00:00Z\",\n \"externalProviderId\": \"provider-1\",\n \"externalReferenceId\": \"ref-1\",\n \"additionalDetails\": \"Optional notes\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api.etoro.com/api/v1/users/verification")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-request-id"] = '<x-request-id>'
request["x-api-key"] = '<api-key>'
request["x-user-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"verificationEvidence\": {\n \"partnerReferenceId\": \"partner-ref-1\",\n \"verificationMethod\": \"sms\",\n \"verifiedAt\": \"2026-05-27T12:00:00Z\",\n \"externalProviderId\": \"provider-1\",\n \"externalReferenceId\": \"ref-1\",\n \"additionalDetails\": \"Optional notes\"\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"verified": true,
"alreadyVerified": false,
"previousVerificationLevel": 2,
"verificationLevel": 3,
"verifiedAt": "2026-05-27T12:00:00Z",
"partnerVerified": true,
"partnerReferenceId": "partner-ref-1"
}
}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.
"c3aea7a9-cf39-489a-9efa-43866eb52118"
Body
Trusted partner verification submission payload
Partner verification evidence details
Show child attributes
Show child attributes