🔐 Autenticação (Client Credentials)

Esta página ensina como trocar suas chaves de acesso por um token temporário para realizar chamadas seguras.

O Fluxo do Token

Tanto o backend da empresa (Participante) quanto scripts pessoais de usuários usam o fluxo Client Credentials:

[Seu Script/Servidor] ── POST /auth/api-key (Client ID/Secret) ──▶ [DEX API]
[Seu Script/Servidor] ◀── Retorna Token JWT (Válido por 1 hora) ─── [DEX API]

Analogia: É como apresentar seu documento na portaria de um prédio para receber um crachá de visitante. O crachá (Token JWT) vale por 1 hora. Se ele expirar, você precisa pedir outro.

1. Como Obter Suas Chaves

  • Participantes (Empresas): Geram no Painel Admin do Participante.

  • Usuários Finais (Pessoais): Geram no app em Integrações → API (Desktop) ou ⚙️ Configurações → Integrações → API (PWA).

2. Gerando o Token

Faça um POSTcontendo suas chaves:

Endpoint

POST /v1/auth/api-key

JSON Enviado

{
  "clientId": "seu_client_id_aqui",
  "clientSecret": "seu_client_secret_aqui"
}

JSON Recebido (Sucesso)

{
  "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "expiresIn": 3600,
  "tokenType": "Bearer"
}

Use o campo accessToken no cabeçalho das próximas chamadas: Authorization: Bearer <accessToken>.

Exemplos Práticos de Código

Selecione a linguagem de programação desejada abaixo para visualizar o código completo de automação e cache do token:

💻 Exemplo em Node.js (TypeScript)

const DEX_API_BASE = 'https://api.dexkey.finance/v1';
let tokenCache: { token: string; expiresAt: number } | null = null;

async function obterToken(): Promise<string> {
  if (tokenCache && Date.now() < tokenCache.expiresAt - 120_000) {
    return tokenCache.token;
  }

  const resposta = await fetch(`${DEX_API_BASE}/auth/api-key`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      clientId: process.env.DEX_CLIENT_ID,
      clientSecret: process.env.DEX_CLIENT_SECRET,
    }),
  });

  const dados = await resposta.json();
  tokenCache = {
    token: dados.accessToken,
    expiresAt: Date.now() + dados.expiresIn * 1000,
  };
  return dados.accessToken;
}

🐍 Exemplo em Python

import os, time, requests
DEX_API_BASE = "https://api.dexkey.finance/v1"
_token_cache = {"token": None, "expires_at": 0}

def obter_token() -> str:
    if _token_cache["token"] and time.time() < _token_cache["expires_at"] - 120:
        return _token_cache["token"]

    resposta = requests.post(
        f"{DEX_API_BASE}/auth/api-key",
        json={
            "clientId": os.environ["DEX_CLIENT_ID"],
            "clientSecret": os.environ["DEX_CLIENT_SECRET"],
        },
    )
    dados = resposta.json()
    _token_cache["token"] = dados["accessToken"]
    _token_cache["expires_at"] = time.time() + dados["expiresIn"]
    return dados["accessToken"]