Pular para o conteúdo

Autenticação

As operações de entrega aceitam dois esquemas de autenticação. Recomendamos o token Bearer. Somente o endpoint de token e a disponibilidade não exigem autenticação.

Troque client_id e client_secret por um token de acesso.

Janela do terminal
curl -X POST "https://api.raptorx.com.br/integrations/opendelivery/oauth/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "grant_type=client_credentials" \
--data-urlencode "client_id=SEU_CLIENT_ID" \
--data-urlencode "client_secret=SEU_CLIENT_SECRET"

Resposta 200:

{
"access_token": "eyJhbGciOiJIUzI1NiIs...",
"token_type": "bearer",
"expires_in": 3600
}
  • O token vale 1 hora (expires_in em segundos). Reutilize-o e renove perto do vencimento ou ao receber 401.
  • O endpoint também aceita o corpo em JSON e está disponível em /integrations/opendelivery/v1/oauth/token.
  • Credenciais inválidas retornam 401 com Content-Type: application/problem+json (veja Erros).

Use o token em todas as chamadas:

Janela do terminal
curl "https://api.raptorx.com.br/integrations/opendelivery/v1/logistics/delivery/DELIVERY_ID" \
-H "Authorization: Bearer ACCESS_TOKEN"

Sem o header Authorization: Bearer, a requisição pode ser autenticada com o header X-App-Signature:

  • valor: HMAC-SHA256 do corpo bruto da requisição, usando o clientSecret como chave;
  • formato: hexadecimal em minúsculas, sem prefixo (não use sha256=);
  • em requisições GET, assine a string vazia ("");
  • assine exatamente os bytes que serão enviados: qualquer diferença (espaços, ordem de campos) invalida a assinatura.

A RaptorX identifica a integração pelo merchant.id do corpo; sem ele (por exemplo, no cancelamento ou na consulta), pelo deliveryId da rota ou pelo header X-App-Id, que deve ser igual ao clientId.

Sem o header de assinatura, a resposta é 401 “Assinatura ausente”; com assinatura incorreta, 401 “Assinatura inválida”.

import { createHmac } from "node:crypto";
const clientSecret = process.env.RAPTORX_CLIENT_SECRET;
const body = JSON.stringify({ orderId: "pedido-84321" /* ... */ });
const signature = createHmac("sha256", clientSecret).update(body).digest("hex");
await fetch("https://api.raptorx.com.br/integrations/opendelivery/v1/logistics/delivery", {
method: "POST",
headers: { "Content-Type": "application/json", "X-App-Signature": signature },
body, // envie exatamente a mesma string que foi assinada
});