curl -X POST https://{loja}.com.br/api/hunter/v1/pedidos/PED-000123/processado \
-H "Content-Type: application/json" \
-H "X-API-Key: hk_..." \
-d '{
"nota_fiscal": {
"numero": "000000123",
"serie": "1",
"chave_acesso": "35240712345678000199550010000001231234567890",
"data_emissao": "2026-07-13T10:15:00Z",
"url_danfe": "https://storage.exemplo.com/danfe/xyz.pdf"
}
}'
const res = await fetch(
`${BASE_URL}/pedidos/${codigo}/processado`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": process.env.API_KEY,
},
body: JSON.stringify({
nota_fiscal: {
numero: nfe.numero,
serie: nfe.serie,
chave_acesso: nfe.chave,
data_emissao: nfe.emitidaEm.toISOString(),
url_danfe: nfe.pdfUrl,
},
}),
}
);
{
"success": true,
"data": {
"pedido": {
"codigo": "PED-000123",
"status": "em_separacao",
"processado_em": "2026-07-13T10:15:03Z"
},
"nota_fiscal": {
"id": "b9810ec1-7920-4c33-a7f7-9d5ffa66f1e0",
"numero": "000000123",
"serie": "1"
}
}
}
{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Pedido com código 'PED-INEXISTENTE' não encontrado."
}
}
{
"success": false,
"error": {
"code": "CONFLICT",
"message": "Pedido 'PED-000123' já processado pelo sistema integrado em 2026-07-13 10:15:03+00."
}
}
{
"success": false,
"error": {
"code": "CONFLICT",
"message": "Pedido 'PED-000123' está em status 'cancelado' — não pode ser processado (esperado: pagamento_aprovado)."
}
}
{
"success": false,
"error": {
"code": "CONFLICT",
"message": "Chave de acesso '35240712345678000199550010000001231234567890' já registrada em outro pedido."
}
}
Pedidos
Confirmar processamento (NF emitida)
Confirma que o pedido teve estoque baixado + NF emitida. Idempotência ESTRITA — segunda chamada retorna 409.
POST
/
api
/
hunter
/
v1
/
pedidos
/
{codigo}
/
processado
curl -X POST https://{loja}.com.br/api/hunter/v1/pedidos/PED-000123/processado \
-H "Content-Type: application/json" \
-H "X-API-Key: hk_..." \
-d '{
"nota_fiscal": {
"numero": "000000123",
"serie": "1",
"chave_acesso": "35240712345678000199550010000001231234567890",
"data_emissao": "2026-07-13T10:15:00Z",
"url_danfe": "https://storage.exemplo.com/danfe/xyz.pdf"
}
}'
const res = await fetch(
`${BASE_URL}/pedidos/${codigo}/processado`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": process.env.API_KEY,
},
body: JSON.stringify({
nota_fiscal: {
numero: nfe.numero,
serie: nfe.serie,
chave_acesso: nfe.chave,
data_emissao: nfe.emitidaEm.toISOString(),
url_danfe: nfe.pdfUrl,
},
}),
}
);
{
"success": true,
"data": {
"pedido": {
"codigo": "PED-000123",
"status": "em_separacao",
"processado_em": "2026-07-13T10:15:03Z"
},
"nota_fiscal": {
"id": "b9810ec1-7920-4c33-a7f7-9d5ffa66f1e0",
"numero": "000000123",
"serie": "1"
}
}
}
{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Pedido com código 'PED-INEXISTENTE' não encontrado."
}
}
{
"success": false,
"error": {
"code": "CONFLICT",
"message": "Pedido 'PED-000123' já processado pelo sistema integrado em 2026-07-13 10:15:03+00."
}
}
{
"success": false,
"error": {
"code": "CONFLICT",
"message": "Pedido 'PED-000123' está em status 'cancelado' — não pode ser processado (esperado: pagamento_aprovado)."
}
}
{
"success": false,
"error": {
"code": "CONFLICT",
"message": "Chave de acesso '35240712345678000199550010000001231234567890' já registrada em outro pedido."
}
}
Comportamento
Chame após emitir a nota fiscal do pedido. Este endpoint:- Cria registro em
notas_fiscaiscom os dados da NF - Transiciona pedido:
pagamento_aprovado → em_separacao - Marca
hunter_processado_em = NOW()no pedido - Registra evento no histórico com motivo
processado_pelo_hunter
Idempotência ESTRITA: este endpoint rejeita segunda chamada no mesmo pedido (
HTTP 409). Diferente de /rastreio que aceita sobrescrita, a NF é evento irreversível — se você tenta reenviar por retry após timeout, use o hunter_processado_em no GET /pedidos pra descobrir que já foi processado.Path param
string
required
Código do pedido (ex:
PED-000123), obtido no GET /pedidos.Payload
object
required
Show nota_fiscal
Show nota_fiscal
string
required
Número da NF-e. 1–50 caracteres.
string
required
Série da NF-e. 1–20 caracteres.
string
required
Exatamente 44 dígitos numéricos. Constraint UNIQUE — se já existir em outro pedido, retorna
409 CONFLICT.string (ISO 8601 UTC)
required
Ex:
"2026-07-13T10:15:00Z".string (URL)
Opcional. Link pro PDF da DANFE hospedado no lado do integrador ou storage.
curl -X POST https://{loja}.com.br/api/hunter/v1/pedidos/PED-000123/processado \
-H "Content-Type: application/json" \
-H "X-API-Key: hk_..." \
-d '{
"nota_fiscal": {
"numero": "000000123",
"serie": "1",
"chave_acesso": "35240712345678000199550010000001231234567890",
"data_emissao": "2026-07-13T10:15:00Z",
"url_danfe": "https://storage.exemplo.com/danfe/xyz.pdf"
}
}'
const res = await fetch(
`${BASE_URL}/pedidos/${codigo}/processado`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": process.env.API_KEY,
},
body: JSON.stringify({
nota_fiscal: {
numero: nfe.numero,
serie: nfe.serie,
chave_acesso: nfe.chave,
data_emissao: nfe.emitidaEm.toISOString(),
url_danfe: nfe.pdfUrl,
},
}),
}
);
{
"success": true,
"data": {
"pedido": {
"codigo": "PED-000123",
"status": "em_separacao",
"processado_em": "2026-07-13T10:15:03Z"
},
"nota_fiscal": {
"id": "b9810ec1-7920-4c33-a7f7-9d5ffa66f1e0",
"numero": "000000123",
"serie": "1"
}
}
}
{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Pedido com código 'PED-INEXISTENTE' não encontrado."
}
}
{
"success": false,
"error": {
"code": "CONFLICT",
"message": "Pedido 'PED-000123' já processado pelo sistema integrado em 2026-07-13 10:15:03+00."
}
}
{
"success": false,
"error": {
"code": "CONFLICT",
"message": "Pedido 'PED-000123' está em status 'cancelado' — não pode ser processado (esperado: pagamento_aprovado)."
}
}
{
"success": false,
"error": {
"code": "CONFLICT",
"message": "Chave de acesso '35240712345678000199550010000001231234567890' já registrada em outro pedido."
}
}
Erros
| Status | Code | Situação |
|---|---|---|
404 | NOT_FOUND | Pedido com esse código não existe |
409 | CONFLICT | Pedido em status diferente de pagamento_aprovado |
409 | CONFLICT | Pedido já processado (hunter_processado_em != null) |
409 | CONFLICT | chave_acesso já registrada em outro pedido |
400 | VALIDATION | Payload inválido (chave_acesso ≠ 44 dígitos, data_emissao mal-formada, etc) |
Recuperação de falhas
1
Timeout ou 5xx durante a chamada
Não reenvie cegamente. Faça
GET /pedidos?updated_since=... e cheque se o pedido veio com hunter_processado_em != null. Se sim, já foi processado; siga em frente. Se não, reenvie.2
409 já processado após retry
Log como aviso (não erro). O pedido foi processado num retry anterior que você não confirmou.
3
409 chave duplicada
Investigar antes de qualquer ação. Provavelmente confusão de chave_acesso — não emitir a mesma NF pra 2 pedidos.