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.
Token Bearer (recomendado)
Seção intitulada “Token Bearer (recomendado)”Troque client_id e client_secret por um token de acesso.
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_inem segundos). Reutilize-o e renove perto do vencimento ou ao receber401. - O endpoint também aceita o corpo em JSON e está disponível em
/integrations/opendelivery/v1/oauth/token. - Credenciais inválidas retornam
401comContent-Type: application/problem+json(veja Erros).
Use o token em todas as chamadas:
curl "https://api.raptorx.com.br/integrations/opendelivery/v1/logistics/delivery/DELIVERY_ID" \ -H "Authorization: Bearer ACCESS_TOKEN"Assinatura HMAC (alternativa)
Seção intitulada “Assinatura HMAC (alternativa)”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
clientSecretcomo 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});import hashlibimport hmacimport jsonimport os
import requests
client_secret = os.environ["RAPTORX_CLIENT_SECRET"].encode()body = json.dumps({"orderId": "pedido-84321"}).encode() # ... demais campos
signature = hmac.new(client_secret, body, hashlib.sha256).hexdigest()
requests.post( "https://api.raptorx.com.br/integrations/opendelivery/v1/logistics/delivery", headers={"Content-Type": "application/json", "X-App-Signature": signature}, data=body, # envie exatamente os mesmos bytes que foram assinados)
