Pular para o conteúdo
AGROs OpenAGROs
Navegação menu

Integrações

Balança

Uma superfície operacional para sistemas de software enviarem pesagens ao AGROs. Ela é separada das coleções REST e OData: a consulta da base é leitura, enquanto registrar e cancelar são ações explícitas protegidas pelo escopo balanca.manage.

Use o token da integração

Crie um token dedicado em Configurações → Integrações, selecione Balança e configure o segredo no sistema consumidor por um cofre seguro. O token aparece uma única vez. A organização precisa ter o OpenAGROs habilitado, e quem cria ou revoga tokens precisa de openagros.manage.

Autenticação e permissão

O contrato canônico usa um token oag_... no cabeçalho Authorization:

HTTP
Authorization: Bearer oag_SEU_TOKEN

Para consumidores legados, o mesmo segredo também pode ser enviado em x-api-key. Em integrações novas, prefira sempre Authorization: Bearer. O token continua sujeito à expiração, revogação, limite por minuto e lista de IPs configurados.

Permissão/escopoUso
balanca.manage Registrar e cancelar pesagens; também pode consultar a base.
agriculture.read Consultar a base de pesagem, sem autorizar escrita.
openagros.manage Criar, rotacionar ou revogar tokens na tela de Integrações.

Balança também aparece na permissão de membros do OpenAGROs, tanto no convite quanto na edição. A permissão do membro e o escopo do token são controles diferentes: a integração deve receber o escopo no token, e o membro que administra esse token deve ter openagros.manage.

Endpoints

MétodoCaminho legadoEscopoFunção
GET /agricultura/colheita/pesagem/base balanca.manage ou agriculture.read Lista áreas, subáreas, produtos e locais ativos.
POST /balanca/pesagem balanca.manage Registra até 100 pesagens por requisição.
DELETE /balanca/pesagem/:numero_pesagem balanca.manage Cancela logicamente uma pesagem.

Os caminhos versionados equivalentes são /v1/agriculture/weighing/base, /v1/agriculture/weighing e /v1/agriculture/weighing/:numero_pesagem. O caminho legado é o indicado para consumidores que já usam o contrato do fabric-api.

Consultar a base

Consulte a base antes de enviar a primeira pesagem. O alias legado preserva o envelope { dados: ... }; o caminho versionado retorna diretamente { itens, locais }.

curl
curl --request GET \
  --url "https://service.agrosti.com.br/agricultura/colheita/pesagem/base" \
  --header "Authorization: Bearer oag_SEU_TOKEN"
JSON
{
  "dados": {
    "itens": [
      {
        "codigo": 17,
        "controle": 1,
        "fazenda": "Fazenda Norte",
        "area": "Talhão 03",
        "subarea": "Quadra A",
        "produto_codigo": 4301,
        "nome": "1200 - 2 Maçã (4301)",
        "unidade": "KG"
      }
    ],
    "locais": [
      { "codigo": 4, "nome": "Expedição", "fazenda": "Fazenda Norte" }
    ]
  }
}

Em itens, use area, subarea e produto_codigo devolvidos pela base. Em locais, nome é o destino disponível para a operação.

Registrar pesagens

O corpo é um array JSON, não um objeto envelopado. Cada requisição aceita no máximo 100 itens e pode retornar sucesso parcial.

JSON
[
  {
    "numero_pesagem": 123456,
    "id_empresa": 1,
    "data_entrada_pesagem": "2025-06-10T10:15:00Z",
    "data_saida_pesagem": "2025-06-10T10:37:00Z",
    "placa_cavalo": "ABC1D23",
    "placa_carreta": null,
    "origem": "Fazenda Norte",
    "area": "Talhão 03",
    "subarea": "Quadra A",
    "destino": "Expedição",
    "motorista": "João da Silva",
    "desc_interna_produto": "Maçã (4301)",
    "peso_tara": 10000,
    "peso_bruto": 35000,
    "peso_liquido": 25000,
    "peso_quebra": 100,
    "operador_pesagem": "balanca-01",
    "ticket": "TCK-123456",
    "ticket_origem": "ERP-123456",
    "op_numero": 1200,
    "op_controle": 2,
    "produto_codigo": 4301
  }
]
curl
curl --request POST \
  --url "https://service.agrosti.com.br/balanca/pesagem" \
  --header "Authorization: Bearer oag_SEU_TOKEN" \
  --header "Content-Type: application/json" \
  --data @pesagens.json

Campos de identificação e resolução

CampoRegra
numero_pesagem Inteiro positivo. Identifica a pesagem e funciona como chave de idempotência.
area + subarea Obrigatórios; delimitam a ordem/produto que será enriquecida no ERP.
produto_codigo Opcional, mas recomendado. É a forma mais determinística de localizar o produto.
op_numero + op_controle Fallback de resolução quando o código do produto não for enviado.
desc_interna_produto Obrigatória. Também pode resolver pelo código no final do texto, como Produto (4301).
id_empresa Obrigatório por compatibilidade com o contrato legado; a organização efetiva vem do token.

O serviço tenta localizar produto/OP por produto_codigo, depois pelo código ao final de desc_interna_produto, pelo par de OP e, por último, pela cultura descrita. Se não encontrar uma combinação válida de área, subárea e produto/OP, o item volta em erros e não é gravado.

Cancelar e reprocessar

O DELETE é um cancelamento lógico: preserva o registro histórico e marca a pesagem como cancelada. Repetir o DELETE é seguro, mas devolve 404 porque ela já não está ativa.

curl
curl --request DELETE \
  --url "https://service.agrosti.com.br/balanca/pesagem/123456" \
  --header "Authorization: Bearer oag_SEU_TOKEN"
JSON
{
  "sucesso": [123456],
  "erros": []
}

Uma pesagem ativa com o mesmo numero_pesagem não é inserida duas vezes e retorna Pesagem já processada anteriormente.. Depois de cancelada, ela pode ser enviada novamente para reprocessamento.

Respostas e falhas

StatusQuandoAção do consumidor
200 Todos os itens foram processados. Confirme sucesso.
207 Alguns itens foram processados e outros falharam. Reenvie somente os itens de erros depois de corrigir o motivo.
400 Array vazio ou payload inválido. Corrija o contrato antes de repetir.
422 Nenhum item do lote foi gravado. Trate cada mensagem em erros; não repita às cegas.
401 / 403 Token ausente, inválido, sem escopo, fora da allowlist ou organização sem OpenAGROs. Corrija token, escopo, entitlement ou IP antes de repetir.
404 Cancelamento de pesagem inexistente ou já cancelada. Considere a operação idempotentemente concluída.
Allowlist do sistema consumidor

Se o sistema consumidor exige whitelist, informe o IP público fixo de saída do web-server e, quando possível, repita a restrição na allowlist do próprio token. Assim o segredo não funciona a partir de outra origem, mesmo que seja copiado.