Developers / Documentos Fiscais / CT-e OS
Documentos Fiscais · CT-e OS

Emitir CT-e OS POST

Emite um CT-e OS (Outros Serviços de Transporte, modelo 67) -- documento fiscal separado do CT-e normal (modelo 57), usado quando não há uma NF-e/CT-e de carga por trás, e sim um serviço avulso: transporte de valores, de pessoas, ou excesso de bagagem.

⚠️
tipo_servico "7" (Transporte de Valores) é suportado hoje. "6" (Pessoas) e "8" (Excesso de Bagagem) são rejeitados explicitamente pelo motor (NotSupportedException, não descartado em silêncio) -- só modal rodoviário existe no MVP.
POST https://areacliente.centralfiscal.com.br/v1/cte-os/emissoes

Corpo da requisição

CampoObrigatórioObservação
emitente_documentoSimCNPJ do transportador, já cadastrado.
ide.serie, ide.numero, ide.data_emissao, ide.cfop, ide.natureza_operacaoSim 
ide.tipo_servicoSim"7" funciona hoje.
ide.modalNãoDefault "01" (rodoviário).
tomadorNãoObjeto <PessoaFiscal> (documento/razão social).
valores.valor_prestacaoSim 
valores.componentesNãoDetalha a composição do valor (ex.: custódia, seguro).
impostos.icmsSimGrupo <imp>, sempre ICMS00 (CST fixo "00").
tributos_federaisNãoPIS/COFINS/IR/INSS/CSLL do CT-e OS vivem aqui (grupo infTribFed real), não em impostos.pis/impostos.cofins -- enviar nesses campos é rejeitado com erro explícito (diferente do CT-e normal, onde PIS/COFINS simplesmente não existe no layout).
servico.descricaoSim 
documentos_referenciadosNãoArray de {numero, data_emissao, serie, subserie, valor_documento} -- outros documentos que originaram o serviço.
segurosNãoArray de {responsavel, seguradora, numero_apolice}.
curl -X POST https://areacliente.centralfiscal.com.br/v1/cte-os/emissoes \
  -H "Authorization: Bearer cf_live_51JqK..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: malote-0001" \
  -d '{
    "emitente_documento": "12345678000190",
    "ide": {
      "serie": "1",
      "numero": "4001",
      "data_emissao": "2026-08-07T10:00:00-03:00",
      "cfop": "5352",
      "natureza_operacao": "Prestacao de servico de transporte de valores",
      "tipo_servico": "7"
    },
    "tomador": {"documento": "98765432000110", "razao_social": "Cliente Exemplo Ltda"},
    "valores": {"valor_prestacao": 850, "componentes": [{"nome": "CUSTODIA", "valor": 850}]},
    "impostos": {"icms": {"base_calculo": 850, "aliquota": 12, "valor": 102}},
    "servico": {"descricao": "Transporte de valores", "quantidade": 1},
    "seguros": [{"responsavel": "4", "seguradora": "Seguradora Exemplo S.A.", "numero_apolice": "APOLICE-4001"}]
  }'

Fluxo da operação

POST /v1/cte-os/emissoes
Motor monta, assina e transmite pra SEFAZ da UF
200 OK · resultado final (mesma chamada)
💡
Síncrono, mesmo padrão de NF-e/CT-e/MDF-e/NFS-e -- resposta já vem com status final (AUTHORIZED/REJECTED/ERROR/PROCESSING).

Resposta

{
  "ambiente": "HOMOLOGATION",
  "documento": "CTEOS",
  "transmissao_id": "c9a0b1d2-3e4f-4a5b-8c6d-7e8f9a0b1c2d",
  "idempotencia": "viagem-0001",
  "id_externo": null,
  "status": "AUTHORIZED",
  "operacao": "ISSUE",
  "chave": "43260812345678000190670010000040011000040015",
  "numero_documento": "4001",
  "serie": "1",
  "protocolo": "143260000123456",
  "mensagem": "Autorizado o uso do CT-e OS",
  "criada_em": "2026-08-07T10:30:01-03:00",
  "concluida_em": "2026-08-07T10:30:03-03:00",
  "xml": {
    "disponivel": true,
    "status": "CTEOS_AUTORIZADA",
    "gerado": true,
    "assinado": true,
    "assinado_em": "2026-08-07T10:30:02-03:00",
    "etapa": "SEFAZ_AUTORIZADA",
    "validacao": null
  },
  "retorno_amigavel": {"codigo": "CTEOS_AUTORIZADO", "mensagem": "Autorizado o uso do CT-e OS"},
  "detalhes": {
    "estado_motor": "AUTORIZADA",
    "cstat": "100",
    "xmotivo": "Autorizado o uso do CT-e OS"
  }
}

Cancelamento

⚠️
Não existe POST /v1/cte-os/cancelamentos hoje -- diferente de NF-e/CT-e/MDF-e/NFS-e, o CT-e OS ainda não tem endpoint de cancelamento na API pública. O campo chave_cte_cancelado no corpo de emissão serve pra outra coisa (referenciar um CT-e OS anterior sendo substituído por esta nova emissão), não é um cancelamento.