HTTP Basic
Envie o cabeçalho Authorization com Basic seguido de base64(client_id:client_secret). Quase todo cliente HTTP faz isso sozinho (curl -u, requests auth=, CURLOPT_USERPWD).
GET /partner/v1/catalog?limit=1 HTTP/1.1
Host: api.astorya.com.br
Authorization: Basic YXN0X2xpdmVfWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYOnNldS1zZWdyZWRv
Accept: application/jsoncurl "https://api.astorya.com.br/partner/v1/catalog?limit=1" \
-u "$ASTORYA_CLIENT_ID:$ASTORYA_CLIENT_SECRET"const basicAuth = Buffer.from(
`${process.env.ASTORYA_CLIENT_ID}:${process.env.ASTORYA_CLIENT_SECRET}`,
).toString('base64');
const res = await fetch('https://api.astorya.com.br/partner/v1/catalog?limit=1', {
headers: { Authorization: `Basic ${basicAuth}` },
});import os
import requests
response = requests.get(
"https://api.astorya.com.br/partner/v1/catalog",
params={"limit": 1},
auth=(os.environ["ASTORYA_CLIENT_ID"], os.environ["ASTORYA_CLIENT_SECRET"]),
timeout=10,
)<?php
$ch = curl_init('https://api.astorya.com.br/partner/v1/catalog?limit=1');
curl_setopt_array($ch, [
CURLOPT_USERPWD => getenv('ASTORYA_CLIENT_ID') . ':' . getenv('ASTORYA_CLIENT_SECRET'),
CURLOPT_RETURNTRANSFER => true,
]);
$body = curl_exec($ch);Credencial ausente, malformada, revogada ou com segredo errado gera 401 com code: "INVALID_CLIENT". Não há como distinguir os casos pela resposta, de propósito.
{
"statusCode": 401,
"code": "INVALID_CLIENT",
"message": "Credencial inválida."
}Nunca coloque o segredo no app
O client_secret dá acesso a todos os membros do seu tenant: permite criar sessões em nome de qualquer um, revogar acessos e baixar relatórios. Um app publicado na loja pode ser descompilado em minutos.
Regra de ouro: o app fala com o seu backend (com a autenticação que você já usa); só o seu backend fala com a Astorya.
- Guarde o segredo em um cofre (AWS Secrets Manager, GCP Secret Manager, Vault) ou em variáveis de ambiente do servidor.
- Não registre o cabeçalho
Authorizationem logs. - Use credenciais diferentes para sandbox e produção.
Rotação do segredo
Troque o segredo periodicamente, quando alguém com acesso a ele sair da equipe ou a qualquer suspeita de vazamento. No painel, em Integrações:
- Crie uma segunda credencial
Um tenant pode ter mais de uma credencial ativa ao mesmo tempo. Gere a nova e anote o segredo (ele aparece uma vez só).
- Publique a nova credencial no seu backend
Atualize o cofre/variáveis de ambiente e faça o deploy. Confira na coluna “Último uso” do painel que a nova credencial está recebendo chamadas.
- Revogue a credencial antiga
A partir desse momento, chamadas com ela recebem
401 INVALID_CLIENT.
Se preferir manter o mesmo client_id, use Rotacionar segredo na credencial: um novo segredo é gerado e o anterior para de funcionar na hora — faça isso numa janela em que o deploy do backend seja imediato.
Limites de requisição
Cada credencial pode fazer até 120 requisições por minuto, somando todos os endpoints. Acima disso a API responde 429 com code: "RATE_LIMITED".
- Espere e tente de novo com backoff exponencial (1 s, 2 s, 4 s…). Se a resposta trouxer o cabeçalho
Retry-After, respeite-o. - Não sincronize a base inteira de membros chamando
PUT /usersem sequência a cada noite. Chame só quando algo mudar (contratação, cancelamento, troca de e-mail). - Sessões já são criadas sob demanda — uma por abertura de tela — e cabem folgadamente no limite.
- Precisa de mais? Fale com contatodanielmrocha@gmail.com explicando o volume esperado.