Skip to content

Codigos de Erro

Referencia completa de todos os codigos de erro retornados pela API FluxiQ NPC.

Formato de Resposta de Erro

Todas as respostas de erro seguem um formato padronizado:

json
{
  "success": false,
  "error": {
    "code": "CODIGO_DO_ERRO",
    "message": "Descricao legivel do erro",
    "details": "Informacoes adicionais para resolver o problema"
  },
  "meta": {
    "request_id": "req_abc123def456"
  }
}
CampoTipoDescricao
successbooleanSempre false para erros
error.codestringCodigo identificador do erro (use em logica)
error.messagestringMensagem descritiva do erro
error.detailsstringDetalhes adicionais ou sugestoes de correcao
meta.request_idstringID unico da requisicao (importante para suporte)

Request ID

Sempre inclua o request_id ao entrar em contato com o suporte. Isso permite rastrear sua requisicao especifica em nossos logs.


Erros de Autenticacao (401)

Erros relacionados a autenticacao da API Key.

MISSING_API_KEY

O cabecalho X-API-Key nao foi incluido na requisicao.

json
{
  "success": false,
  "error": {
    "code": "MISSING_API_KEY",
    "message": "O cabecalho X-API-Key e obrigatorio",
    "details": "Inclua sua API Key no cabecalho X-API-Key da requisicao"
  },
  "meta": {
    "request_id": "req_abc123def456"
  }
}

Como resolver: Adicione o cabecalho X-API-Key com sua chave de API.

INVALID_API_KEY

A API Key fornecida e invalida ou nao existe.

json
{
  "success": false,
  "error": {
    "code": "INVALID_API_KEY",
    "message": "API Key invalida ou expirada",
    "details": "Verifique se a chave esta correta e ativa no portal"
  },
  "meta": {
    "request_id": "req_abc123def456"
  }
}

Como resolver: Verifique se a API Key esta correta. Gere uma nova chave no portal se necessario.

API_KEY_REVOKED

A API Key foi revogada e nao pode mais ser utilizada.

json
{
  "success": false,
  "error": {
    "code": "API_KEY_REVOKED",
    "message": "Esta API Key foi revogada",
    "details": "Gere uma nova chave no portal ou entre em contato com o suporte"
  },
  "meta": {
    "request_id": "req_abc123def456"
  }
}

Como resolver: Acesse o FluxiQ Portal e gere uma nova API Key.


Erros de Autorizacao (403)

Erros relacionados a permissoes e acesso.

FORBIDDEN

A API Key nao possui permissao para acessar este recurso.

json
{
  "success": false,
  "error": {
    "code": "FORBIDDEN",
    "message": "Acesso negado a este recurso",
    "details": "Sua API Key nao possui permissao para esta operacao"
  },
  "meta": {
    "request_id": "req_abc123def456"
  }
}

Como resolver: Verifique as permissoes da sua API Key no portal ou entre em contato com o suporte.

IP_NOT_ALLOWED

A requisicao foi feita de um IP nao autorizado.

json
{
  "success": false,
  "error": {
    "code": "IP_NOT_ALLOWED",
    "message": "IP nao autorizado",
    "details": "O IP 203.0.113.50 nao esta na lista de IPs permitidos"
  },
  "meta": {
    "request_id": "req_abc123def456"
  }
}

Como resolver: Adicione o IP de origem na lista de IPs permitidos no portal.


Erros de Validacao (400/422)

Erros relacionados a dados invalidos na requisicao.

VALIDATION_ERROR

Um ou mais campos da requisicao sao invalidos.

json
{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Dados invalidos na requisicao",
    "details": {
      "amount_cents": ["deve ser maior que 0"],
      "due_date": ["deve ser uma data futura"],
      "payer_document": ["formato invalido"]
    }
  },
  "meta": {
    "request_id": "req_abc123def456"
  }
}

Como resolver: Corrija os campos indicados no objeto details.

INVALID_DOCUMENT

O documento (CPF/CNPJ) fornecido e invalido.

json
{
  "success": false,
  "error": {
    "code": "INVALID_DOCUMENT",
    "message": "Documento invalido",
    "details": "O CPF/CNPJ '12345678900' nao possui digitos verificadores validos"
  },
  "meta": {
    "request_id": "req_abc123def456"
  }
}

Como resolver: Verifique se o CPF ou CNPJ esta correto, incluindo os digitos verificadores.

INVALID_DUE_DATE

A data de vencimento e invalida ou esta no passado.

json
{
  "success": false,
  "error": {
    "code": "INVALID_DUE_DATE",
    "message": "Data de vencimento invalida",
    "details": "A data de vencimento deve ser igual ou posterior a data atual"
  },
  "meta": {
    "request_id": "req_abc123def456"
  }
}

Como resolver: Use uma data de vencimento no futuro no formato YYYY-MM-DD.

AMOUNT_TOO_LOW

O valor do boleto e menor que o minimo permitido.

json
{
  "success": false,
  "error": {
    "code": "AMOUNT_TOO_LOW",
    "message": "Valor muito baixo",
    "details": "O valor minimo para um boleto e R$ 1,00 (100 centavos)"
  },
  "meta": {
    "request_id": "req_abc123def456"
  }
}

Como resolver: O valor minimo e 100 centavos (R$ 1,00).


Erros de Recurso (404/409)

Erros relacionados a recursos nao encontrados ou conflitos.

NOT_FOUND

O recurso solicitado nao foi encontrado.

json
{
  "success": false,
  "error": {
    "code": "NOT_FOUND",
    "message": "Recurso nao encontrado",
    "details": "O recurso solicitado nao existe ou foi removido"
  },
  "meta": {
    "request_id": "req_abc123def456"
  }
}

BOLETO_NOT_FOUND

O boleto especificado nao foi encontrado.

json
{
  "success": false,
  "error": {
    "code": "BOLETO_NOT_FOUND",
    "message": "Boleto nao encontrado",
    "details": "Nenhum boleto encontrado com nosso_numero '12345678901'"
  },
  "meta": {
    "request_id": "req_abc123def456"
  }
}

Como resolver: Verifique se o nosso_numero esta correto.

DUPLICATE_BOLETO

Ja existe um boleto com o mesmo nosso_numero.

json
{
  "success": false,
  "error": {
    "code": "DUPLICATE_BOLETO",
    "message": "Boleto duplicado",
    "details": "Ja existe um boleto com nosso_numero '12345678901'"
  },
  "meta": {
    "request_id": "req_abc123def456"
  }
}

Como resolver: Use um nosso_numero unico para cada boleto.

INVALID_STATUS_TRANSITION

A transicao de status solicitada nao e permitida.

json
{
  "success": false,
  "error": {
    "code": "INVALID_STATUS_TRANSITION",
    "message": "Transicao de status invalida",
    "details": "Nao e possivel alterar o status de 'paid' para 'cancelled'"
  },
  "meta": {
    "request_id": "req_abc123def456"
  }
}

Como resolver: Verifique o diagrama de transicoes de status abaixo.

Diagrama de Transicoes de Status

O ciclo de vida de um boleto segue regras estritas de transicao:

                    +-----------+
                    |   draft   |
                    +-----+-----+
                          |
                          | registrar
                          v
                    +-----------+
            +------>| registered|<------+
            |       +-----+-----+       |
            |             |             |
            | cancelar    | pagar       | cancelar
            |             v             |
            |       +-----------+       |
            +-------+   paid    +-------+
                    +-----+-----+
                          |
                          | liquidar
                          v
                    +-----------+
                    |  settled  |
                    +-----------+

                    +-----------+
                    | cancelled | (estado final)
                    +-----------+

Transicoes permitidas:

Status AtualTransicoes Possiveis
draftregistered
registeredpaid, cancelled
paidsettled
settled(nenhuma - estado final)
cancelled(nenhuma - estado final)

Erros de Rate Limit (429)

Erros relacionados a limites de requisicoes.

RATE_LIMITED

O limite de requisicoes foi excedido.

json
{
  "success": false,
  "error": {
    "code": "RATE_LIMITED",
    "message": "Limite de requisicoes excedido",
    "details": "Aguarde 45 segundos antes de fazer novas requisicoes"
  },
  "meta": {
    "request_id": "req_abc123def456"
  }
}

Headers retornados:

HeaderValorDescricao
X-RateLimit-Limit100Limite total de requisicoes
X-RateLimit-Remaining0Requisicoes restantes
X-RateLimit-Reset1706968800Timestamp Unix quando o limite reseta
Retry-After45Segundos para aguardar

Como resolver: Aguarde o tempo indicado no header Retry-After antes de tentar novamente.

Consulte a pagina de Rate Limits para mais detalhes.


Erros de Servidor (500/503)

Erros internos ou de indisponibilidade.

INTERNAL_ERROR

Erro interno do servidor.

json
{
  "success": false,
  "error": {
    "code": "INTERNAL_ERROR",
    "message": "Erro interno do servidor",
    "details": "Ocorreu um erro inesperado. Nossa equipe foi notificada."
  },
  "meta": {
    "request_id": "req_abc123def456"
  }
}

Como resolver: Tente novamente em alguns minutos. Se o problema persistir, entre em contato com o suporte incluindo o request_id.

PCR_UNAVAILABLE

O servico PCR da Nuclea esta temporariamente indisponivel.

json
{
  "success": false,
  "error": {
    "code": "PCR_UNAVAILABLE",
    "message": "Servico PCR indisponivel",
    "details": "O servico de registro de boletos da Nuclea esta temporariamente indisponivel"
  },
  "meta": {
    "request_id": "req_abc123def456"
  }
}

Como resolver: O servico PCR da Nuclea pode estar em manutencao. Tente novamente em alguns minutos.

FTP_UNAVAILABLE

O servico FTP da Nuclea esta temporariamente indisponivel.

json
{
  "success": false,
  "error": {
    "code": "FTP_UNAVAILABLE",
    "message": "Servico FTP indisponivel",
    "details": "O servico de arquivos da Nuclea esta temporariamente indisponivel"
  },
  "meta": {
    "request_id": "req_abc123def456"
  }
}

Como resolver: Os arquivos de liquidacao sao processados automaticamente quando o servico normalizar.


Tratamento de Erros

Exemplo em JavaScript

javascript
async function createBoleto(boletoData) {
  try {
    const response = await fetch(
      "https://api.pixconnect.com.br/api/v1/central/boletos",
      {
        method: "POST",
        headers: {
          "X-API-Key": process.env.PIXCONNECT_API_KEY,
          "Content-Type": "application/json",
        },
        body: JSON.stringify({ boleto: boletoData }),
      }
    );

    const data = await response.json();

    if (!response.ok) {
      // Tratar erros especificos
      switch (data.error.code) {
        case "VALIDATION_ERROR":
          console.error("Dados invalidos:", data.error.details);
          // Mostrar erros de validacao para o usuario
          break;

        case "DUPLICATE_BOLETO":
          console.error("Boleto ja existe:", data.error.message);
          // Buscar boleto existente
          break;

        case "RATE_LIMITED":
          const retryAfter = response.headers.get("Retry-After");
          console.log(`Aguardando ${retryAfter} segundos...`);
          // Implementar retry com backoff
          break;

        case "PCR_UNAVAILABLE":
        case "INTERNAL_ERROR":
          console.error("Erro do servidor:", data.error.message);
          // Agendar retry
          break;

        default:
          console.error("Erro desconhecido:", data.error);
      }

      // Logar request_id para suporte
      console.log("Request ID:", data.meta.request_id);
      return null;
    }

    return data.data;
  } catch (error) {
    console.error("Erro de rede:", error);
    throw error;
  }
}

Exemplo em Python

python
import requests
import time
import os

def create_boleto(boleto_data):
    url = "https://api.pixconnect.com.br/api/v1/central/boletos"
    headers = {
        "X-API-Key": os.environ["PIXCONNECT_API_KEY"],
        "Content-Type": "application/json"
    }

    try:
        response = requests.post(
            url,
            headers=headers,
            json={"boleto": boleto_data}
        )
        data = response.json()

        if not response.ok:
            error = data.get("error", {})
            error_code = error.get("code")
            request_id = data.get("meta", {}).get("request_id")

            # Tratar erros especificos
            if error_code == "VALIDATION_ERROR":
                print(f"Dados invalidos: {error.get('details')}")
                # Mostrar erros de validacao para o usuario

            elif error_code == "DUPLICATE_BOLETO":
                print(f"Boleto ja existe: {error.get('message')}")
                # Buscar boleto existente

            elif error_code == "RATE_LIMITED":
                retry_after = int(response.headers.get("Retry-After", 60))
                print(f"Rate limited. Aguardando {retry_after} segundos...")
                time.sleep(retry_after)
                # Tentar novamente
                return create_boleto(boleto_data)

            elif error_code in ["PCR_UNAVAILABLE", "INTERNAL_ERROR"]:
                print(f"Erro do servidor: {error.get('message')}")
                # Agendar retry

            # Logar request_id para suporte
            print(f"Request ID: {request_id}")
            return None

        return data.get("data")

    except requests.exceptions.RequestException as e:
        print(f"Erro de rede: {e}")
        raise

Contato com Suporte

Ao entrar em contato com o suporte, sempre inclua:

  1. Request ID - O request_id retornado na resposta de erro
  2. Timestamp - Data e hora aproximada do erro
  3. Endpoint - URL e metodo HTTP utilizado
  4. Payload - Corpo da requisicao (remova dados sensiveis)
  5. Resposta - A resposta completa de erro recebida

Canais de Suporte

Proximos Passos

Documentação da API FluxiQ NPC