ctesarrayObligatorioCada elemento es la clave (string) o un objeto con chave y los campos opcionales.
minItems1Parámetros, estructura de datos y respuestas del contrato versionado.
/fiscal/cte-subcontratacao/loteLas descripciones técnicas se traducen del contrato versionado. Se conservan los identificadores y el JSON originales; se omiten los ejemplos de datos.
Emite varios contra-CT-e en una llamada y devuelve un batch_id. La emisión se ejecuta en segundo plano; el resultado por clave está disponible en GET /fiscal/cte-subcontratacao/lote/{batch_id}. Cada CT-e del contratante debe haberse recibido previamente mediante POST /fiscal/cte-subcontratacao.
ctes[] contiene las claves; el conductor (motorista.cpf) y el vehículo (placa) son los mismos para todo el lote.ctes[].pernas[] describe cada segmento con origen/destino propios. Cada tramo puede tener conductor, vehículo e importe propios (el motorista/placa del lote son los valores predeterminados cuando el tramo no los informa). No mezcles claves con y sin pernas en un mismo lote.ctes[].valor (o pernas[].valor) congela el importe de cada contra-CT-e; los importes fiscales (vTPrest/vRec) y la transferencia al conductor se obtienen de ese valor, sin redondeo.valores.frete_bruto del lote distribuye total ÷ N en céntimos, asignando el remanente a las últimas claves de la secuencia; la suma es exacta.Informar ambos devuelve 422.
Por defecto, el contra-CT-e hereda origen → destino del contratante. origem/destino en el lote (o por clave/tramo) declaran la ruta REAL del tramo, que determina CFOP e ICMS: origen en el estado del emisor → 5360 (mismo estado) / 6360 (otro estado); origen fuera del estado del emisor → 5932 (inicio y fin en el mismo estado) / 6932. Con una regla tributaria del tipo de servicio (tp_serv en la regla), se conserva el CFOP de la regla cuando el servicio empieza en el estado del emisor; 5932/6932 sigue siendo obligatorio cuando empieza en otro estado. Se validan los pares municipio/estado; debe existir una regla tributaria aplicable a la ruta y al tipo de servicio (GET /fiscal/regras-tributacao).
tipo_servico es el ide/tpServ de cada contra-CT-e, con precedencia tramo → clave → lote → 1 (subcontratación). Solo se admiten 1 subcontratación, 2 redespacho y 3 redespacho intermedio. En redespacho, la ruta es el tramo realizado por la subcontratada, no todo el viaje del contratante: 2 y 3 requieren origem y destino (en la clave, el lote o el tramo; 422 si faltan). Un "tramo" igual a todo el viaje del CT-e del contratante se rechaza en la fila con redespacho_exige_rota. Un CT-e del contratante vinculado al transporte multimodal (tpServ 4) no admite contra-CT-e (origem_incompativel_com_tipo; en la bandeja, allows_counter_cte: false). La fila del resultado devuelve el tipo_servico con el que se emitió el documento (en una fila duplicated, el tipo solicitado; el tipo del contra-CT-e existente se consulta en GET /fiscal/cte/{counter_cte_id}, campo service_type).
repasse.parcelas es la regla de cuotas del lote (posiciones 1..3, porcentajes que suman 100, dias de 0 a 30) y prevalece sobre la regla registrada del conductor. Los contra-CT-e de un mismo conductor en el lote forman un grupo:
El grupo se determina por la posición en el lote, no por el importe: con valores distintos, el orden de las claves define cuánto corresponde a cada cuota. La cuota solo existe después del escaneo del documento; consúltala en GET /carriers/parcelas-repasse/{documento} (acepta counter_cte_id).
Una clave con contra-CT-e integral activo no acepta tramos (origem_ja_subcontratada_1a1), y viceversa (origem_ja_subcontratada_em_pernas); cancelar el contra-CT-e habilita el otro modo. Una clave ya subcontratada en el mismo modo devuelve duplicated con el counter_cte_id existente, por lo que es seguro reenviar el lote. Un CT-e emitido por tu propia empresa devuelve cte_proprio; una ruta sin regla, sem_regra_tributacao; un tramo de redespacho igual a todo el viaje, redespacho_exige_rota; un origen vinculado al transporte multimodal, origem_incompativel_com_tipo. Un origen cuya transferencia ya se pagó no puede convertirse en tramos.
Cancelar un contra-CT-e (POST /fiscal/cte/{cte_uuid}/eventos/cancelamento) cancela las cuotas aún no pagadas y retira el documento del grupo; el CT-e del contratante sigue siendo válido.
[
{
"oauth2": []
},
{
"chaveApi": []
}
]No hay parámetros declarados para esta operación.
Obligatorio
application/jsonctesarrayObligatorioCada elemento es la clave (string) o un objeto con chave y los campos opcionales.
minItems1motoristaobjectObligatorioplacastringObligatoriopattern"^[A-Za-z]{3}[0-9][A-Za-z0-9][0-9]{2}$"valoresobjectOpcionalorigemobjectOpcionaldestinoobjectOpcionaltipo_servicointeger | nullOpcionalide/tpServ de los contra-CT-e del lote: 1 subcontratación (predeterminado), 2 redespacho, 3 redespacho intermedio. Puede sobrescribirse por clave (ctes[].tipo_servico) y por tramo (pernas[].tipo_servico). En 2/3, el recorrido (origem y destino) es obligatorio.
1 · 2 · 3 · nullrepasseobjectOpcionalOpcional. Sin este bloque, el lote es solo fiscal: emite los contra-CT-e sin crear un grupo de transferencias, una cuota ni un ROUTE de tramo, y sin neutralizar la transferencia del documento de origen; las filas emitidas devuelven financeiro: "nenhum". Con el bloque, el CT-e de origen, en la cuenta de la contratante, se incorpora a su grupo de transferencias con estas cuotas y el conductor del lote: quien paga al conductor es la contratante y la subcontratada nunca recibe un documento financiero. El servicio de pagos envía el dinero a la cuenta del conductor persona física o a la Cuenta Operativa de su transportista persona jurídica. Requiere la adhesión de la contratante; sin ella, la fila devuelve financeiro: "nenhum" con motivo: contratante_sem_opt_in.
referencia_externastring | nullOpcionalTu identificador, devuelto en external_reference.
maxLength64subcontratadaobjectOpcionalEn nombre de la subcontratada. La CONTRATANTE realiza la llamada con su propia clave de API y el lote se crea en la cuenta de la subcontratada de este CNPJ, utilizando su certificado, numeración, bandeja fiscal, conductor y vehículo. Requiere la autorización concedida por la subcontratada mediante POST /fiscal/cte-subcontratacao/autorizacoes; sin ella, devuelve 403 emissao_nao_autorizada; un CNPJ que no es cliente devuelve 404 subcontratada_nao_encontrada. Se acepta el propio CNPJ sin modificar el comportamiento. Con repasse, la adhesión de la contratante es implícita: ella misma solicitó la emisión.
202 Respuesta HTTPLote aceptado; la emisión se ejecuta en segundo plano.
application/jsondataobjectObligatorioenvironmentobjectOpcionalX-Request-IdIdentificador de correlación de la llamada.
401 Respuesta HTTPClave de API FleetPay ausente o no válida.
X-Request-IdIdentificador de correlación de la llamada.
403 Respuesta HTTPÁmbito fiscal deshabilitado en la clave, o clave sin transportista activo.
X-Request-IdIdentificador de correlación de la llamada.
422 Respuesta HTTPValidación del payload (error.details.fields) o regla de negocio antes de crear el lote: motorista_nao_encontrado, veiculo_nao_encontrado. En tramos, message identifica el tramo (ctes.0.pernas.2).
429 Respuesta HTTPLímite por transportista excedido.
X-Request-IdIdentificador de correlación de la llamada.
Retry-AfterSegundos hasta un nuevo intento.
500 Respuesta HTTPFallo interno sin detalles de las integraciones operativas.
X-Request-IdIdentificador de correlación de la llamada.
{
"tags": [
"CT-e de subcontratação"
],
"summary": "Emitir contra-CT-e em lote (1:1 ou em pernas)",
"operationId": "createContraCteBatch",
"description": "Emite **vários contra-CT-e numa chamada** e devolve um `batch_id`; a emissão roda em\nsegundo plano e o resultado por chave sai em `GET /fiscal/cte-subcontratacao/lote/{batch_id}`.\nCada CT-e da contratante precisa ter chegado antes por `POST /fiscal/cte-subcontratacao`.\n\n## Dois desenhos, um endpoint\n\n- **1:1** — um contra-CT-e integral por CT-e da contratante. `ctes[]` traz as chaves; o\n motorista (`motorista.cpf`) e o veículo (`placa`) são os mesmos para o lote inteiro.\n- **Pernas** — um CT-e da contratante subcontratado em **trechos**: `ctes[].pernas[]`\n descreve cada trecho com origem/destino próprios, e cada perna pode ter motorista,\n veículo e valor próprios (o `motorista`/`placa` do lote são o padrão das pernas que não\n informam os seus). Não misture chaves com e sem `pernas` no mesmo lote.\n\n## Valor: por chave OU rateio — nunca os dois\n\n- `ctes[].valor` (ou `pernas[].valor`) congela o valor de **cada** contra-CT-e; o fiscal\n (`vTPrest`/`vRec`) e o repasse ao motorista saem desse valor, sem arredondar.\n- `valores.frete_bruto` no lote rateia `total ÷ N` em centavos, com o resíduo nas\n **últimas** chaves da sequência; a soma fecha exata.\n\nInformar os dois responde `422`.\n\n## Rota do trecho\n\nPor padrão o contra-CT-e herda origem → destino da contratante. `origem`/`destino` no lote\n(ou por chave/perna) declaram a rota REAL do trecho — e é dela que saem CFOP e ICMS:\norigem na UF do emitente → `5360` (mesma UF) / `6360` (outra UF); origem fora da UF do\nemitente → `5932` (início e fim na mesma UF) / `6932`. Com regra de tributação **do tipo\nde serviço** (`tp_serv` na regra), o CFOP da regra é mantido quando a prestação começa na\nUF do emitente; o `5932`/`6932` continua imposto quando começa em outra UF. Os pares\nmunicípio × UF são validados; precisa existir regra de tributação aplicável à rota e ao\ntipo (`GET /fiscal/regras-tributacao`).\n\n## Tipo de serviço\n\n`tipo_servico` é o `ide/tpServ` de cada contra-CT-e, com precedência **perna → chave →\nlote → `1`** (subcontratação). Só `1` subcontratação, `2` redespacho e `3` redespacho\nintermediário. No redespacho a rota é o **trecho** que a subcontratada executa, não a\nviagem da contratante: `2` e `3` exigem `origem` e `destino` (na chave, no lote ou na\nperna — `422` sem eles), e um \"trecho\" igual à viagem inteira do CT-e da contratante é\nrecusado na linha com `redespacho_exige_rota`. Um CT-e da contratante vinculado a\nmultimodal (`tpServ` 4) não admite contra-CT-e (`origem_incompativel_com_tipo`; na caixa,\n`allows_counter_cte: false`). A linha de resultado devolve o `tipo_servico` com que o\ndocumento saiu (na linha `duplicated`, o tipo **pedido** — o do contra-CT-e existente está\nem `GET /fiscal/cte/{counter_cte_id}`, campo `service_type`).\n\n## Repasse ao motorista (mesma regra do CIOT)\n\n`repasse.parcelas` é a regra de parcelas do lote (posições 1..3, percentuais somando 100,\n`dias` de 0 a 30) e **vence a regra cadastrada do motorista**. Os contra-CT-e de um mesmo\nmotorista no lote formam um grupo:\n\n- **N ≥ nº de parcelas** → cada documento inteiro cai numa parcela (60/20/20 em 15 docs =\n 9/3/3 documentos, sempre ≥ 1 por parcela) — a parcela 1 libera na bipagem, a 2 na\n conclusão, a 3 na prestação de contas;\n- **N < nº de parcelas** → cada documento é fracionado nas parcelas (60/20/20 do valor\n dele).\n\nO bucket é decidido pela **posição no lote**, não pelo valor: com valores diferentes, a\nordem das chaves define quanto entra em cada parcela. A parcela só existe depois da\n**bipagem** do documento — consulte-a em `GET /carriers/parcelas-repasse/{documento}`\n(aceita o `counter_cte_id`).\n\n## Um modo por origem, e o que bloqueia\n\nUma chave com contra-CT-e integral ativo não aceita pernas (`origem_ja_subcontratada_1a1`)\ne vice-versa (`origem_ja_subcontratada_em_pernas`); cancelar o contra-CT-e libera o outro\nmodo. Chave já subcontratada no mesmo modo responde `duplicated` com o `counter_cte_id`\nexistente — reenviar o lote é seguro. CT-e emitido pela sua própria empresa responde\n`cte_proprio`; rota sem regra, `sem_regra_tributacao`; redespacho com o trecho igual à\nviagem inteira, `redespacho_exige_rota`; origem vinculada a multimodal,\n`origem_incompativel_com_tipo`; origem cujo repasse já foi pago não pode virar pernas.\n\nCancelar um contra-CT-e (`POST /fiscal/cte/{cte_uuid}/eventos/cancelamento`) cancela as\nparcelas ainda não pagas e tira o documento do grupo; o CT-e da contratante continua válido.\n",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ContraCteLoteInput"
}
}
}
},
"responses": {
"202": {
"description": "Lote aceito; a emissão roda em segundo plano.",
"headers": {
"X-Request-Id": {
"$ref": "#/components/headers/RequestId"
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ContraCteLoteAcceptedEnvelope"
}
}
}
},
"400": {
"$ref": "#/components/responses/Erro400"
},
"401": {
"$ref": "#/components/responses/Unauthorized"
},
"403": {
"$ref": "#/components/responses/Forbidden"
},
"422": {
"description": "Validação do payload (`error.details.fields`) ou regra de negócio antes de criar o lote:\n`motorista_nao_encontrado`, `veiculo_nao_encontrado` — nas pernas, o `message` aponta a\nperna (`ctes.0.pernas.2`).\n",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorEnvelope"
}
}
}
},
"429": {
"$ref": "#/components/responses/RateLimited"
},
"500": {
"$ref": "#/components/responses/InternalError"
}
},
"method": "POST",
"path": "/fiscal/cte-subcontratacao/lote",
"parameters": []
}