Pular para o conteúdo

Autenticação

A API pública do Vmix Pay usa OAuth2 client_credentials. Você troca suas credenciais (client_id + client_secret) por um access_token Bearer de curta duração e usa esse token nas chamadas de negócio — o client_secret nunca acompanha as requisições.

  1. Crie a credencial no painel.

    Acesse /painel/tokens no painel do Vmix Pay e gere uma credencial de API. Você recebe um client_id e um client_secret.

  2. Obtenha o access_token.

    Faça POST /v1/oauth/token com as credenciais no header Authorization: Basic base64(client_id:client_secret) e o corpo grant_type=client_credentials. O corpo pode ser application/x-www-form-urlencoded ou application/json.

    A resposta 200 traz o token e seus metadados:

    {
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "token_type": "Bearer",
    "expires_in": 900,
    "scope": "charges:create charges:read"
    }
  3. Chame a API com o Bearer.

    Use o access_token no header Authorization: Bearer <access_token> em todas as chamadas de negócio (e o header Idempotency-Key nas operações financeiras — veja Erros & Idempotência).

Terminal window
curl -X POST https://api.vmixpay.com.br/v1/oauth/token \
-u "SEU_CLIENT_ID:SEU_CLIENT_SECRET" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials"

A flag -u do curl monta o header Authorization: Basic automaticamente.

Terminal window
curl https://api.vmixpay.com.br/v1/charges/<charge_id> \
-H "Authorization: Bearer SEU_ACCESS_TOKEN"

O access_token é um JWT de curta duração — o campo expires_in é o TTL em segundos (tipicamente ~900s / 15 minutos). Quando ele expirar, re-emita um novo chamando POST /v1/oauth/token de novo. Uma estratégia comum é guardar o token em cache e renová-lo um pouco antes de expires_in vencer.

O POST /v1/oauth/token segue o formato de erro da RFC 6749 §5.2 — diferente do envelope de erro padrão do resto da API:

HTTP Corpo Quando
400 { "error": "unsupported_grant_type" } grant_type ausente ou diferente de client_credentials.
401 { "error": "invalid_client" } Credenciais ausentes, malformadas ou inválidas.
429 Envelope de erro padrão Limite de tentativas excedido (proteção contra brute-force; 5/min por IP).