Cancelamento e carta de correção do CT-e
Enviar carta de correção
POST https://apifiscal.weesy.com.br/v1/cte/{id}/carta-correcao
Abrir na referência interativaCorrige um dado de um CT-e autorizado sem cancelar, como um endereço ou uma observação. Regras da SEFAZ:
- não corrige valores, impostos, CFOP, CNPJ/CPF, inscrição estadual, tomador nem datas de emissão — nesses casos, cancele e emita outro CT-e;
- aceita até 20 cartas por CT-e; cada carta nova substitui a anterior, então mande todas as correções juntas;
- só é aceita em até 30 dias (720 horas) depois da autorização.
A resposta traz o evento. Em geral a SEFAZ responde na hora (situacao registrado ou rejeitado); se demorar, o resultado chega pelo webhook cte.carta_correcao_registrada ou em GET /cte/{id}/eventos.
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
| id obrigatório | caminho | string | Id do CT-e, devolvido no campo |
Exemplo de chamada
cURL
curl --request POST \
--url "https://apifiscal.weesy.com.br/v1/cte/6ade6278e8340a492a46b564/carta-correcao" \
--header "Authorization: Bearer $WEESY_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"correcoes": [
{
"grupoAlterado": "compl",
"campoAlterado": "xObs",
"valorAlterado": "Entrega agendada para o período da manhã."
}
]
}'Node.js
const resposta = await fetch("https://apifiscal.weesy.com.br/v1/cte/6ade6278e8340a492a46b564/carta-correcao", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.WEESY_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"correcoes": [
{
"grupoAlterado": "compl",
"campoAlterado": "xObs",
"valorAlterado": "Entrega agendada para o período da manhã."
}
]
}),
});
console.log(resposta.status, await resposta.text());Python
import os
import requests
resposta = requests.post(
"https://apifiscal.weesy.com.br/v1/cte/6ade6278e8340a492a46b564/carta-correcao",
headers={"Authorization": f"Bearer {os.environ['WEESY_TOKEN']}"},
json={
"correcoes": [
{
"grupoAlterado": "compl",
"campoAlterado": "xObs",
"valorAlterado": "Entrega agendada para o período da manhã.",
},
],
},
timeout=30,
)
print(resposta.status_code, resposta.text)PHP
<?php
$corpo = <<<'JSON'
{
"correcoes": [
{
"grupoAlterado": "compl",
"campoAlterado": "xObs",
"valorAlterado": "Entrega agendada para o período da manhã."
}
]
}
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/cte/6ade6278e8340a492a46b564/carta-correcao", 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 = """
{
"correcoes": [
{
"grupoAlterado": "compl",
"campoAlterado": "xObs",
"valorAlterado": "Entrega agendada para o período da manhã."
}
]
}
""";
using var resposta = await http.PostAsync(
"https://apifiscal.weesy.com.br/v1/cte/6ade6278e8340a492a46b564/carta-correcao",
new StringContent(corpo, Encoding.UTF8, "application/json"));
Console.WriteLine($"{(int)resposta.StatusCode} {await resposta.Content.ReadAsStringAsync()}");Corpo da requisição
| Campo | Tipo | Descrição |
|---|---|---|
| correcoes obrigatório | array de object | Todas as correções desta carta. A carta nova substitui a anterior. |
| correcoes[] obrigatório | string | Grupo do XML onde está o campo (ex. |
| correcoes[] obrigatório | string | Nome da tag a corrigir dentro do grupo (ex. |
| correcoes[] obrigatório | string | O valor correto. |
| correcoes[] | string | Só quando o grupo se repete no XML — qual ocorrência corrigir (começa em |
Exemplo
{
"correcoes": [
{
"grupoAlterado": "compl",
"campoAlterado": "xObs",
"valorAlterado": "Entrega agendada para o período da manhã."
}
]
}Respostas
- 202: Pedido recebido — o evento da carta de correção.
- 400: validacao — inclusive campo que a carta de correção não pode alterar (erros[].code = camponaocorrigivel). (formato de erro)
- 401: Token ausente, errado ou revogado (credencialinvalida). Confira o cabeçalho Authorization. (formato de erro)
- 404: ctenaoencontrado — não existe, ou é de outra empresa. (formato de erro)
- 409: ctestatusinvalido (não autorizado ou cancelado), ctelimitecartacorrecao (já tem 20 cartas) ou cteprazocartacorrecaoexpirado (passou de 720 horas). (formato de erro)
- 503: A prefeitura, o sistema nacional ou a SEFAZ estão fora do ar (autorizadorindisponivel). Tente de novo em alguns minutos. (formato de erro)
Campos da resposta 202
| Campo | Tipo | Descrição | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| tipo obrigatório | string |
| ||||||||
| sequencia obrigatório | integer | Número do evento desse tipo no CT-e (a 1ª carta de correção é 1, a 2ª é 2...). | ||||||||
| situacao obrigatório | string |
| ||||||||
| justificativa | string ou null | Só no cancelamento. | ||||||||
| correcoes | array de object | Só na carta de correção. | ||||||||
| correcoes[] obrigatório | string | Grupo do XML onde está o campo (ex. | ||||||||
| correcoes[] obrigatório | string | Nome da tag a corrigir dentro do grupo (ex. | ||||||||
| correcoes[] obrigatório | string | O valor correto. | ||||||||
| correcoes[] | string | Só quando o grupo se repete no XML — qual ocorrência corrigir (começa em | ||||||||
| protocolo | string ou null | Protocolo do evento na SEFAZ, quando registrado. | ||||||||
| 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. | ||||||||
| solicitadoEm obrigatório | string (date-time) | Data e hora no horário de Brasília (ex. | ||||||||
| registradoEm | string (date-time) ou null |