Documentação da API

API de NFS-e

Notas Fiscais de Serviço Eletrônicas

6 endpoints · base https://api.comando.one/v1 · autenticação por chave cmd_live_…

GET/nfse

Listar NFS-e

nfse:read

Parâmetros, corpo, resposta e exemplo

Parâmetros

page(query)integerNúmero da página (default: 1)
per_page(query)integerItens por página (default: 20, máx: 100)
status(query)"rascunho" | "transmitindo" | "autorizada" | "rejeitada" | "cancelada"
invoice_id(query)string (uuid)Filtrar por fatura

Resposta 200 — Listagem paginada

idstring (uuid)
invoice_idstring (uuid)
invoice_numberstring | null
numero_nfsestring | null
status"rascunho" | "transmitindo" | "autorizada" | "rejeitada" | "cancelada"
protocolostring | null
chave_acessostring | null
danfse_urlstring | null
artifact_sourcestring | null
cancelada_atstring | null (date-time)
created_atstring (date-time)

Exemplo

curl -X GET "https://api.comando.one/v1/nfse" \
  -H "Authorization: Bearer cmd_live_SUA_CHAVE"
POST/nfse

Emitir NFS-e

Emite uma NFS-e a partir de uma fatura. O método (certificado/portal) vem da configuração da empresa. Pode levar alguns segundos. **Discriminação do serviço (o texto que vai à prefeitura).** Por padrão é o número da fatura seguido, uma linha por item, do `description` de cada item — e, só se o `description` estiver vazio, o `name`. Ou seja: com os dois preenchidos, o `name` é exibição interna e NÃO chega ao documento fiscal. Para controlar o texto, mande `discriminacao` (até 2000 caracteres). Nota autorizada não se edita: errou o texto, é cancelar e reemitir — por isso confira antes. Um 409 de nota anterior só vale para nota `autorizada` ou `transmitindo`; fatura com nota **cancelada** pode ser emitida de novo. **Os itens da fatura NÃO precisam de `service_id`** — item avulso emite normalmente; a classificação fiscal (cTribNac, cNBS, alíquotas) vem da configuração fiscal da empresa e do CNAE padrão, não do item. Códigos: **201** = autorizada ou em transmissão — o `id` devolvido é o mesmo `{id}` de `/v1/nfse/{id}`, `/files`, `/sync` e `/cancel`. **422 com `status: 'rejeitada'`** = o fisco REJEITOU (motivo em `message`) — não existe nota, não afirme ao usuário que foi emitida. **422 sem `status`** = a EMPRESA não está configurada para emitir. **409** = esta fatura já tem nota (o `error` traz o id da existente). **424** = o provedor fiscal falhou; o motivo dele vem em `error`. Retentativa é segura: mande o header `Idempotency-Key` (a mesma resposta volta, com `Idempotent-Replayed: true`), e mesmo sem ele o 409 impede uma segunda nota para a mesma fatura.

nfse:emitir

Parâmetros, corpo, resposta e exemplo

Corpo (JSON)

invoice_idobrigatóriostring (uuid)Fatura a partir da qual emitir a NFS-e
discriminacaostringOpcional. Texto integral da discriminação do serviço (xDescServ) — substitui o montado dos itens. Nota autorizada não se edita (só cancela e reemite), então é aqui que se acerta o texto. Inclua o número da fatura se quiser que ele apareça. Sem o campo: número da fatura + a descrição de cada item.

Resposta 201 — Emissão solicitada

idstring | nullId da NFS-e — use em /v1/nfse/{id}, /files, /sync e /cancel. Mesmo valor de history_id.
invoice_idstring
statusstringautorizada | transmitindo | rejeitada
numero_nfsestring | null
chave_acessostring | null
history_idstring | nullAlias de `id`, mantido por compatibilidade.
messagestring | null

Exemplo

curl -X POST "https://api.comando.one/v1/nfse" \
  -H "Authorization: Bearer cmd_live_SUA_CHAVE" \
  -H "Content-Type: application/json" \
  -d '{"invoice_id":"<string (uuid)>"}'
GET/nfse/{id}

Obter NFS-e

nfse:read

Parâmetros, corpo, resposta e exemplo

Parâmetros

idobrigatório(path)string (uuid)

Resposta 200 — NFS-e com detalhes de cancelamento

idstring (uuid)
invoice_idstring (uuid)
invoice_numberstring | null
numero_nfsestring | null
status"rascunho" | "transmitindo" | "autorizada" | "rejeitada" | "cancelada"
protocolostring | null
chave_acessostring | null
danfse_urlstring | null
artifact_sourcestring | null
cancelada_atstring | null (date-time)
created_atstring (date-time)
cancel_motivointeger | null
cancel_justificativastring | null
cancel_protocolostring | null
updated_atstring (date-time)

Exemplo

curl -X GET "https://api.comando.one/v1/nfse/{id}" \
  -H "Authorization: Bearer cmd_live_SUA_CHAVE"
PATCH/nfse/{id}/cancel

Cancelar NFS-e

nfse:cancelar

Parâmetros, corpo, resposta e exemplo

Parâmetros

idobrigatório(path)string (uuid)

Corpo (JSON)

motivoobrigatório1 | 2 | 3 | 4 | 91=erro na emissão, 2=serviço não prestado, 3=duplicidade de emissão, 4=decisão judicial, 9=outros. Use o código pelo RÓTULO, não pela ordem.
justificativaobrigatóriostring

Resposta 200 — Cancelamento solicitado

idstring
statusstring
cancel_protocolostring | null

Exemplo

curl -X PATCH "https://api.comando.one/v1/nfse/{id}/cancel" \
  -H "Authorization: Bearer cmd_live_SUA_CHAVE" \
  -H "Content-Type: application/json" \
  -d '{"motivo":"<1 | 2 | 3 | 4 | 9>","justificativa":"<string>"}'
GET/nfse/{id}/files

URLs assinadas do XML e DANFSE

Retorna URLs temporárias (30 min). `xml_signed_url` = XML autorizado. `danfse_signed_url` = DANFSe em PDF (gerada sob demanda a partir do XML se ainda não existir). `danfse_html_signed_url` = HTML OFICIAL publicado pelo ADN, quando disponível — é outro documento, não uma versão pior do PDF. `danfse_formato` diz o que veio em `danfse_signed_url` (pdf|html).

nfse:read

Parâmetros, corpo, resposta e exemplo

Parâmetros

idobrigatório(path)string (uuid)

Resposta 200 — URLs assinadas

idstring
invoice_idstring
statusstring
xml_signed_urlstring | null
danfse_signed_urlstring | null
danfse_html_signed_urlstring | nullHTML oficial publicado pelo ADN, quando existir. É outro documento, não uma versão pior do PDF — nulo aqui não se substitui por danfse_signed_url.
danfse_formato"pdf" | "html" | nullO que veio em danfse_signed_url.
signed_url_ttl_secondsinteger

Exemplo

curl -X GET "https://api.comando.one/v1/nfse/{id}/files" \
  -H "Authorization: Bearer cmd_live_SUA_CHAVE"
POST/nfse/{id}/sync

Sincronizar status da NFS-e com o provedor

nfse:read

Parâmetros, corpo, resposta e exemplo

Parâmetros

idobrigatório(path)string (uuid)

Resposta 200 — Resultado da sincronização

idstring
invoice_idstring
processedinteger
updatedinteger
attachedinteger

Exemplo

curl -X POST "https://api.comando.one/v1/nfse/{id}/sync" \
  -H "Authorization: Bearer cmd_live_SUA_CHAVE"

Início rápido, autenticação, SDK, servidor MCP e o playground para testar sem escrever código estão na documentação completa. A especificação em OpenAPI está em api.comando.one/openapi.json.

Outros recursos da API

Ou deixe a IA usar a API por você

O servidor MCP expõe estes mesmos recursos ao ChatGPT, Claude ou Gemini — com OAuth, sem chave de API.

Conectar um assistente