Emitir e consultar MDF-e
Emitir MDF-e
POST https://apifiscal.weesy.com.br/v1/mdfe
Abrir na referência interativaEnvia um MDF-e para autorização na SEFAZ com os dados da viagem: de onde sai, para onde vai, o veículo, os motoristas e os CT-e da carga. A resposta só confirma que recebemos; o resultado (autorizado ou rejeitado) chega depois pelo webhook ou consultando o MDF-e.
Não duplica: mandou de novo o mesmo idIntegracao com o mesmo corpo? Devolvemos o MDF-e que já existe (200). Se o anterior foi rejeitado, o mesmo idIntegracao com o corpo corrigido reenvia com os dados novos (200, mesmo id). Em qualquer outra situação, corpo diferente com o mesmo idIntegracao responde 409.
Antes de emitir, confira se o veículo não tem MDF-e aberto (GET /mdfe/nao-encerrados).
Exemplo de chamada
cURL
curl --request POST \
--url "https://apifiscal.weesy.com.br/v1/mdfe" \
--header "Authorization: Bearer $WEESY_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"idIntegracao": "viagem-2087",
"cnpjEmitente": "21664333000195",
"ambiente": "homologacao",
"serie": "1",
"ufInicio": "SP",
"ufFim": "PR",
"percurso": [],
"carregamento": [
{
"codigoIbge": "3550308"
}
],
"descarregamento": [
{
"codigoIbge": "4106902",
"chavesCte": [
"35261021664333000195570010000012341000012345"
]
}
],
"rodoviario": {
"rntrc": "12345678",
"veiculo": {
"placa": "ABC1D23",
"uf": "SP",
"tipoRodado": "01",
"tipoCarroceria": "02",
"tara": 8500,
"capacidadeKg": 23000
},
"condutores": [
{
"nome": "MOTORISTA EXEMPLO",
"cpf": "12345678909"
}
],
"ciot": {
"numero": "123456789012",
"cpfCnpj": "21664333000195"
}
},
"carga": {
"valor": 15800,
"unidade": "01",
"quantidade": 1250.5
}
}'Node.js
const resposta = await fetch("https://apifiscal.weesy.com.br/v1/mdfe", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.WEESY_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"idIntegracao": "viagem-2087",
"cnpjEmitente": "21664333000195",
"ambiente": "homologacao",
"serie": "1",
"ufInicio": "SP",
"ufFim": "PR",
"percurso": [],
"carregamento": [
{
"codigoIbge": "3550308"
}
],
"descarregamento": [
{
"codigoIbge": "4106902",
"chavesCte": [
"35261021664333000195570010000012341000012345"
]
}
],
"rodoviario": {
"rntrc": "12345678",
"veiculo": {
"placa": "ABC1D23",
"uf": "SP",
"tipoRodado": "01",
"tipoCarroceria": "02",
"tara": 8500,
"capacidadeKg": 23000
},
"condutores": [
{
"nome": "MOTORISTA EXEMPLO",
"cpf": "12345678909"
}
],
"ciot": {
"numero": "123456789012",
"cpfCnpj": "21664333000195"
}
},
"carga": {
"valor": 15800,
"unidade": "01",
"quantidade": 1250.5
}
}),
});
console.log(resposta.status, await resposta.text());Python
import os
import requests
resposta = requests.post(
"https://apifiscal.weesy.com.br/v1/mdfe",
headers={"Authorization": f"Bearer {os.environ['WEESY_TOKEN']}"},
json={
"idIntegracao": "viagem-2087",
"cnpjEmitente": "21664333000195",
"ambiente": "homologacao",
"serie": "1",
"ufInicio": "SP",
"ufFim": "PR",
"percurso": [],
"carregamento": [
{
"codigoIbge": "3550308",
},
],
"descarregamento": [
{
"codigoIbge": "4106902",
"chavesCte": [
"35261021664333000195570010000012341000012345",
],
},
],
"rodoviario": {
"rntrc": "12345678",
"veiculo": {
"placa": "ABC1D23",
"uf": "SP",
"tipoRodado": "01",
"tipoCarroceria": "02",
"tara": 8500,
"capacidadeKg": 23000,
},
"condutores": [
{
"nome": "MOTORISTA EXEMPLO",
"cpf": "12345678909",
},
],
"ciot": {
"numero": "123456789012",
"cpfCnpj": "21664333000195",
},
},
"carga": {
"valor": 15800,
"unidade": "01",
"quantidade": 1250.5,
},
},
timeout=30,
)
print(resposta.status_code, resposta.text)PHP
<?php
$corpo = <<<'JSON'
{
"idIntegracao": "viagem-2087",
"cnpjEmitente": "21664333000195",
"ambiente": "homologacao",
"serie": "1",
"ufInicio": "SP",
"ufFim": "PR",
"percurso": [],
"carregamento": [
{
"codigoIbge": "3550308"
}
],
"descarregamento": [
{
"codigoIbge": "4106902",
"chavesCte": [
"35261021664333000195570010000012341000012345"
]
}
],
"rodoviario": {
"rntrc": "12345678",
"veiculo": {
"placa": "ABC1D23",
"uf": "SP",
"tipoRodado": "01",
"tipoCarroceria": "02",
"tara": 8500,
"capacidadeKg": 23000
},
"condutores": [
{
"nome": "MOTORISTA EXEMPLO",
"cpf": "12345678909"
}
],
"ciot": {
"numero": "123456789012",
"cpfCnpj": "21664333000195"
}
},
"carga": {
"valor": 15800,
"unidade": "01",
"quantidade": 1250.5
}
}
JSON;
$contexto = stream_context_create(["http" => [
"method" => "POST",
"header" => implode("\r\n", ["Authorization: Bearer " . getenv("WEESY_TOKEN"), "Content-Type: application/json"]),
"content" => $corpo,
"ignore_errors" => true, // lê o corpo também nas respostas de erro
]]);
$resposta = file_get_contents("https://apifiscal.weesy.com.br/v1/mdfe", false, $contexto);
echo $http_response_header[0], PHP_EOL, $resposta, PHP_EOL;C#
using System.Net.Http.Headers;
using System.Text;
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("WEESY_TOKEN"));
var corpo = """
{
"idIntegracao": "viagem-2087",
"cnpjEmitente": "21664333000195",
"ambiente": "homologacao",
"serie": "1",
"ufInicio": "SP",
"ufFim": "PR",
"percurso": [],
"carregamento": [
{
"codigoIbge": "3550308"
}
],
"descarregamento": [
{
"codigoIbge": "4106902",
"chavesCte": [
"35261021664333000195570010000012341000012345"
]
}
],
"rodoviario": {
"rntrc": "12345678",
"veiculo": {
"placa": "ABC1D23",
"uf": "SP",
"tipoRodado": "01",
"tipoCarroceria": "02",
"tara": 8500,
"capacidadeKg": 23000
},
"condutores": [
{
"nome": "MOTORISTA EXEMPLO",
"cpf": "12345678909"
}
],
"ciot": {
"numero": "123456789012",
"cpfCnpj": "21664333000195"
}
},
"carga": {
"valor": 15800,
"unidade": "01",
"quantidade": 1250.5
}
}
""";
using var resposta = await http.PostAsync(
"https://apifiscal.weesy.com.br/v1/mdfe",
new StringContent(corpo, Encoding.UTF8, "application/json"));
Console.WriteLine($"{(int)resposta.StatusCode} {await resposta.Content.ReadAsStringAsync()}");Corpo da requisição
| Campo | Tipo | Descrição | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| idIntegracao obrigatório | string | Um código seu para este MDF-e (o número da viagem, por exemplo). Precisa ser único por empresa: é ele que impede emitir o mesmo MDF-e duas vezes. | ||||||||||||||||||||||||||||
| cnpjEmitente obrigatório | string | CNPJ da transportadora que emite o MDF-e, só dígitos. | ||||||||||||||||||||||||||||
| ambiente obrigatório | string | Onde o documento é emitido.
O ambiente | ||||||||||||||||||||||||||||
| serie obrigatório | string | Série do MDF-e (de | ||||||||||||||||||||||||||||
| ufInicio obrigatório | string | Estado onde a viagem começa (onde a carga é carregada). Valores: | ||||||||||||||||||||||||||||
| ufFim obrigatório | string | Estado onde a viagem termina (onde a carga é entregue). Valores: | ||||||||||||||||||||||||||||
| percurso | array de string | Estados por onde o caminhão passa entre o início e o fim, na ordem. Não repita | ||||||||||||||||||||||||||||
| carregamento obrigatório | array de object | Cidades onde a carga é colocada no caminhão. | ||||||||||||||||||||||||||||
| carregamento[] obrigatório | string | Código IBGE da cidade onde a carga foi colocada no caminhão (7 dígitos). | ||||||||||||||||||||||||||||
| descarregamento obrigatório | array de object | Cidades onde a carga é entregue, cada uma com os CT-e entregues lá. | ||||||||||||||||||||||||||||
| descarregamento[] obrigatório | string | Código IBGE da cidade onde a carga será entregue (7 dígitos). | ||||||||||||||||||||||||||||
| descarregamento[] obrigatório | array de string | Chaves de acesso dos CT-e cuja carga é entregue nesta cidade. | ||||||||||||||||||||||||||||
| rodoviario obrigatório | object | |||||||||||||||||||||||||||||
| rodoviario. obrigatório | string | Número do RNTRC da transportadora na ANTT (8 dígitos). | ||||||||||||||||||||||||||||
| rodoviario. obrigatório | object | O caminhão (ou cavalo mecânico) que puxa a carga. | ||||||||||||||||||||||||||||
| rodoviario. obrigatório | string | Placa do veículo, sem traço, em maiúsculas (formato antigo ou Mercosul). | ||||||||||||||||||||||||||||
| rodoviario. obrigatório | string | Estado onde o veículo está licenciado (está no CRLV). Valores: | ||||||||||||||||||||||||||||
| rodoviario. | string | RENAVAM do veículo (está no CRLV). | ||||||||||||||||||||||||||||
| rodoviario. obrigatório | integer | Peso do veículo vazio, em kg (está no CRLV). | ||||||||||||||||||||||||||||
| rodoviario. | integer | Capacidade de carga em kg. | ||||||||||||||||||||||||||||
| rodoviario. | integer | Capacidade de carga em m³, quando fizer sentido. | ||||||||||||||||||||||||||||
| rodoviario. | object | Dono do veículo, quando não é a própria empresa (veículo de terceiro ou agregado). | ||||||||||||||||||||||||||||
| rodoviario. obrigatório | string | CPF (11 números) ou CNPJ (14 posições), sem pontuação. | ||||||||||||||||||||||||||||
| rodoviario. obrigatório | string | RNTRC do proprietário na ANTT (8 dígitos). | ||||||||||||||||||||||||||||
| rodoviario. obrigatório | string | |||||||||||||||||||||||||||||
| rodoviario. | string | Inscrição estadual, só dígitos, ou | ||||||||||||||||||||||||||||
| rodoviario. | string | Sigla do estado, em maiúsculas. Valores: | ||||||||||||||||||||||||||||
| rodoviario. obrigatório | integer |
Valores: | ||||||||||||||||||||||||||||
| rodoviario. obrigatório | string | Tipo de rodado — código oficial
| ||||||||||||||||||||||||||||
| rodoviario. obrigatório | string | Tipo de carroceria — código oficial
| ||||||||||||||||||||||||||||
| rodoviario. | array de object | |||||||||||||||||||||||||||||
| rodoviario. obrigatório | string | Placa do veículo, sem traço, em maiúsculas (formato antigo ou Mercosul). | ||||||||||||||||||||||||||||
| rodoviario. obrigatório | string | Sigla do estado, em maiúsculas. Valores: | ||||||||||||||||||||||||||||
| rodoviario. obrigatório | string | Tipo de carroceria — código oficial
| ||||||||||||||||||||||||||||
| rodoviario. | string | RENAVAM do veículo (está no CRLV). | ||||||||||||||||||||||||||||
| rodoviario. obrigatório | integer | Peso do veículo vazio, em kg (está no CRLV). | ||||||||||||||||||||||||||||
| rodoviario. obrigatório | integer | Capacidade de carga do reboque, em kg. | ||||||||||||||||||||||||||||
| rodoviario. | integer | Capacidade de carga em m³, quando fizer sentido. | ||||||||||||||||||||||||||||
| rodoviario. | object | Dono do veículo, quando não é a própria empresa (veículo de terceiro ou agregado). | ||||||||||||||||||||||||||||
| rodoviario. obrigatório | string | CPF (11 números) ou CNPJ (14 posições), sem pontuação. | ||||||||||||||||||||||||||||
| rodoviario. obrigatório | string | RNTRC do proprietário na ANTT (8 dígitos). | ||||||||||||||||||||||||||||
| rodoviario. obrigatório | string | |||||||||||||||||||||||||||||
| rodoviario. | string | Inscrição estadual, só dígitos, ou | ||||||||||||||||||||||||||||
| rodoviario. | string | Sigla do estado, em maiúsculas. Valores: | ||||||||||||||||||||||||||||
| rodoviario. obrigatório | integer |
Valores: | ||||||||||||||||||||||||||||
| rodoviario. obrigatório | array de object | |||||||||||||||||||||||||||||
| rodoviario. obrigatório | string | Nome completo do motorista. | ||||||||||||||||||||||||||||
| rodoviario. obrigatório | string | CPF do motorista, só dígitos. | ||||||||||||||||||||||||||||
| rodoviario. obrigatório | object | CIOT (Código Identificador da Operação de Transporte), gerado na ANTT ou num SEFAZ de pagamento de frete. A SEFAZ passa a conferir o CIOT no MDF-e em produção a partir de 23/11/2026 (rejeição 684). | ||||||||||||||||||||||||||||
| rodoviario. obrigatório | string | Número do CIOT (12 dígitos). | ||||||||||||||||||||||||||||
| rodoviario. obrigatório | string | CPF ou CNPJ de quem gerou o CIOT (o contratado do frete). | ||||||||||||||||||||||||||||
| carga obrigatório | object | Totais da carga que vai no caminhão. | ||||||||||||||||||||||||||||
| carga. obrigatório | number | Valor total da mercadoria transportada (soma das cargas dos CT-e). | ||||||||||||||||||||||||||||
| carga. obrigatório | string | Unidade do peso — código oficial
| ||||||||||||||||||||||||||||
| carga. obrigatório | number | Peso bruto total da carga, até 4 casas decimais. |
Viagem de São Paulo para Curitiba com um CT-e
{
"idIntegracao": "viagem-2087",
"cnpjEmitente": "21664333000195",
"ambiente": "homologacao",
"serie": "1",
"ufInicio": "SP",
"ufFim": "PR",
"percurso": [],
"carregamento": [
{
"codigoIbge": "3550308"
}
],
"descarregamento": [
{
"codigoIbge": "4106902",
"chavesCte": [
"35261021664333000195570010000012341000012345"
]
}
],
"rodoviario": {
"rntrc": "12345678",
"veiculo": {
"placa": "ABC1D23",
"uf": "SP",
"tipoRodado": "01",
"tipoCarroceria": "02",
"tara": 8500,
"capacidadeKg": 23000
},
"condutores": [
{
"nome": "MOTORISTA EXEMPLO",
"cpf": "12345678909"
}
],
"ciot": {
"numero": "123456789012",
"cpfCnpj": "21664333000195"
}
},
"carga": {
"valor": 15800,
"unidade": "01",
"quantidade": 1250.5
}
}Respostas
- 200: Mesmo idIntegracao com o mesmo corpo (devolve o MDF-e já recebido) ou correção de um MDF-e rejeitado.
- 201: Recebido. Ainda não está autorizado — acompanhe pelo webhook ou por GET /mdfe/{id}.
- 400: Algum dado está errado ou faltando. A lista erros diz qual campo e o que corrigir (code = validacao). (formato de erro)
- 401: Token ausente, errado ou revogado (credencialinvalida). Confira o cabeçalho Authorization. (formato de erro)
- 403: ambientenaoliberado — no período de teste grátis, o token de API tentando emitir em producao. (formato de erro)
- 404: empresanaoencontrada — o cnpjEmitente não está cadastrado ou não é uma empresa da sua conta. (formato de erro)
- 409: - idintegracaoreutilizado — esse idIntegracao já foi usado com outros dados. O MDF-e existente vem em existente. - empresasemcertificado ou certificadovencido — envie um certificado A1 válido. (formato de erro)
- 429: Muitas chamadas em pouco tempo (limiteexcedido). Espere os segundos de Retry-After e tente de novo. (formato de erro)
- 500: Erro do nosso lado (errointerno). Tente de novo; se continuar, mande o traceId para o suporte. (formato de erro)
Campos da resposta 200
| Campo | Tipo | Descrição | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| id obrigatório | string | O | ||||||||||||||||
| idIntegracao obrigatório | string | O código seu que veio na emissão. | ||||||||||||||||
| status obrigatório | string | Situação do MDF-e. A lista pode crescer: trate valor desconhecido sem quebrar.
| ||||||||||||||||
| ambiente obrigatório | string | Onde o documento é emitido.
O ambiente | ||||||||||||||||
| empresa obrigatório | object | |||||||||||||||||
| empresa. obrigatório | string | CNPJ sem pontos, barra ou traço (14 posições). Já aceita o CNPJ com letras, que começa a valer em 2026. | ||||||||||||||||
| empresa. obrigatório | string | |||||||||||||||||
| empresa. | string | Sigla do estado, em maiúsculas. Valores: | ||||||||||||||||
| serie obrigatório | string | |||||||||||||||||
| numero | string ou null | Número do MDF-e. Vazio até a Weesy montar o XML. | ||||||||||||||||
| chaveAcesso | string ou null | |||||||||||||||||
| protocolo | string ou null | Protocolo de autorização da SEFAZ. | ||||||||||||||||
| autorizadoEm | string (date-time) ou null | |||||||||||||||||
| ufInicio | string | Sigla do estado, em maiúsculas. Valores: | ||||||||||||||||
| ufFim | string | Sigla do estado, em maiúsculas. Valores: | ||||||||||||||||
| percurso | array de string | |||||||||||||||||
| carregamento | array de object | |||||||||||||||||
| carregamento[] obrigatório | string | Código IBGE do município. | ||||||||||||||||
| carregamento[] | string | Nome do município. | ||||||||||||||||
| carregamento[] | string | Sigla da unidade federativa. | ||||||||||||||||
| descarregamento | array de object | |||||||||||||||||
| descarregamento[] obrigatório | string | Código IBGE do município. | ||||||||||||||||
| descarregamento[] | string | Nome do município. | ||||||||||||||||
| descarregamento[] | string | Sigla da unidade federativa. | ||||||||||||||||
| descarregamento[] | array de string | |||||||||||||||||
| veiculo | object | |||||||||||||||||
| veiculo. | string | Placa do veículo, sem traço, em maiúsculas (formato antigo ou Mercosul). | ||||||||||||||||
| veiculo. | string | Sigla do estado, em maiúsculas. Valores: | ||||||||||||||||
| carga | object | |||||||||||||||||
| carga. | number | Valor em reais, como número com 2 casas decimais (ex. | ||||||||||||||||
| carga. | integer | Quantos CT-e o MDF-e leva (contado das chaves em | ||||||||||||||||
| sefaz | object | Última resposta da SEFAZ, como ela mandou. Útil para entender uma rejeição. | ||||||||||||||||
| sefaz. | integer ou null | Código de resposta da SEFAZ (ex. | ||||||||||||||||
| sefaz. | string ou null | Texto da SEFAZ que explica o código. | ||||||||||||||||
| sefaz. | string ou null | Número do protocolo da SEFAZ, quando houver. | ||||||||||||||||
| encerramento | null ou object | Preenchido quando o MDF-e é encerrado. | ||||||||||||||||
| encerramento. | object | Identificação do município por código IBGE, nome e UF. | ||||||||||||||||
| encerramento. obrigatório | string | Código IBGE do município. | ||||||||||||||||
| encerramento. | string | Nome do município. | ||||||||||||||||
| encerramento. | string | Sigla da unidade federativa. | ||||||||||||||||
| encerramento. | string (date-time) | Data e hora no horário de Brasília (ex. | ||||||||||||||||
| encerramento. | string ou null | |||||||||||||||||
| cancelamento | null ou object | Preenchido quando o MDF-e é cancelado. | ||||||||||||||||
| cancelamento. | string | |||||||||||||||||
| cancelamento. | string (date-time) | Data e hora no horário de Brasília (ex. | ||||||||||||||||
| cancelamento. | string ou null | |||||||||||||||||
| historico | array de object | Por onde o MDF-e passou, em ordem. | ||||||||||||||||
| historico[] obrigatório | string | Situação do MDF-e. A lista pode crescer: trate valor desconhecido sem quebrar.
| ||||||||||||||||
| historico[] obrigatório | string (date-time) | Data e hora em UTC, terminada em | ||||||||||||||||
| historico[] | string ou null | |||||||||||||||||
| links obrigatório | object | |||||||||||||||||
| links. obrigatório | string | |||||||||||||||||
| links. | string ou null | Vazio até autorizar. | ||||||||||||||||
| links. | string ou null | Vazio até autorizar. | ||||||||||||||||
| criadoEm obrigatório | string (date-time) | Data e hora em UTC, terminada em | ||||||||||||||||
| atualizadoEm obrigatório | string (date-time) | Data e hora em UTC, terminada em |