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
- 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_...). - O endereço da API:
https://api-staging.kinho.devpara testes ehttps://api.topocontabil.com.brpara produção. - 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
| Campo | Valor |
|---|---|
| Tipo de autenticação | Basic |
| Usuário | topo |
| Senha | a 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)
- No Security Material do tenant (área de monitoramento, Manage Security), crie um artefato User Credentials. Nome sugerido:
TOPO_API. Usuáriotopo, senha igual à chave. Faça o deploy do artefato. - 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
- Address:
- Antes do adaptador, monte o corpo JSON e o cabeçalho
Content-Type: application/json. - 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
- Crie um canal receptor do tipo REST.
- Na aba de URL, informe
https://api-staging.kinho.dev/api/v1/trial-balancese o métodoPOST. - Em Transport Level Security, marque Use Basic Authentication e preencha o usuário
topoe a senha com a chave. - Na aba HTTP Headers, acrescente
Content-Typecom o valorapplication/json. Não crie um cabeçalhoAuthorizationmanual: ele substitui a autenticação configurada no canal.
ABAP (destino SM59)
- 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.
- Em Logon & Security, escolha Basic Authentication, com o usuário
topoe a senha igual à chave. - No programa, crie o cliente com
cl_http_client=>create_by_destination, informe o caminho/api/v1/trial-balances, o métodoPOST, o cabeçalhoContent-Type: application/jsone o corpo, e trate o status da resposta.
Como ler a resposta no SAP
| Status | O que fazer no SAP |
|---|---|
| 201 | Balancete importado. Guarde o trialBalanceId no log, se quiser. |
200 com reenvio: true | O mesmo balancete já estava lá. Trate como sucesso. |
| 400, 404, 409 | Recusa. Mostre o error a quem opera a integração e não repita sem corrigir. |
| 401, 403 | Problema na chave ou no escopo. Abra um chamado. |
| 429 | Limite 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.jsonSe o curl responder 201 e o SAP não, o problema está na configuração do SAP.