From tray-api
Implements the Tray API OAuth 2.0 flow: authorization redirect, token exchange, and refresh token renewal. Use when generating access tokens or handling 401/auth errors.
How this skill is triggered — by the user, by Claude, or both
Slash command
/tray-api:autorizacaoWhen to use
Use quando o desenvolvedor mencionar: autenticação, OAuth, access_token, refresh_token, consumer_key, consumer_secret, erro 401, token expirado, como conectar à API da Tray, primeiras credenciais, fluxo de autorização ou callback de autenticação.
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
- **OBRIGATÓRIO:** `node skills/tray-dev/scripts/search_docs.mjs "<termo>"` — confirme o comportamento da API antes de gerar código.
node skills/tray-dev/scripts/search_docs.mjs "<termo>" — confirme o comportamento da API antes de gerar código.node skills/autorizacao/scripts/validate.mjs '<payload_json>' — valide a estrutura do payload antes de retornar código ao usuário.Execute estas verificações antes de gerar qualquer payload ou código:
access_token não aparece como literal string no código gerado.when_not_to_use no frontmatter).node skills/autorizacao/scripts/validate.mjs '<payload_json>'
para confirmar a estrutura do payload que vai gerar. O validador checa
apenas estrutura (campos obrigatórios, tipos e campos desconhecidos),
nunca valores reais — então monte um payload sintético com placeholders
sempre que os valores vierem de variáveis de ambiente, do callback OAuth
ou de outras chamadas. Exemplo:
node skills/autorizacao/scripts/validate.mjs '{"consumer_key":"<env>","consumer_secret":"<env>","code":"<callback>"}'.
Corrija todos os erros antes de retornar o código ao usuário. Até 3
tentativas — se persistir, explique o problema ao usuário.Documentação oficial: https://developers.tray.com.br/#autorizacao
Redirecione o lojista para a tela de autorização da Tray:
https://{dominio_loja}/auth.php?response_type=code&consumer_key={consumer_key}&callback={callback_url}
Parâmetros:
response_type — sempre codeconsumer_key — chave do aplicativo (obtida ao criar o app na Tray)callback — URL de retorno do seu aplicativoApós o lojista autorizar, a Tray redireciona para sua callback com os parâmetros:
| Parâmetro | Descrição |
|---|---|
code | Código de autorização (uso único) |
adm_user | Identificador do usuário administrativo |
store | URL da loja |
api_address | Endereço base da API para esta loja |
Endpoint: POST https://{api_address}/auth
Parâmetros do body (JSON):
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
consumer_key | string | Sim | Chave do aplicativo |
consumer_secret | string | Sim | Segredo do aplicativo |
code | string | Sim | Código recebido no callback |
Resposta de sucesso (201):
{
"code": 201,
"message": "Created tokens",
"access_token": "xxxxxxxxxxxxx",
"refresh_token": "xxxxxxxxxxxxx",
"date_expiration_access_token": "2026-03-21 15:00:00",
"date_expiration_refresh_token": "2026-04-20 12:00:00",
"date_activated": "2026-03-21 12:00:00",
"api_host": "https://{api_address}/",
"store_id": "123456"
}
Endpoint: GET https://{api_address}/auth?refresh_token={refresh_token}
Resposta de sucesso (200):
{
"code": 200,
"message": "Refreshed tokens",
"access_token": "novo_access_token",
"refresh_token": "novo_refresh_token",
"date_expiration_access_token": "2026-03-21 18:00:00",
"date_expiration_refresh_token": "2026-04-20 15:00:00",
"store_id": "123456"
}
| Token | Expiração | Ação necessária |
|---|---|---|
access_token | 3 horas | Renovar via refresh_token antes de expirar |
refresh_token | 30 dias | Requer nova autorização completa se expirar |
Todas as chamadas à API (exceto rotas públicas) exigem o access_token como query parameter:
GET https://{api_address}/products?access_token={access_token}
POST https://{api_address}/products?access_token={access_token}
| Código | Situação | Ação recomendada |
|---|---|---|
1000 | Token expirado, loja ativa | Renovar via refresh_token |
1001 | Token expirado, loja bloqueada | Verificar status com o lojista |
1002 | Token expirado, loja inativa | Verificar ativação da loja |
1003 | Token expirado, loja cancelada | Loja não está mais disponível |
1099 | Token inválido ou expirado (motivo desconhecido) | Verificar token e refazer autenticação |
Nota: o campo retornado pela API é
error_code(nãocode). Validado em teste real: token inválido retornaerror_code: 1099com HTTP 401.
Resposta de erro (401):
{
"code": 401,
"message": "Unauthorized",
"causes": ["Token expired or invalid"]
}
| Tipo | Limite |
|---|---|
| Curto prazo | 180 requisições por minuto |
| Diário (padrão) | 10.000 requisições por dia |
| Diário (corporate) | 50.000 requisições por dia |
Resposta de limite excedido (429): A API retorna HTTP 429 quando o limite é atingido. Implemente backoff exponencial.
TRAY_ACCESS_TOKEN, TRAY_CONSUMER_KEY, TRAY_CONSUMER_SECRET)refresh_token antes das 3 horas.env com todas as variáveis necessáriasconsumer_key e consumer_secret do seu app na Tray (obtidos no painel de parceiros)npx claudepluginhub tray-tecnologia/tray-api-ai-plugin --plugin tray-apiProvides CDSS development patterns for drug interaction checking, dose validation, clinical scoring (NEWS2, qSOFA), and alert classification integrated into EMR workflows.