API Receivia
REST + JSON. HMAC-SHA256 para autenticação. Webhooks para entrega assíncrona.
📘 Guia operacional de homologação SNCR/Anvisa: Gov.br, sandbox, virada de chave.Abrir guia →
Autenticação
Toda chamada exige três headers:
X-Api-Key: chave criada em Integrações.X-Timestamp: epoch em segundos (tolerância ±5min).X-Signature:hex(HMAC-SHA256(secret, timestamp + "." + body))
Base URL: https://app.receivia.com.br/api/public/v1
POST /prescriptions — criar receita
Envia uma receita para análise. Retorna ID e estado pending; o resultado chega via webhook prescription.analyzed.
Payload
{
"file_base64": "<base64 do PDF ou imagem>",
"file_name": "receita-12345.pdf",
"file_type": "pdf",
"buyer_name": "José da Silva",
"buyer_cpf": "12345678900",
"metadata": { "erp_id": "12345" }
}cURL
curl -X POST https://app.receivia.com.br/api/public/v1/prescriptions \
-H "X-Api-Key: rcv_pk_xxx" \
-H "X-Timestamp: $(date +%s)" \
-H "X-Signature: <hmac-sha256-hex>" \
-H "X-Format: canonical" \
-H "Content-Type: application/json" \
-d '{ "file_base64": "<base64 do PDF ou imagem>", "file_name": "receita-12345.pdf", "file_type": "pdf", "buyer_name": "José da Silva", "buyer_cpf": "12345678900", "metadata": { "erp_id": "12345" } }'Resposta 202 Accepted
{
"id": "uuid",
"status": "pending",
"created_at": "2026-06-05T14:30:00Z"
}GET /prescriptions/:id — consultar
curl https://app.receivia.com.br/api/public/v1/prescriptions/<id> \ -H "X-Api-Key: rcv_pk_xxx" \ -H "X-Timestamp: $(date +%s)" \ -H "X-Signature: <hmac>"
Resposta 200
{
"id": "uuid",
"status": "approved",
"patient_name": "Maria",
"analysis": {
"compliance_score": 94,
"has_controlled": true,
"medications": [{ "nome": "Clonazepam 2mg", "classe": "B1" }]
},
"sncr": { "submission_id": "uuid", "status": "accepted", "protocol": "SP-2025-08742" }
}Webhooks
Eventos disponíveis:
- prescription.analyzed
- prescription.approved
- prescription.rejected
- sncr.submitted
- sncr.accepted
- sncr.rejected
- sngpc.generated
Header enviado: X-Lovable-Signature: t=<ts>,v1=<hex(hmac-sha256(secret, ts + "." + body))>
Verificação em Node.js
import { createHmac, timingSafeEqual } from "node:crypto";
export function verify(rawBody, header, secret) {
const [tPart, vPart] = header.split(",");
const t = tPart.split("=")[1];
const v = vPart.split("=")[1];
const expected = createHmac("sha256", secret).update(t + "." + rawBody).digest("hex");
const a = Buffer.from(v); const b = Buffer.from(expected);
return a.length === b.length && timingSafeEqual(a, b);
}Códigos de erro
| HTTP | Código | Significado |
|---|---|---|
| 401 | invalid_signature | HMAC inválido ou timestamp fora da janela |
| 403 | key_revoked | API key revogada ou suspensa |
| 422 | invalid_payload | Schema inválido — ver campo errors |
| 429 | rate_limited | Limite por chave excedido |
| 500 | internal_error | Erro interno — reportar com request_id |
Postman
Coleção pronta para importar: receivia-api.postman.json