Autenticação
Como autenticar suas requisições à API Versell Pix
OAuth2 + mTLS
A API Versell utiliza o protocolo OAuth2 com o fluxo client_credentials combinado com certificados mTLS (Mutual TLS) para autenticação. Isso garante dois níveis de segurança: a identidade do cliente é verificada tanto pelo certificado digital quanto pelas credenciais OAuth2.
Certificado mTLS
O mTLS (Mutual TLS) exige que tanto o cliente quanto o servidor apresentem certificados digitais durante o handshake TLS. Você receberá da Versell os seguintes arquivos:
| Arquivo | Descrição |
|---|---|
.crt | Certificado do cliente (formato X.509) |
.csr | Certificate Signing Request |
.key | Chave privada do certificado |
.pfx | Bundle PKCS#12 (certificado + chave em um único arquivo, protegido por senha) |
Fica a critério do desenvolvedor qual formato utilizar. Os exemplos abaixo usam .crt + .key, mas você pode adaptar para .pfx conforme sua stack:
curl -X POST https://api.pix.basspago.com.br/oauth/token \
--cert ./client.crt \
--key ./client.key \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials&client_id=YOUR_ID&client_secret=YOUR_SECRET"Esses arquivos devem ser enviados em todas as requisições HTTP à API, incluindo a obtenção do token.
Obtendo um Token
| Módulo | Token Endpoint |
|---|---|
| Cash In | POST https://api.pix.basspago.com.br/oauth/token |
| Cash Out | POST https://pagamentos.basspago.com.br/oauth/token |
O corpo da requisição deve ser URL-encoded com os seguintes parâmetros:
| Parâmetro | Valor |
|---|---|
client_id | Seu client ID |
client_secret | Seu client secret |
grant_type | client_credentials |
Token Cash In
curl -X POST https://api.pix.basspago.com.br/oauth/token \
--cert ./client.crt \
--key ./client.key \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=client_credentials"Token Cash Out
curl -X POST https://pagamentos.basspago.com.br/oauth/token \
--cert ./client.crt \
--key ./client.key \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=client_credentials"Resposta do Token
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 300
}Usando o Token
Inclua o token no header Authorization de todas as requisições à API:
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...Estratégia de Renovação de Token
Recomendamos as seguintes práticas para gerenciar tokens:
- Armazene o token em cache junto com o timestamp de expiração
- Renove o token com 30-60 segundos de antecedência antes da expiração
- Em caso de erro 401, solicite um novo token e repita a requisição
- Nunca solicite um novo token para cada requisição individual
Erros Comuns
| Status | Causa | Solução |
|---|---|---|
401 | Token expirado ou inválido | Solicite um novo token |
403 | Certificado mTLS ausente ou inválido | Verifique se o .crt/.key ou .pfx estão corretos |
429 | Rate limit excedido | Faça cache do token. Máx. 10 req/min no endpoint de token |
400 | Parâmetros inválidos (client_id, grant_type) | Verifique o body (URL-encoded) e os valores |
SSL Error | Falha no handshake TLS | Certificado expirado, formato errado, ou senha do .pfx incorreta |