TOPO · Desenvolvedores

SAP (CPI, PI/PO e ABAP)

Como mandar o balancete do SAP para o TOPO com a chave guardada no cofre do SAP.

Esta página é para o consultor SAP que vai ligar o balancete ao TOPO. Ela mostra a configuração no Cloud Integration (CPI), no PI/PO 7.5 e num programa ABAP. Nos três, a chave vai por autenticação Basic e fica guardada no cofre de credenciais do SAP, sem script.

O que você precisa

  1. A chave de API, pedida ao suporte TOPO por um chamado com o escopo trial_balances:write. Comece por uma chave de staging (topo_test_...).
  2. O endereço da API: https://api-staging.kinho.dev para testes e https://api.topocontabil.com.br para produção.
  3. O CNPJ de cada empresa, igual ao cadastro no TOPO, e o código das contas igual ao plano de contas da empresa no TOPO.

A credencial nos três casos

CampoValor
Tipo de autenticaçãoBasic
Usuáriotopo
Senhaa chave de API inteira

O TOPO lê a chave da senha. O usuário não é conferido; topo é só uma convenção para quem ler a configuração depois.

A chamada

  • Método: POST
  • Endereço: <endereço da API>/api/v1/trial-balances
  • Cabeçalho: Content-Type: application/json
  • Corpo, uma chamada por empresa e competência:
{
  "cnpj": "12.345.678/0001-90",
  "period": "2026-08",
  "lineItems": [
    {
      "accountCode": "1.1.01.001",
      "accountName": "Caixa Geral",
      "previousBalance": 1000,
      "debit": 250,
      "credit": 100,
      "finalBalance": 1150
    }
  ]
}

Se o SAP já gera o relatório do balancete em arquivo (CSV, TXT, XML, XLSX ou XLS), use POST /api/v1/trial-balances/arquivo em multipart/form-data, com o arquivo no campo file e o cnpj em outro campo do formulário. Vale o mapeamento de colunas que o cliente salvou para a empresa na tela de importação.

SAP Cloud Integration (CPI)

  1. No Security Material do tenant (área de monitoramento, Manage Security), crie um artefato User Credentials. Nome sugerido: TOPO_API. Usuário topo, senha igual à chave. Faça o deploy do artefato.
  2. No iFlow, no receptor, use o adaptador HTTP com:
    • Address: https://api-staging.kinho.dev/api/v1/trial-balances
    • Method: POST
    • Authentication: Basic
    • Credential Name: TOPO_API
  3. Antes do adaptador, monte o corpo JSON e o cabeçalho Content-Type: application/json.
  4. Deixe ligado o Throw Exception on Failure, que já vem ligado. Assim, uma recusa do TOPO (400, 404, 409) faz a mensagem falhar no monitor do CPI, em vez de ser tratada como entrega.

SAP PI/PO 7.5

  1. Crie um canal receptor do tipo REST.
  2. Na aba de URL, informe https://api-staging.kinho.dev/api/v1/trial-balances e o método POST.
  3. Em Transport Level Security, marque Use Basic Authentication e preencha o usuário topo e a senha com a chave.
  4. Na aba HTTP Headers, acrescente Content-Type com o valor application/json. Não crie um cabeçalho Authorization manual: ele substitui a autenticação configurada no canal.

ABAP (destino SM59)

  1. Na transação SM59, crie um destino do tipo G (conexão HTTP para servidor externo), com o host da API, a porta 443 e o SSL ativo.
  2. Em Logon & Security, escolha Basic Authentication, com o usuário topo e a senha igual à chave.
  3. No programa, crie o cliente com cl_http_client=>create_by_destination, informe o caminho /api/v1/trial-balances, o método POST, o cabeçalho Content-Type: application/json e o corpo, e trate o status da resposta.

Como ler a resposta no SAP

StatusO que fazer no SAP
201Balancete importado. Guarde o trialBalanceId no log, se quiser.
200 com reenvio: trueO mesmo balancete já estava lá. Trate como sucesso.
400, 404, 409Recusa. Mostre o error a quem opera a integração e não repita sem corrigir.
401, 403Problema na chave ou no escopo. Abra um chamado.
429Limite de 30 chamadas por minuto. Espere o Retry-After e repita.

A lista completa está em erros e códigos, e o comportamento do reenvio em reenvio e versões.

Teste antes de ligar o SAP

Rode a mesma chamada com curl, com a chave de staging, para separar problema de configuração do SAP de problema de dado:

curl -s -X POST "https://api-staging.kinho.dev/api/v1/trial-balances" \
  -u "topo:$TOPO_CHAVE" \
  -H "Content-Type: application/json" \
  -d @balancete-2026-08.json

Se o curl responder 201 e o SAP não, o problema está na configuração do SAP.

Nesta página