Autenticação API
Aprenda como autenticar suas requisições na API Atys usando Bearer Token (OAuth 2.0).
Authorization.
Como Funciona
A autenticação na API Atys segue o padrão OAuth 2.0 com fluxo de credenciais de senha (Resource Owner Password Credentials Grant). O processo é simples:
1. Obter Credenciais
Use o email e senha do usuário API cadastrado na plataforma Atys.
2. Fazer Login
Envie as credenciais para o endpoint de autenticação e receba o access_token.
3. Usar Token
Inclua o token no header Authorization de todas as requisições.
Obter access_token
Para obter o token de autenticação, faça uma requisição POST para o endpoint https://api.atys.pro/api/oauth/token com suas credenciais.
https://api.atys.pro/api/oauth/token
Autenticar e obter access_token
Parâmetros do Body (JSON)
| Parâmetro | Tipo | Obrigatório | Descrição | Valor |
|---|---|---|---|---|
email |
string | ✅ Sim | Email do usuário API | joao@exemplo.com |
password |
string | ✅ Sim | Senha do usuário API | senha123 |
grant_type |
string | ✅ Sim | Tipo de grant (password) | password |
Exemplos de Código
const response = await fetch('https://api.atys.pro/api/oauth/token', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify({
email: 'seu-email@exemplo.com',
password: 'sua-senha-segura',
grant_type: 'password'
})
});
const data = await response.json();
console.log(data.access_token);
import requests
response = requests.post(
'https://api.atys.pro/api/oauth/token',
headers={
'Content-Type': 'application/json',
'Accept': 'application/json'
},
json={
'email': 'seu-email@exemplo.com',
'password': 'sua-senha-segura',
'grant_type': 'password'
}
)
data = response.json()
print(data['access_token'])
<?php
$ch = curl_init('https://api.atys.pro/api/oauth/token');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'email' => 'seu-email@exemplo.com',
'password' => 'sua-senha-segura',
'grant_type' => 'password'
]));
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
echo $data['access_token'];
?>
<?php
// composer require guzzlehttp/guzzle
use GuzzleHttp\Client;
$client = new Client();
$response = $client->post('https://api.atys.pro/api/oauth/token', [
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json'
],
'json' => [
'email' => 'seu-email@exemplo.com',
'password' => 'sua-senha-segura',
'grant_type' => 'password'
]
]);
$data = json_decode($response->getBody(), true);
echo $data['access_token'];
?>
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
payload := map[string]string{
"email": "seu-email@exemplo.com",
"password": "sua-senha-segura",
"grant_type": "password",
}
jsonData, _ := json.Marshal(payload)
resp, err := http.Post(
"https://api.atys.pro/api/oauth/token",
"application/json",
bytes.NewBuffer(jsonData),
)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var result map[string]interface{}
json.Unmarshal(body, &result)
fmt.Println(result["access_token"])
}
curl -X POST https://api.atys.pro/api/oauth/token \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"email": "seu-email@exemplo.com",
"password": "sua-senha-segura",
"grant_type": "password"
}'
Resposta de Sucesso (200 OK)
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9...",
"token_type": "Bearer",
"user_data": {
"id": 123,
"name": "João Silva",
"email": "joao@exemplo.com",
"company_id": 45,
// ... demais campos do usuário
}
}
Usando o access_token
Após obter o token, inclua-o no header Authorization de todas as requisições subsequentes:
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9...
Exemplo de Requisição Autenticada
const response = await fetch('https://api.atys.pro/api/contacts', {
method: 'GET',
headers: {
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Accept': 'application/json'
}
});
const data = await response.json();
import requests
response = requests.get(
'https://api.atys.pro/api/contacts',
headers={
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Accept': 'application/json'
}
)
data = response.json()
<?php
$ch = curl_init('https://api.atys.pro/api/contacts');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer SEU_ACCESS_TOKEN',
'Accept: application/json'
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
?>
<?php
use GuzzleHttp\Client;
$client = new Client();
$response = $client->get('https://api.atys.pro/api/contacts', [
'headers' => [
'Authorization' => 'Bearer SEU_ACCESS_TOKEN',
'Accept' => 'application/json'
]
]);
$data = json_decode($response->getBody(), true);
?>
package main
import (
"encoding/json"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest(
"GET",
"https://api.atys.pro/api/contacts",
nil,
)
req.Header.Set("Authorization", "Bearer SEU_ACCESS_TOKEN")
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var result map[string]interface{}
json.Unmarshal(body, &result)
}
curl -X GET https://api.atys.pro/api/contacts \ -H "Authorization: Bearer SEU_ACCESS_TOKEN" \ -H "Accept: application/json"
Renovação do Token
O access_token não expira. O access_token somente é invalidado nos seguintes casos:- Se um novo login for realizado com o usuário e senha
- Se o usuário for bloqueado
- Se a empresa for desativada
Melhores Práticas de Segurança
Recomendado
- ✅ Use HTTPS em todas as requisições
- ✅ Armazene tokens de forma segura (variáveis de ambiente)
- ✅ Nunca exponha tokens em URLs ou logs
- ✅ Implemente rotação automática de tokens
- ✅ Use senhas fortes para usuários API
- ✅ Monitore uso anormal da API
Evite
- ❌ Nunca commite tokens no Git
- ❌ Não armazene tokens em cookies sem criptografia
- ❌ Não compartilhe tokens entre diferentes ambientes
- ❌ Evite hardcoding de credenciais
- ❌ Não use tokens em requisições HTTP (sem S)
- ❌ Não ignore erros de autenticação
Erros Comuns de Autenticação
Causa: O token fornecido está inválido, expirado ou não foi enviado.
Solução: Faça login novamente para obter um novo token válido.
{
"success": false,
"message": "Unauthenticated.",
"error_code": "TOKEN_EXPIRED"
}
Causa: Email ou senha incorretos.
Solução: Verifique as credenciais e tente novamente.
{
"success": false,
"message": "Credenciais inválidas",
"errors": {
"email": ["Estas credenciais não correspondem aos nossos registros."]
}
}
Causa: Muitas tentativas de login em curto período de tempo.
Solução: Aguarde alguns minutos antes de tentar novamente.
{
"success": false,
"message": "Muitas tentativas. Tente novamente em 60 segundos.",
"retry_after": 60
}