Trabalhos

Contrato completo para criar, consultar, paginar, cancelar e baixar arquivos vinculados a operações assíncronas.

Nesta página
  1. Criar
  2. Tipos
  3. Listar para monitoramento
  4. Consultar
  5. Cancelar
  6. Baixar arquivo

Criar um trabalho

POST/api/v1/jobs200 ou 202

A API pode responder HTTP 202 com estado queued ou HTTP 200 com estado completed. O corpo segue o mesmo envelope.

Corpo da requisiçãojson
{
  "type": "invoice_sync_latest",
  "dist": "CELESC",
  "connectionId": "conn_exemplo_123",
  "uc": "154026601110",
  "count": 1,
  "getPdfData": false,
  "forceRefresh": false
}
Trabalho aceitojson202 Accepted
{
  "schemaVersion": "3.0",
  "jobId": "job_exemplo_01",
  "type": "invoice_sync_period",
  "status": "queued",
  "dist": "CELESC",
  "connectionId": "conn_exemplo_123",
  "createdAt": "2026-08-24T14:00:00Z"
}
Falha de validaçãojson400 Bad Request
{
  "error": {
    "code": "invalid_uc",
    "message": "UC must contain ASCII digits only.",
    "retryable": false,
    "details": {}
  }
}
CampoTipoObrigatórioDescrição
typestringsimTipo do trabalho. Consulte a tabela de tipos aceitos.
diststringsimCódigo da distribuidora: CELESC ou COPEL.
connectionIdstringsimConexão pertencente ao mesmo cliente da chave de API.
ucstringpor tipoUC com somente dígitos ASCII. Aceita identificador atual ou legado.
countintegerlatestQuantidade de faturas mais recentes, de 1 a 120.
billingPeriodstringperiodPeríodo de faturamento no formato YYYY-MM.
fromstringrangePrimeiro período, inclusivo, no formato YYYY-MM.
tostringrangeÚltimo período, inclusivo, no formato YYYY-MM; intervalo máximo de 36 meses.
invoiceIdstringalternativaFatura específica para operações de PDF. Não converta para número.
latestCountintegeralternativaQuantidade das faturas mais recentes para uma operação de PDF ou sincronização completa.
getPdfDatabooleannãoQuando true, inclui o objeto estruturado pdf_data e disponibiliza o PDF sanitizado.
includePdfFetchbooleannãoEm installation_sync, também disponibiliza os PDFs sanitizados.
includePdfParsebooleannãoEm installation_sync, também inclui pdf_data.
forceRefreshbooleannãoQuando true, solicita dados atuais à distribuidora para esta operação.

Tipos de trabalho

typeEntregaSeletores
uc_discoveryLista todas as UCs disponíveis para a conexão.dist, connectionId
invoice_sync_latestRetorna as últimas N faturas.uc, count
invoice_sync_periodRetorna um período de faturamento.uc, billingPeriod
invoice_sync_rangeRetorna um intervalo de até 36 meses.uc, from, to
invoice_pdf_fetchDisponibiliza PDFs sanitizados.uc + invoiceId ou latestCount
invoice_pdf_parseRetorna pdf_data estruturado.uc + invoiceId ou latestCount
installation_syncExecuta sincronização completa de uma UC.uc, latestCount e opções

Os três tipos de sincronização aceitam getPdfData. Os tipos de PDF aceitam uma fatura por invoiceId ou várias por latestCount.

Listar para monitoramento

GET/api/v1/jobs?status=FAILED&createdWithin=24h&limit=1

Esta rota lista resumos de trabalhos em ordem decrescente de createdAt. Ela aceita uma chave de cliente, sempre limitada ao próprio tenant, ou uma chave administrativa vinculada a um IP para consultas entre clientes.

O campo count informa o total exato que corresponde aos filtros, antes da paginação. A lista jobs não inclui result nem arquivos.

Consultar e paginar

GET/api/v1/jobs/{jobId}?limit=50&offset=0

limit varia de 1 a 200 e usa 50 por padrão. offset começa em 0. A paginação altera somente result.items; result.count continua indicando o total de itens do trabalho.

Exemplo: 600 UCs em páginas de 200

Depois de concluir um trabalho uc_discovery, consulte sempre o mesmo jobId. Se a primeira resposta trouxer offset: 0 e hasMore: true, avance o offset pelo limit retornado.

GET/api/v1/jobs/{jobId}?limit=200&offset=0itens 1–200
Paginação da primeira resposta — itens omitidosjson200 OK
{
  "result": {
    "count": 600,
    "pagination": {
      "limit": 200,
      "offset": 0,
      "hasMore": true
    }
  }
}
GET/api/v1/jobs/{jobId}?limit=200&offset=200itens 201–400
GET/api/v1/jobs/{jobId}?limit=200&offset=400itens 401–600; hasMore: false

Pare quando result.pagination.hasMore for false. Para evitar suposições, calcule a próxima posição como pagination.offset + pagination.limit, usando os valores efetivamente retornados pela API.

Percorrer todas as páginasjavascript
const items = [];
let offset = 0;
const limit = 200;
let hasMore;

do {
  const response = await fetch(
    `${BASE_URL}/jobs/${jobId}?limit=${limit}&offset=${offset}`,
    { headers: { "X-API-Key": API_KEY } },
  );
  const job = await response.json();

  items.push(...job.result.items);
  hasMore = job.result.pagination.hasMore;
  offset = job.result.pagination.offset + job.result.pagination.limit;
} while (hasMore);

Trabalho duplicado

Um trabalho ativo com o mesmo alvo retorna HTTP 409 job_already_exists. Consulte o details.jobId já existente.

Cancelar

POST/api/v1/jobs/{jobId}/cancel

Retorna 200 e cancelled: true quando o cancelamento é imediato, ou 202 e status: "cancelling" quando ainda precisa concluir. Estados terminais retornam job_not_cancellable.

Baixar arquivo do trabalho

GET/api/v1/jobs/{jobId}/files/{invoiceId}

Disponível somente quando o item retornou pdf.available: true. A URL completa está em pdf.downloadUrl. Um arquivo que não pertence ao trabalho retorna invoice_not_found.

Digite para buscar em guias, referências, schemas e erros.