Pular para o conteúdo

Exemplos em cURL

Setup

Terminal window
export MYSE_API_BASE="https://api.mysebr.com.br/nfemyse-v3/rest"
export MYSE_API_TOKEN="seu_token_aqui"

Health check

Terminal window
curl -i "$MYSE_API_BASE/health"

Emitir NFCe e aguardar resultado (polling)

#!/bin/bash
set -euo pipefail
BASE="$MYSE_API_BASE"
TOKEN="$MYSE_API_TOKEN"
# 1. Emitir
RESP=$(curl -sS -X POST "$BASE/nfce/emissao" \
-H "Authorization: Token $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"serie": "65",
"cfop": "5102",
"numero-origem": "VENDA-'$(date +%s)'",
"tp_pagamento": "dinheiro",
"itens": [
{ "produto": "SKU-001", "quantidade": "1", "valor-unitario": "10.00" }
]
}')
echo "Resposta emissão: $RESP"
STATUS=$(echo "$RESP" | jq -r .status)
RECIBO=$(echo "$RESP" | jq -r .data.recibo)
REQ_ID=$(echo "$RESP" | jq -r .meta.request_id)
if [ "$STATUS" != "001" ] && [ "$STATUS" != "050" ]; then
echo "Erro na emissão (request_id=$REQ_ID): $RESP" >&2
exit 1
fi
echo "Recibo: $RECIBO (request_id=$REQ_ID)"
# 2. Polling
WAIT=5
TERM_REGEX='^(004|010|900|999)$'
for i in $(seq 1 30); do
sleep $WAIT
RESP=$(curl -sS "$BASE/nfce/cupom/$RECIBO" \
-H "Authorization: Token $TOKEN")
STATUS=$(echo "$RESP" | jq -r .status)
echo "[$i] status=$STATUS"
if [[ $STATUS =~ $TERM_REGEX ]]; then
echo "Status terminal: $STATUS"
echo "$RESP" | jq .
exit 0
fi
# Backoff até 30s
WAIT=$(echo "$WAIT * 1.5" | bc | awk '{ printf "%d", $1 < 30 ? $1 : 30 }')
done
echo "Timeout aguardando recibo $RECIBO" >&2
exit 1

Listar NFes com paginação

Terminal window
PAGE=1
SIZE=20
while :; do
RESP=$(curl -sS "$MYSE_API_BASE/nfe?page=$PAGE&page_size=$SIZE" \
-H "Authorization: Token $MYSE_API_TOKEN")
STATUS=$(echo "$RESP" | jq -r .status)
[ "$STATUS" != "005" ] && { echo "Erro: $RESP"; break; }
COUNT=$(echo "$RESP" | jq '.data | length')
echo "Página $PAGE: $COUNT registros"
echo "$RESP" | jq -c '.data[]'
[ "$COUNT" -lt "$SIZE" ] && break
PAGE=$((PAGE + 1))
done

Helper de polling reutilizável

Terminal window
# Função genérica: aguarda recibo até status terminal.
# Uso: aguardar_recibo /nfe/nota $RECIBO
aguardar_recibo() {
local PATH_BASE="$1"
local RECIBO="$2"
local TERM_REGEX='^(004|010|900|999)$'
local WAIT=5
for i in $(seq 1 30); do
sleep $WAIT
RESP=$(curl -sS "$MYSE_API_BASE${PATH_BASE}/$RECIBO" \
-H "Authorization: Token $MYSE_API_TOKEN")
STATUS=$(echo "$RESP" | jq -r .status)
echo "[$i] status=$STATUS"
if [[ $STATUS =~ $TERM_REGEX ]]; then
echo "$RESP"
return 0
fi
WAIT=$(echo "$WAIT * 1.5" | bc | awk '{ printf "%d", $1 < 30 ? $1 : 30 }')
done
echo "Timeout aguardando recibo $RECIBO" >&2
return 1
}

Emitir NF-e (com transporte completo)

Terminal window
RESP=$(curl -sS -X POST "$MYSE_API_BASE/nfe/emissao" \
-H "Authorization: Token $MYSE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"serie": "1",
"cfop": "5102",
"numero-origem": "PED-'$(date +%s)'",
"tipo": "S",
"finalidade": "N",
"valor-despesas": "0.00",
"cliente": "12345678000199",
"transporte": {
"modalidade": "0",
"transportadora": "98765432000111",
"placa-veiculo": "ABC-1D23",
"valor-frete": "150.00",
"valor-seguro": "0.00",
"peso-bruto": "5.5",
"peso-liquido": "5.0",
"quantidade-volume": "1",
"especie-volume": "Caixa",
"marca-volume": "Embalagem padrao"
},
"itens": [
{ "produto": "SKU-001", "quantidade": "2", "valor-unitario": "89.90" }
],
"faturas": [
{ "valor": "179.80", "data": "2026-06-15" }
]
}')
RECIBO=$(echo "$RESP" | jq -r .data.recibo)
echo "Recibo NF-e: $RECIBO"
aguardar_recibo /nfe/nota "$RECIBO"

Cancelar NF-e

Terminal window
RESP=$(curl -sS -X POST "$MYSE_API_BASE/nfe/cancelamento" \
-H "Authorization: Token $MYSE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"chave": "35260512345678000199550010000000011000000010",
"motivo": "Cancelamento solicitado pelo cliente — pedido refeito."
}')
RECIBO=$(echo "$RESP" | jq -r .data.recibo)
aguardar_recibo /nfe/cancelamento "$RECIBO"

Lançar carta de correção (CC-e)

Terminal window
RESP=$(curl -sS -X POST "$MYSE_API_BASE/nfe/correcao" \
-H "Authorization: Token $MYSE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"chave": "35260512345678000199550010000000011000000010",
"motivo": "Correcao da descricao do item 3 — modelo correto: XYZ-2."
}')
RECIBO=$(echo "$RESP" | jq -r .data.recibo)
aguardar_recibo /nfe/correcao "$RECIBO"

Cancelar NFC-e

Terminal window
RESP=$(curl -sS -X POST "$MYSE_API_BASE/nfce/cancelamento" \
-H "Authorization: Token $MYSE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"chave": "35260512345678000199650010000000011000000010",
"motivo": "Cancelamento de cupom solicitado pelo cliente."
}')
RECIBO=$(echo "$RESP" | jq -r .data.recibo)
aguardar_recibo /nfce/cancelamento "$RECIBO"

Emitir NFS-e (Nota Fiscal de Serviço)

Terminal window
RESP=$(curl -sS -X POST "$MYSE_API_BASE/nfse/emissao" \
-H "Authorization: Token $MYSE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"numero-origem": "OS-'$(date +%s)'",
"observacao": "Servico de consultoria realizado em maio/2026.",
"nome-contato": "Joao Silva",
"telefone-contato": "11987654321",
"data-fim": "2026-05-31",
"cliente": "12345678000199",
"itens": [
{ "produto": "SRV-CONSULT", "quantidade": "10", "valor-unitario": "250.00" }
]
}')
RECIBO=$(echo "$RESP" | jq -r .data.recibo)
aguardar_recibo /nfse/nota "$RECIBO"

Cancelar NFS-e

Terminal window
curl -sS -X POST "$MYSE_API_BASE/nfse/cancelamento" \
-H "Authorization: Token $MYSE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"chave": "chave_nfse_aqui",
"motivo": "Cancelamento solicitado pelo tomador — servico nao realizado."
}'

Reconhecer nota de fornecedor (MD-e)

Terminal window
# Códigos:
# 210200 — Confirmação da operação (terminal, irreversível)
# 210210 — Ciência da operação (provisório, 15 dias)
# 210220 — Desconhecimento da operação
# 210240 — Operação não realizada
RESP=$(curl -sS -X POST "$MYSE_API_BASE/nffornecedor/reconhecimento" \
-H "Authorization: Token $MYSE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"chave": "35260512345678000199550010000000011000000010",
"codigo-reconhecimento": "210200"
}')
RECIBO=$(echo "$RESP" | jq -r .data.recibo)
echo "Recibo MD-e: $RECIBO"
# Consultar resultado:
curl -sS "$MYSE_API_BASE/nffornecedor/$RECIBO" \
-H "Authorization: Token $MYSE_API_TOKEN" | jq .

Capturar headers de rate limit

Terminal window
curl -sS -D - "$MYSE_API_BASE/nfe?page=1&page_size=1" \
-H "Authorization: Token $MYSE_API_TOKEN" \
-o /dev/null \
| grep -i -E "x-request-id|x-ratelimit"

Saída esperada:

X-Request-Id: req_01HXY8ZG3J4K5M6N7P8Q9R0S1T
X-RateLimit-Limit: 150000
X-RateLimit-Remaining: 149873
X-RateLimit-Reset: 1715600000

Tratamento de erro em shell

Terminal window
call_api() {
local METHOD="$1"
local PATH="$2"
local BODY="${3:-}"
local CURL_ARGS=(-sS -X "$METHOD"
-H "Authorization: Token $MYSE_API_TOKEN"
-H "Content-Type: application/json"
-D /tmp/myse-headers.txt)
[ -n "$BODY" ] && CURL_ARGS+=(-d "$BODY")
RESP=$(curl "${CURL_ARGS[@]}" "$MYSE_API_BASE$PATH")
REQ_ID=$(grep -i "x-request-id:" /tmp/myse-headers.txt | awk '{print $2}' | tr -d '\r\n')
STATUS=$(echo "$RESP" | jq -r .status)
case "$STATUS" in
001|002|003|004|005|010)
echo "$RESP"
;;
050)
echo "Duplicidade (use recibo retornado): $RESP" >&2
echo "$RESP"
;;
900)
echo "Rejeição SEFAZ (request_id=$REQ_ID): $RESP" >&2
exit 2
;;
999)
echo "Erro interno (request_id=$REQ_ID): $RESP" >&2
exit 3
;;
*)
echo "Status desconhecido $STATUS (request_id=$REQ_ID): $RESP" >&2
exit 99
;;
esac
}

Health check (sem autenticação)

Terminal window
curl -i "$MYSE_API_BASE/health"
# HTTP/1.1 200 OK
# {"status":"ok","database":"ok","timestamp":"2026-05-13T14:32:01Z"}

Alterar nota antes da emissão (PUT)

Disponível em NF-e (/nfe/{id}), NFC-e (/nfce/{id}) e NFS-e (/nfse/{id}). Só funciona enquanto a nota ainda não foi submetida para emissão.

Terminal window
# Substitua o caminho e o ID conforme o documento
curl -X PUT "$MYSE_API_BASE/nfe/12345" \
-H "Authorization: Token $MYSE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"serie": "1",
"cfop": "5102",
"cliente": "12345678000199",
"itens": [
{ "produto": "SKU-001", "quantidade": "3", "valor-unitario": "89.90" }
]
}'

Consulta detalhada (NF-e/NFC-e completa por recibo)

Diferente do polling rápido (/nota/{recibo}), retorna todos os dados: itens, cliente, transporte, faturas, notas referenciadas, dados SEFAZ.

Terminal window
# NF-e completa
curl "$MYSE_API_BASE/nfe/nota/$RECIBO/completa" \
-H "Authorization: Token $MYSE_API_TOKEN" | jq .
# NFC-e completa
curl "$MYSE_API_BASE/nfce/cupom/$RECIBO/completa" \
-H "Authorization: Token $MYSE_API_TOKEN" | jq .

Listagens (paginação)

Terminal window
# NF-es paginadas
curl "$MYSE_API_BASE/nfe?page=1&page_size=20" \
-H "Authorization: Token $MYSE_API_TOKEN"
# NFC-es
curl "$MYSE_API_BASE/nfce?page=1&page_size=50" \
-H "Authorization: Token $MYSE_API_TOKEN"
# NFS-es com filtro de data (ISO YYYY-MM-DD)
curl "$MYSE_API_BASE/nfse?dataInicial=2026-05-01&page=1&page_size=20" \
-H "Authorization: Token $MYSE_API_TOKEN"
# Notas de fornecedor
curl "$MYSE_API_BASE/nffornecedor?page=1&page_size=20" \
-H "Authorization: Token $MYSE_API_TOKEN"
# Forma legada (path-based) — mantida por compatibilidade
curl "$MYSE_API_BASE/nfe/paginacao/1/20" \
-H "Authorization: Token $MYSE_API_TOKEN"

Clientes (CRUD completo)

Terminal window
# Cadastrar pessoa física
curl -X POST "$MYSE_API_BASE/clientes" \
-H "Authorization: Token $MYSE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"tipo": "F",
"nome": "Joao da Silva",
"cpf": "12345678901",
"rg": "MG1234567",
"consumidor-final": "1",
"contato": { "email": "[email protected]", "telefone": "11987654321" },
"endereco": {
"cep": "01310100", "rua": "Av. Paulista", "numero": "1000",
"bairro": "Bela Vista", "cidade": "Sao Paulo", "estado": "SP"
}
}'
# Cadastrar pessoa jurídica
curl -X POST "$MYSE_API_BASE/clientes" \
-H "Authorization: Token $MYSE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"tipo": "J",
"razao-social": "Empresa Exemplo Ltda",
"nome-fantasia": "Empresa Exemplo",
"cnpj": "12345678000199",
"inscricao-municipal": "1234567",
"tipo-inscricao-estadual": "1",
"inscricao-estadual": "123456789",
"consumidor-final": "0",
"contato": { "email": "[email protected]", "telefone": "1133334444" },
"endereco": {
"cep": "01310100", "rua": "Av. Paulista", "numero": "1000",
"bairro": "Bela Vista", "cidade": "Sao Paulo", "estado": "SP"
}
}'
# Consultar por CPF (11 dígitos) ou CNPJ (14 dígitos)
curl "$MYSE_API_BASE/clientes/12345678000199" \
-H "Authorization: Token $MYSE_API_TOKEN"
# Buscar por nome (parcial)
curl "$MYSE_API_BASE/clientes/busca/exemplo" \
-H "Authorization: Token $MYSE_API_TOKEN"
# Top 20 clientes mais relevantes da empresa
curl "$MYSE_API_BASE/clientes/busca/top_clientes" \
-H "Authorization: Token $MYSE_API_TOKEN"
# Atualizar
curl -X PUT "$MYSE_API_BASE/clientes/12345678000199" \
-H "Authorization: Token $MYSE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "tipo": "J", "razao-social": "Empresa Exemplo (Novo Nome) Ltda" }'
# Excluir
curl -X DELETE "$MYSE_API_BASE/clientes/12345678000199" \
-H "Authorization: Token $MYSE_API_TOKEN"

Produtos (CRUD completo)

Terminal window
# Cadastrar produto (com configuração fiscal por CFOP/estado)
curl -X POST "$MYSE_API_BASE/produtos" \
-H "Authorization: Token $MYSE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"referencia": "SKU-001",
"nome": "Camiseta Polo Tamanho M",
"valor": "89.90",
"medida": "UN",
"categoria": "Vestuario",
"ncm": "61051000",
"origem": "0",
"cfop-preferencial": "5102",
"tipo-produto": "P",
"configuracoes-fiscais": [{
"cfop": "5102",
"configuracoes": {
"ipi": { "ipi-cst": "53", "ipi-aliquota": "0.00" },
"pis-cofins": {
"pis-cst": "01", "pis-aliquota": "1.65",
"cofins-cst": "01", "cofins-aliquota": "7.60"
},
"icms": {
"estados": [{
"estado": "SP",
"icms-cst": "00",
"modalidade-base-calculo": "0",
"aliquotas": { "aliquota-icms": "18.00" }
}]
}
}
}]
}'
# Cadastrar serviço (tipo S, com código de serviço municipal)
curl -X POST "$MYSE_API_BASE/produtos" \
-H "Authorization: Token $MYSE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"referencia": "SRV-CONSULT",
"nome": "Consultoria tecnica (hora)",
"valor": "250.00",
"medida": "H",
"tipo-produto": "S",
"codigo-servico": "1.04"
}'
# Consultar por referência
curl "$MYSE_API_BASE/produtos/SKU-001" \
-H "Authorization: Token $MYSE_API_TOKEN"
# Buscar por nome (1º resultado)
curl "$MYSE_API_BASE/produtos/nome/Camiseta" \
-H "Authorization: Token $MYSE_API_TOKEN"
# Listar paginado com busca por nome (legado)
# Use _todos para não filtrar
curl "$MYSE_API_BASE/produtos/paginacao/1/20/_todos" \
-H "Authorization: Token $MYSE_API_TOKEN"
curl "$MYSE_API_BASE/produtos/paginacao/1/20/Camiseta" \
-H "Authorization: Token $MYSE_API_TOKEN"
# Atualizar
curl -X PUT "$MYSE_API_BASE/produtos/SKU-001" \
-H "Authorization: Token $MYSE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "referencia": "SKU-001", "nome": "Camiseta Polo M (Novo)", "valor": "99.90" }'
# Excluir
curl -X DELETE "$MYSE_API_BASE/produtos/SKU-001" \
-H "Authorization: Token $MYSE_API_TOKEN"