Deriv API
Documentación
Cómo empezar

OAuth 2.0

Una guía completa para implementar Inicio de Sesión y Registro usando el flujo de Código de Autorización OAuth 2.0 de Deriv con PKCE.

Cómo funciona el flujo

1
Generar PKCE
2
Redirigir a Deriv
3
Usuario se autentica
4
Código de Cambio
5
Usar token
  1. Genere PKCE — Cree un code_verifier (cadena aleatoria) y derive code_challenge = BASE64URL(SHA256(code_verifier)). También genere un state aleatorio para protección CSRF.
  2. Redirigir a Deriv — Envíe al usuario a la URL de autorización de Deriv con todos los parámetros requeridos.
  3. El usuario se autentica — Deriv muestra el formulario de inicio de sesión o registro. Todas las pantallas de inicio de sesión y consentimiento son administradas por el proveedor de OAuth.
  4. Redirigir de vuelta — Deriv redirige al usuario a su redirect_uri con un código de autorización y state.
  5. Verifique el estado — Confirme que el state devuelto coincide con lo que almacenó. Esto previene ataques CSRF.
  6. Intercambiar código por token — Su backend envía el código + code_verifier al endpoint de token de Deriv y recibe un access_token.
  7. Use el token — Realice llamadas API autenticadas usando el token Bearer.

Antes de comenzar

Necesita:

  • Un cliente OAuth2 registrado de Deriv con un client_id y un redirect_uri pre-registrado.
  • HTTPS habilitado en su URL de redirección.
  • Su aplicación debe manejar redirecciones, leer el código de autorización e intercambiarlo por tokens.

Paso 1: Generar parámetros PKCE

Generando PKCE en JavaScript

// 1. Generate a random code_verifier
const array = crypto.getRandomValues(new Uint8Array(64));
const codeVerifier = Array.from(array)
  .map(v => 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~'[v % 66])
  .join('');

// 2. Derive the code_challenge
const hash = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(codeVerifier));
const codeChallenge = btoa(String.fromCharCode(...new Uint8Array(hash)))
  .replace(/\+/g, '-')
  .replace(/\//g, '_')
  .replace(/=+$/, '');

// 3. Generate a random state for CSRF protection
const state = crypto.getRandomValues(new Uint8Array(16))
  .reduce((s, b) => s + b.toString(16).padStart(2, '0'), '');

// 4. Store code_verifier and state before redirecting
sessionStorage.setItem('pkce_code_verifier', codeVerifier);
sessionStorage.setItem('oauth_state', state);

Parámetros de solicitud de autorización obligatorios:

  • response_type=code
  • client_id
  • redirect_uri
  • scope
  • state
  • code_challenge + code_challenge_method=S256 (PKCE)

Paso 2: Redirija al usuario al endpoint de autorización

Envíe a los usuarios al endpoint de autorización OAuth 2.0 de Deriv:

https://auth.deriv.com/oauth2/auth

Iniciar sesión

El inicio de sesión usa los parámetros estándar OAuth2 + PKCE sin adiciones.

Parámetros

ParámetroValorDescripción
response_typeObligatorio
codeRequest an authorization code
client_idObligatorio
Your app IDRegistered OAuth2 application ID from Deriv
redirect_uriObligatorio
Your callback URLMust exactly match the URI registered with Deriv
scopeObligatorio
tradeaccount_manageapplication_readpayment
Lista separada por espacios de los permisos que solicita su aplicación — consulte la tabla de alcances de OAuth a continuación
stateObligatorio
Random stringCSRF protection — generate a new value for each request
code_challengeObligatorio
BASE64URL(SHA256(verifier))The PKCE challenge derived from code_verifier
code_challenge_methodObligatorio
S256Always SHA-256
app_idOpcional
Your legacy app IDYour V1 app ID from the Legacy Deriv API — include this only if you also maintain a legacy API app

Alcances de OAuth

El parámetro de alcance es una lista separada por espacios de los permisos que solicita su aplicación. Solicite únicamente los alcances que su aplicación necesita.

AlcanceDescripción
tradeAcceso a operaciones de trading.
account_manageAcceso de escritura para la creación y gestión de cuentas.
application_readAcceso de solo lectura a sus aplicaciones registradas.
paymentAcceso a operaciones de depósito y retiro de agentes de pago.

URL de inicio de sesión

https://auth.deriv.com/oauth2/auth?
  response_type=code
  &client_id={YOUR_CLIENT_ID}          # e.g. app12345
  &redirect_uri={YOUR_REDIRECT_URI}    # e.g. https://yourapp.com/callback
  &scope=trade+account_manage
  &state={RANDOM_STATE}                # e.g. abc123random
  &code_challenge={PKCE_CHALLENGE}     # e.g. E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
  &code_challenge_method=S256

URL de inicio de sesión con soporte de aplicación heredada

https://auth.deriv.com/oauth2/auth?
  response_type=code
  &client_id={YOUR_CLIENT_ID}
  &redirect_uri={YOUR_REDIRECT_URI}
  &scope=trade+account_manage
  &state={RANDOM_STATE}
  &code_challenge={PKCE_CHALLENGE}
  &code_challenge_method=S256
  &app_id={YOUR_LEGACY_APP_ID}      # V1 app ID from legacy-api.deriv.com

Crear cuenta

El registro usa la misma URL base y parámetros que el inicio de sesión, más un parámetro obligatorio adicional:

Parámetro de registro requerido

ParámetroValorDescripción
promptObligatorio
registrationSiempre este valor exacto. Le dice a Deriv que muestre el formulario de registro en lugar del inicio de sesión.

Parámetros opcionales de atribución de socios

Los siguientes parámetros son todos opcionales y se gestionan en el panel de Socios. Inclúyalos para atribuir registros a su cuenta de socio. El parámetro de token de seguimiento tiene cuatro nombres equivalentes (t, affiliate_token, sidi, ca) — use el que aparezca en su enlace de referido o en el panel de Socios.

ParámetroValorPropósito
taffiliate_tokensidica
Su token de seguimiento de afiliadosSeguimiento y atribución. Use solo uno de estos nombres de parámetros — son alias equivalentes. Elija el que aparece en su enlace de referido o en el panel de Socios.
utm_campaignYour campaign nameIdentifies the marketing campaign
utm_mediumaffiliateIndicates a partner integration
utm_sourceYour affiliate IDCommission tracking and reporting

URL de Crear Cuenta

https://auth.deriv.com/oauth2/auth?
  response_type=code
  &client_id={YOUR_CLIENT_ID}          # e.g. app12345
  &redirect_uri={YOUR_REDIRECT_URI}    # e.g. https://yourapp.com/callback
  &scope=trade+account_manage
  &state={RANDOM_STATE}                # e.g. abc123random
  &code_challenge={PKCE_CHALLENGE}     # e.g. E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
  &code_challenge_method=S256
  &prompt=registration
  &t={YOUR_TRACKING_TOKEN}             # or: affiliate_token | sidi | ca — use the name from your referral link
  &utm_campaign={YOUR_CAMPAIGN}        # e.g. dynamicworks
  &utm_medium=affiliate
  &utm_source={YOUR_AFFILIATE_ID}      # e.g. CU303219

Paso 3: Maneje el callback

Ya sea que el usuario haya iniciado sesión o se haya registrado, el callback funciona exactamente de la misma manera. Después de la autenticación, Deriv redirige a su redirect_uri:

https://yourapp.com/callback?code=AUTHORIZATION_CODE&state=RANDOM_STATE

Si algo salió mal:

https://yourapp.com/callback?error=access_denied&error_description=User+cancelled

Su aplicación debe:

  1. Verifique el estado — compare el state de la URL con el valor que almacenó antes de la redirección. Si no coinciden, aborte — puede ser un ataque CSRF.
  2. Extraiga el código — lea el parámetro de consulta code.

Paso 4: Intercambiar código por tokens

Realice una solicitud POST desde su backend al endpoint de token. Nunca realice el intercambio de token desde el navegador.

POST https://auth.deriv.com/oauth2/token

Cuerpo de solicitud (codificado en formulario)

grant_type=authorization_code
client_id=YOUR_CLIENT_ID
code=AUTH_CODE_FROM_CALLBACK
code_verifier=YOUR_ORIGINAL_CODE_VERIFIER
redirect_uri=https://your-app.com/callback

ejemplo cURL

curl -X POST https://auth.deriv.com/oauth2/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=authorization_code" \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "code=AUTH_CODE" \
  -d "code_verifier=YOUR_CODE_VERIFIER" \
  -d "redirect_uri=https://your-app.com/callback"

Respuesta de token

{
  "access_token": "ory_at_...",
  "expires_in": 3600,
  "token_type": "Bearer"
}

Paso 5: Use el token de acceso en llamadas API

Incluya el token de acceso como un token Bearer en el encabezado Authorization para todas las llamadas API:

Authorization: Bearer YOUR_ACCESS_TOKEN

Ejemplo

curl -X GET "https://api.derivws.com/trading/v1/options/accounts" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Referencia rápida

EndpointURL
Autorizaciónhttps://auth.deriv.com/oauth2/auth
Intercambio de tokenhttps://auth.deriv.com/oauth2/token
URL base de APIhttps://api.derivws.com

Dónde encontrar sus valores:

ValorDónde
client_idRegister an OAuth2 app with Deriv — you'll receive an app ID
redirect_uriSet during app registration — must match exactly
t / affiliate_token / sidi / ca (signup)Your referral link or the Partners dashboard — use the exact parameter name shown there
utm_source / affiliate ID (signup)Managed and set in the Partners dashboard
utm_campaign (signup)Managed and set in the Partners dashboard
app_id (legacy)Your V1 app ID from legacy-api.deriv.com — only needed if you maintain a Legacy API app

Solución de problemas

ProblemaCausa probableCorrección
State mismatch errorstate in the callback doesn't match stored valueStore state in sessionStorage before redirecting, and don't regenerate it on page load
invalid_grant on token exchangecode_verifier doesn't match the challenge, or code expired/already usedSend the original code_verifier, not a newly generated one; exchange the code immediately
Redirect URI mismatchURL doesn't exactly match what's registeredCheck for trailing slashes, http vs https, port numbers
invalid_clientWrong client_idVerify your credentials from the Deriv dashboard
Login form shows instead of signupMissing prompt=registrationAdd prompt=registration to the authorization URL
Signup not tracked to partnerMissing or wrong UTM parametersVerify your tracking token parameter (one of t, affiliate_token, sidi, or ca) matches the one shown in your referral link, and that utm_source, utm_medium, and utm_campaign are all present and correct

Lista de verificación de implementación

Iniciar sesión

  • response_type es code
  • client_id y redirect_uri están registrados con Deriv
  • code_challenge y state se generan nuevos para cada solicitud
  • code_verifier se almacena en sessionStorage antes de redirigir
  • El callback verifica state antes de intercambiar el código
  • El intercambio de token ocurre del lado del servidor (no en el navegador)
  • code_verifier se borra del almacenamiento después del uso
  • Si mantiene una aplicación heredada, app_id se establece en su ID de aplicación Legacy (opcional)

Registro (adicional)

  • prompt está establecido en registration (obligatorio)
  • Token de seguimiento (uno de t, affiliate_token, sidi, ca) utm_source, utm_campaign y utm_medium se establecen si es necesario; use el nombre del parámetro que se muestra en su enlace de referencia o en el panel de Partners (opcional)
Click to open live chat support. Get instant help from our support team.