Sobre a Adm360

A Adm360 é a API administrativa da Fastcommerce. Ela permite que aplicações autorizadas consultem recursos administrativos e executem operações de acordo com as permissões do usuário da loja.

Este manual descreve os comandos atualmente disponíveis na Adm360. A disponibilidade efetiva de cada recurso depende da permissão do usuário, da configuração da loja e dos objetos liberados para a sessão.

Imagem com dois servidores que ilustra o processo de comunicação entre o Fastcommerce e um sistema terceiro através da API

Integre ERPs, CRMs, sistemas de BI e gateways de pagamento para consultar dados, gerenciar pedidos e executar os recursos administrativos disponíveis à sua aplicação.

1 - Acessando a API

O acesso ocorre por HTTPS (porta 443). Os comandos usam FORM POST e as respostas documentadas são JSON. A execução é síncrona; o tempo de resposta depende do comando e da quantidade de registros processados.

Endpoint geral:

https://www.rumo.com.br/adm/Adm360.ehc

O comando UPL possui endpoint separado para upload multipart: https://www.rumo.com.br/adm/Adm360UploadExec.asp.

A resposta pode ser quase imediata ou demorar alguns minutos, conforme o volume processado. Consulte os limites em Melhores práticas. Os exemplos usam FORM POST; UPL utiliza multipart/form-data.

2 - Histórico de versões

A versão da API permanece 1.0. Esta revisão amplia a documentação dos comandos já existentes e não altera, por si só, o contrato do servidor.

VersãoDataDetalhes
1.006/01/2025Criação do manual público.
1.014/10/2026Documentação ampliada de comandos, permissões, tabelas e operações.

3 - Loja para testes

O Fastcommerce não tem um ambiente de sandbox para realizar testes. Sugerimos portanto que crie uma loja para testes para desenvolver com a API.

Acesse o endereço http://novaloja.fastcommerce.com.br para criar sua loja de testes. Após cadastrá-la, avise-nos qual é o nome e o ID desta nova loja através do e-mail comercial@fastcommerce.com.br para que possamos deixar a loja em implantação e a mesma não seja cancelada após o prazo de avaliação.

4 - Usuário para testes

O usuário que vai consumir a API precisa basicamente de acesso aos relatórios e utilitários da loja, pois é através dele que as consultas e alterações são feitas.

Essa etapa deve ser realizada por um usuário da loja com permissão para criar novos usuários.

Acesse a administração da loja e no menu "Usuários" clique na opção "Incluir usuário".

O cadastro pode ser preenchido como no exemplo abaixo. A imagem ilustra a tela; conceda apenas as permissões necessárias à integração.

Imagem da tela de cadastro de usuários onde todas as opções de acesso a relatórios e utilitários estão selecionadas. Além disso deve ser preenchido os campos de nome de usuário, e-mail e senha

Crie um usuário exclusivo para cada integração, com senha forte e somente as permissões necessárias. Não reutilize usuários pessoais e não grave senha ou token em código, log, evidência ou documentação.

A permissão é verificada pelo servidor em cada comando. A existência de um comando neste manual não concede acesso a ele.

5 - Melhores Práticas

Seguem algumas dicas para melhor utilização da API:

  • 5.1) Para maximizar a performance na alteração de pedidos, inclua no JSON somente os campos obrigatórios e os campos que serão alterados. Não inclua no JSON campos que não serão alterados.

  • 5.2) Existe um limite de até 100 chamadas à API de pedidos por hora. Para maximizar o uso de cada chamada ao comando OrderManagement (OMN), é possível incluir mais de um registro que será afetado em cada chamada. Por exemplo, é possível incluir e alterar vários pedidos em uma mesma chamada. Se este limite for excedido, novas requisições serão bloqueadas até a próxima virada da hora. Por exemplo, se forem feitas mais de 100 requisições entre 13h e 14h, somente após as 14h será possível fazer novos acessos à API, e assim por diante. Quando o limite for excedido, o erro "ErrOrdersAccessLimit" será retornado pela API, com a seguinte mensagem: Reached limit of access per hour.

  • Encerre a sessão com LOU quando concluir o uso.
  • Verifique o resultado de cada item nos lotes REG e OMN.
  • Após timeout em uma escrita, confira o estado antes de reenviar: a operação pode ter sido aplicada.
  • Proteja senha, token e dados pessoais nos registros da integração.

6 - Comandos da API

Os comandos abaixo estão apresentados em ordem de uso. Salvo quando indicado, a chamada usa FORM POST para o endpoint geral e deve conter cmd, StoreID e, após o login, token.

ComandoFinalidadeEfeito
LINLogin e obtenção do token da sessão.Cria sessão.
LOUEncerramento da sessão.Invalida sessão.
HLPConsulta de tabelas, campos e ações liberadas.Leitura.
RELExecução de relatórios e consultas autorizadas.Leitura.
UTLExecução de utilitários autorizados.Varia por utilitário.
REGLeitura e manipulação de cadastros administrativos.Pode gravar ou excluir registros.
FMGGestão de arquivos e pastas da loja.Pode criar, editar, renomear, compactar ou excluir arquivos.
UPLUpload multipart de arquivos autorizados.Grava arquivos.
OMNInclusão e alteração de pedidos.Pode alterar pedidos, clientes, estoque e integrações, conforme payload.

7 - Permissões de acesso

Para o acesso a API, é necessário que o usuário tenha permissões de acordo com cada método:

As permissões são configuradas na ficha do usuário da loja e verificadas pelo servidor. Os níveis abaixo são mínimos: Leitura (1), Inclusão (2), Alteração (3) e Exclusão (4). Um nível superior atende ao mínimo indicado, mas não cria operações que a tabela não oferece.

ComandoPermissão necessáriaEscopo e observações
LINUsuário habilitado, credenciais válidas e acesso à loja.Valida os bloqueios de autenticação, inclusive IP e OTP quando aplicáveis. Não exige uma permissão única de módulo para efetuar o login.
LOUSessão autenticada válida.Encerra a própria sessão, sem exigir permissão adicional de cadastro.
HLPSessão válida; permissões das tabelas consultadas.Mostra campos e ações REG permitidos ao usuário. Não concede permissões nem substitui o catálogo REL/UTL.
RELAcesso à categoria de relatórios correspondente, nas permissões de relatórios/utilitários do usuário.O objeto escolhido deve estar disponível para a loja e para o perfil. Ter acesso a um relatório não libera todos os demais.
UTLAcesso à categoria de utilitários correspondente, nas permissões de relatórios/utilitários do usuário.Depende do utilitário escolhido e de suas validações específicas. Pode alterar dados.
REGPermissão do módulo e nível exigido por tabela/ação, conforme a matriz abaixo.Consulte HLP para os campos e ações disponíveis na sessão.
FMGDesign: Alteração (3), ou Produtos: Alteração (3).Design permite acessar a raiz de arquivos da loja e suas áreas. Somente Produtos restringe a base à pasta prod. A exigência também vale para listar arquivos.
UPL — HTML/imagensDesign: Alteração (3).FileType=1 (HTML) e FileType=2 (imagens).
UPL — produtosProdutos: Inclusão (2).FileType=3. A permissão de Design, isoladamente, não substitui esta exigência para o tipo 3.
OMNClientes: pelo menos Leitura (1) e acesso a Pedidos, com algum status de pedido liberado.São as condições de entrada verificadas pelo comando. Os dados e as operações também passam pelas validações de negócio de pedidos.

7.1 - Permissões por tabela REG

Cada célula indica o nível mínimo no módulo da linha. O traço significa que a operação não é oferecida por REG, mesmo para um usuário com nível superior.

TabelaMóduloLer (r)Incluir (i)Alterar (u)Excluir (d)
bannersFinançasLeitura (1)Inclusão (2)Alteração (3)Alteração (3)
couponsFinançasLeitura (1)Inclusão (2)Alteração (3)Alteração (3)
partnersFinançasLeitura (1)Inclusão (2)Alteração (3)Alteração (3)
freightLocationsFinançasLeitura (1)Inclusão (2)Alteração (3)Alteração (3)
freightPricesFinançasLeitura (1)Inclusão (2)Alteração (3)Alteração (3)
loginPropertiesPrópria sessãoSessão válida———
messagesMensagensLeitura (1)Inclusão (2)Alteração (3)Exclusão (4)
newsMensagensLeitura (1)Inclusão (2)Alteração (3)Exclusão (4)
paymentsDepositFinançasLeitura (1)—Alteração (3)—
paymentsLimitsFinançasLeitura (1)—Alteração (3)—
reportUtilitiesRelatórios/utilitáriosCategoria autorizada; utilities=false para relatórios ou true para utilitários———
usersUsuáriosLeitura (1)Inclusão (2)Alteração (3)—

A exclusão de banners, cupons, parceiros, localidades e tarifas exige Alteração (3); notícias e modelos de mensagens exigem Exclusão (4). As proteções de negócio continuam valendo, por exemplo para cupons utilizados e origens protegidas. Em reportUtilities, a permissão é por categoria, não uma comparação numérica com os níveis 1 a 4.

Atenção:

Acessos à API não devem estar diretamente relacionados aos acessos a qualquer página da loja virtual, ou seja, cada acesso de cliente da loja não deve corresponder a um acesso à API. Para evitar que isto ocorra, existe uma limitação no volume de acessos por hora aos métodos da API.

Obs: É extremamente recomendado criar um usuário específico para cada aplicação que for utilizar a API. Este usuário deve ter nome de usuário e senha fortes e únicas. Insira as permissões de acordo com que a aplicação irá utilizar. Por exemplo, se a aplicação irá apenas acessar os dados de pedidos, basta inserir acesso a relatórios de pedidos e em todos os demais campos deixar sem acesso.

8 - LIN, LOU e HLP

8.1 - LIN - Login

Use LIN para iniciar uma sessão e obter o token utilizado nos demais comandos.

CampoDescrição
cmdValor LIN.
StoreNameNome da loja.
StoreIDIdentificador da loja.
UsernameUsuário autorizado.
PasswordSenha do usuário.
<form action="https://www.rumo.com.br/adm/Adm360.ehc" method="POST">
  <input name="StoreName" value="STORE_NAME">
  <input name="StoreID" value="STORE_ID">
  <input name="Username" value="API_USERNAME">
  <input name="Password" value="API_PASSWORD">
  <input name="cmd" value="LIN">
</form>

A resposta pode conter cmd, id, st, usr, tk, err, errDescr, begin, end e et. O campo tk é segredo. Envie seu valor no campo token das chamadas seguintes.

8.2 - LOU - Logout

Use LOU ao encerrar o uso da API. Envie cmd=LOU, StoreID e token. Uma resposta ErrOK confirma o encerramento; a integração também deve descartar localmente o token após a tentativa.

8.3 - HLP - Ajuda de recursos

Use HLP após o login para descobrir tabelas, campos, tipos e ações liberadas ao usuário. Envie cmd=HLP, StoreID e token. O parâmetro opcional table permite consultar uma tabela específica. A ajuda das tabelas REG não substitui o catálogo de relatórios e utilitários.

Atenção: o resultado de HLP descreve os campos e as ações REG disponíveis; o servidor valida as permissões em cada operação. Não presuma que uma tabela ou operação desta documentação estará liberada para todo usuário.

9 - REL e UTL

9.1 - REL - Relatórios

REL executa relatórios autorizados pelo catálogo da loja. Os campos mais usados são ObjectID ou ObjectName, Page, QtRecords, TipoPesquisa, Fields e Par1 até Par8.

Consulte primeiro a tabela reportUtilities com REG para obter o catálogo permitido, os parâmetros e os limites. A estrutura de retorno pode conter metadados como fields, fieldsTypes, dbTypes e dados tabulares. Uma página sem registros e um resultado válido.

9.2 - UTL - Utilitários

UTL executa utilitários cadastrados no catálogo autorizado. Alguns utilitários podem gerar CSV, ZIP, redirecionamentos ou efeitos de escrita. Antes de automatizar, confirme objeto, parâmetros, efeito esperado e retorno na loja de testes autorizada.

REL e UTL não aceitam ordenação arbitrária do cliente; a consulta disponível é definida pelo objeto autorizado. Não repita automaticamente uma chamada cujo resultado tenha ficado incerto.

10 - REG - Cadastros

REG recebe o campo actions com um array JSON. Cada ação usa a para a operação, t para a tabela e, quando aplicável, id, f para pares campo/valor, out, order, page e pageSize.

AçãoSignificado
rLeitura.
iinclusão.
ualteração.
dexclusão.
[
  {
    "a": "r",
    "t": "news",
    "out": ["id", "title", "date", "enable"],
    "order": ["id"],
    "page": 1,
    "pageSize": 20
  }
]

Limites conhecidos: até 11 ações por chamada, sendo até 10 leituras e 5 escritas; o JSON de actions possui limite de 4096 caracteres, incluindo a serialização e os escapes. Confira o resultado individual de cada ação, inclusive quando o erro geral for ErrOK.

10.1 - Tabelas disponíveis

As tabelas abaixo são as atualmente catalogadas. A permissão efetiva e os campos aceitos devem sempre ser conferidos pelo HLP.

TabelaAçõesPermissão/usoObservação
bannersr/i/u/dFinanças; banners.Use weight para peso do banner.
couponsr/i/u/dFinanças; cupons.Exclusão de cupom utilizado é bloqueada.
partnersr/i/u/dFinanças; origens/parceiros.Origens padrão do sistema possuem proteção.
freightLocationsr/i/u/dFinanças; localidades de frete.Não cobre frete por faixa de CEP.
freightPricesr/i/u/dFinanças; tarifas de frete.Vinculada a freightLocations.
loginPropertiesrUsuário da sessão.Leitura 1:1 de identidade e permissões.
messagesr/i/u/dMensagens; modelos.Não envia e-mail, SMS ou notificação.
newsr/i/u/dMensagens; notícias.CRUD requer homologação atualizada antes de uso por terceiros.
paymentsDepositr/uFinanças; depósito.Registro único da loja.
paymentsLimitsr/uFinanças; limites de pagamento.Registro único da loja.
reportUtilitiesrPesquisas; catálogo.Use para descobrir REL e UTL disponíveis.
usersr/i/uUsuários administrativos.Não há exclusão por REG.

Não há tabelas REG genéricas para produtos, clientes, categorias ou pedidos. Consultas de produtos, clientes e pedidos devem usar REL quando o objeto estiver autorizado; pedidos também podem ser incluídos ou alterados com OMN.

11 - FMG e UPL - Arquivos

11.1 - FMG - Gestão de arquivos

FMG administra arquivos e pastas da loja. As operações conhecidas são list, create, edit, rename, delete e zip. Os campos variam por operação e incluem operation, path, filter, page, pageSize, items, folderName, fileName e fileContent.

Comece por list. Valide o caminho retornado antes de criar, editar, renomear, excluir ou compactar. Não há contrato dedicado de mover, baixar ou ler conteúdo por FMG; preview e download dependem da URL pública configurada pela loja.

11.2 - UPL - Upload multipart

UPL usa multipart/form-data no endpoint de upload. Envie token, StoreID ou IDLoja, Path, MaxFiles, FileType, SaveAs0 até SaveAs3, Overwrite0 até Overwrite3 e os arquivos.

FileTypeÁrea
1HTML.
2Imagens.
3Arquivos de produto.

O backend suporta até quatro arquivos por chamada. O limite total documentado é 4 MiB; arquivos comuns possuem limite padrão de 400 KiB. ZIP possui limites específicos por área. A sobrescrita deve ser escolha explícita: omita o campo quando não desejar sobrescrever. Não envie a string false: o campo preenchido pode habilitar a sobrescrita.

12 - OMN - Pedidos

OMN recebe o JSON OrdersData. O cmd do formulário deve ser OMN; o campo orders[].cmd define insert ou update para cada pedido.

CampoDescrição
cmdValor OMN.
StoreIDIdentificador da loja.
tokenToken válido obtido por LIN.
OrdersDataJSON com um ou mais pedidos.
<form action="https://www.rumo.com.br/adm/Adm360.ehc" method="POST">
  <input name="StoreID" value="STORE_ID">
  <input name="token" value="API_TOKEN">
  <input name="cmd" value="OMN">
  <input name="OrdersData" value="{...JSON...}">
</form>
{
  "send-webhook-notifications": false,
  "sync-marketplaces": false,
  "sync-stores": false,
  "manage-stock": false,
  "accept-only-store-products": true,
  "orders": [
    {
      "cmd": "update",
      "order": { "number": "ORDER_NUMBER", "status": "Approved" }
    }
  ]
}

As opções globais podem disparar webhook, sincronização de marketplaces, sincronização entre lojas ou atualização de estoque. Escolha cada uma conscientemente. Em update, envie somente os campos obrigatórios e os campos que serão alterados; a alteração de itens não é contrato confirmado.

A resposta pode conter order_1, order_2, received, valid, invalid, inserted, updated, err e errDescr. ErrProcessingOrders indica processamento parcial: confira cada pedido retornado.

12.1 - Estrutura completa e retornos de pedidos

Estrutura do JSON:

Para inclusão o comando (cmd) dentro de cada registro do array "orders" deve ser insert e para atualização update. Para alteração devem ser enviados somente os campos que tiverem alterações, não é necessário enviar todos os campos.

                
{
  "send-webhook-notifications": false,
  "sync-marketplaces": false,
  "sync-stores": false,
  "manage-stock": false,
  "accept-only-store-products": true,
  "orders": [
    {
      "cmd": "insert/update",
      "order": {
        "number": "165240550",
        "ref_number": "MYNUMBER00001",
        "transaction_status": "WAITING PAYMENT",
        "payment_status": "PENDING",
        "custom_data": "Informações personalizadas",
        "invoice": "111111111111111111111",
        "amount_without_shipping": 31.5,
        "coupon_discount": 0,
        "discount_without_shipping": 10,
        "short_obs": "OBS CURTA",
        "status": "New"
      },
      "customer": {
        "name": "Nome da pessoa",
        "gender": "male",
        "birth_date": "1978-01-01T03:00:00Z",
        "email": "cliente@example.test",
        "phone": "(21) 5555-1234",
        "cellphone": "11988886666",
        "custom_1": "info 1",
        "custom_2": "info 2",
        "custom_3": "info 3",
        "document": {
          "type": "CPF",
          "number": "01234567890"
        },
        "additional_document": {
          "type": "RG",
          "number": "1111111111"
        },
        "address": {
          "country": "Brasil",
          "street": "Rua Sete de Setembro",
          "street_number": "123",
          "complement": "Comp1",
          "neighborhood": "Centro Casa",
          "city": "Rio de Janeiro",
          "state": "RJ",
          "zipcode": "20050-001"
        }
      },
      "payment": {
        "method": "Cartão de Crédito",
        "processed_by": "Pagar.me",
        "brand": "VISA",
        "installments": 3,
        "interest": 0
      },
      "shipping": {
        "name": "Nome destinatário",
        "email": "destino@example.test",
        "amount": 10.5,
        "amount_packaging": 0,
        "custom_1": "info 1",
        "custom_2": "info 2",
        "custom_3": "info 3",
        "discount": 0,
        "message": "Mensagem do cliente",
        "gift": false,
        "phone": "(21) 2222-2222",
        "info": "CEP 04516-001 (SEDEX 10)",
        "obs": "3 dias",
        "tracking_code": "SDX00011",
        "delivery_date": "",
        "address": {
          "country": "Brasil",
          "street": "Rua Sete de Setembro",
          "street_number": "123",
          "complement": "comple",
          "neighborhood": "Centro Casa",
          "city": "Rio de Janeiro",
          "state": "RJ",
          "zipcode": "20050-001"
        }
      },
      "items": [
        {
          "id": 170070,
          "sku_code": "111",
          "name": "Camiseta",
          "category_name": "Moda",
          "bar_code": null,
          "descriptor_1": null,
          "descriptor_2": "P",
          "descriptor_3": null,
          "simple_descriptor_1": null,
          "simple_descriptor_2": null,
          "simple_descriptor_3": null,
          "color": "Branco",
          "filters": null,
          "unit_price": 11,
          "quantity": 1,
          "weight": 12000
        },
        {
          "id": 170071,
          "sku_code": "222",
          "name": "Camiseta",
          "category_name": "Moda",
          "bar_code": null,
          "descriptor_1": null,
          "descriptor_2": "M",
          "descriptor_3": null,
          "simple_descriptor_1": null,
          "simple_descriptor_2": null,
          "simple_descriptor_3": null,
          "color": "Branco",
          "filters": null,
          "unit_price": 12,
          "quantity": 2,
          "weight": 0
        }
      ]
    }
  ]
}
                
              

É possível incluir/alterar múltiplos pedidos por vez.

O resultado desta operação será retornado em JSON. Segue o modelo:

                
{
  "begin": "2025-01-16T20:08:02-03:00",
  "srv": "serverName",
  "cmd": "OMN",
  "send-webhook-notifications": false,
  "sync-marketplaces": false,
  "sync-stores": false,
  "manage-stock": false,
  "accept-only-store-products": true,
  "order_1": {
    "cmd": "insert",
    "ref_number": "MYNUMBER00001",
    "shipping_amount": 10.5,
    "order_totalItems": 35,
    "order_amount_without_shipping": 31.5,
    "order_totalAmount": 42,
    "customer_id": 2449,
    "customer_updated": true,
    "customer_inserted": false,
    "order_updated": false,
    "order_inserted": true,
    "order_id": 6240,
    "order_number": 165240724,
    "items_1": "OK: inserted [170070]",
    "items_2": "OK: inserted [170071]",
    "err": "OK"
  },
  "received": 1,
  "valid": 1,
  "invalid": 0,
  "inserted": 1,
  "updated": 0,
  "sess": "173403027",
  "end": "2025-01-16T20:08:02-03:00",
  "et": 200
}
                
              

Obs: Note que o order_number gerado automaticamente pelo sistema é retornado neste JSON.

Veja a lista com os possíveis códigos de erros (<err>) e suas descrições (<errDescr>):

err errDescr
ErrOK OK
ErrOrderManagementNoAccess Access denied to handle orders
ErrOrderManagementNoData OrderData not sent
ErrOrderManagementInvData Invalid OrderData
ErrOrdersInvalid Invalid Orders
ErrOrdersRecordsLimit Records limit exceeded
ErrOrdersAccessLimit Reached limit of access per hour
ErrOrderInvCmd Invalid command
ErrProcessingOrders An error occurred in one or more records

Se houver erros, o resultado desta operação será retornado em JSON da seguinte forma:


{
  "begin": "2025-01-16T20:10:45-03:00",
  "srv": "dom0web7",
  "cmd": "OMN",
  "err": "ErrOrderManagementInvData",
  "errDescr": "Invalid OrderData",
  "sess": "173403027",
  "end": "2025-01-16T20:10:45-03:00",
  "et": 32
}
              

{
  "begin": "2025-01-16T20:12:36-03:00",
  "srv": "dom0web7",
  "cmd": "OMN",
  "send-webhook-notifications": false,
  "sync-marketplaces": false,
  "sync-stores": false,
  "manage-stock": false,
  "accept-only-store-products": true,
  "order_1": {
    "cmd": "update",
    "order_number": 1652405501,
    "ref_number": "MYNUMBER00001",
    "shipping_amount": 10.5,
    "order_amount_without_shipping": 31.5,
    "order_totalAmount": 42,
    "err": "order.number not found"
  },
  "order_2": {
    "cmd": "update",
    "order_number": 165240551,
    "ref_number": "MYNUMBER00001",
    "shipping_amount": 10.5,
    "order_amount_without_shipping": 31.5,
    "order_totalAmount": 42,
    "customer_id": 2433,
    "customer_updated": true,
    "customer_inserted": false,
    "order_updated": true,
    "order_inserted": false,
    "order_id": 6060,
    "err": "OK"
  },
  "received": 2,
  "valid": 1,
  "invalid": 1,
  "inserted": 0,
  "updated": 1,
  "err": "ErrProcessingOrders",
  "errDescr": "An error occurred in one or more records",
  "sess": "173403027",
  "end": "2025-01-16T20:12:36-03:00",
  "et": 104
}
              

Sempre serão retornados os registros e indicado em cada registro se ocorreu ou não erro ao processar aquele registro.

Outras informações do retorno:

Atributo Descrição
received Número de registros recebidos
valid Número de registros válidos
invalid Número de registros inválidos
inserted Número de registros inseridos
updated Número de registros atualizados
err Erro
errDescr Descrição do erro

13 - Realizando Testes

Disponibilizamos uma página para facilitar a realização de testes de integração via navegador e assim conhecer melhor o funcionamento da API. Segue o endereço:

API Test

13.1 - Comando LIN

Neste teste, será possível ver o processo para fazer login e obter token para as requisições da API.

No campo Cmd selecione a opção Login (LIN). Preencha os campos e clique em Entrar.

Campos retornados pela API:

Campo Descrição
cmd Comando utilizado
id ID da loja
st Nome da loja
usr Usuário
err Erro
errDescr Descrição do erro
tk Token para chamadas à API dos demais comandos

Como resultado, teremos a seguinte estrutura:


{
  "begin": "2025-01-17T18:09:43-03:00",
  "srv": "dom0web7",
  "cmd": "LIN",
  "id": 184,
  "st": "STORE_NAME",
  "usr": "API_USERNAME",
  "err": "ErrOK",
  "errDescr": "OK",
  "sess": "179662158",
  "tk": "API_TOKEN",
  "end": "2025-01-17T18:09:43-03:00",
  "et": 16
}
              

13.2 - Comando OMN

Neste teste, serão alterados dois pedidos da loja de testes. Substitua os números ilustrativos por pedidos dessa loja. As opções de webhook, sincronização e estoque estão desativadas nos exemplos; habilite cada uma somente quando fizer parte do teste planejado.

No campo Cmd selecione a opção OMN. Preencha os campos IDLoja, Token e no campo OrdersData informe o JSON com os registros que deseja alterar e clique em Entrar.

Exemplo


{
  "send-webhook-notifications": false,
  "sync-marketplaces": false,
  "sync-stores": false,
  "manage-stock": false,
  "accept-only-store-products": true,
  "orders": [
    {
      "cmd": "update",
      "order": {
        "number": "165240550",
        "status": "New"
      }
    },
    {
      "cmd": "update",
      "order": {
        "number": "165240551",
        "status": "Approved"
      }
    }
  ]
}
              

Como resultado, teremos a seguinte estrutura:


{
  "begin": "2025-01-17T18:25:22-03:00",
  "srv": "dom0web7",
  "cmd": "OMN",
  "send-webhook-notifications": false,
  "sync-marketplaces": false,
  "sync-stores": false,
  "manage-stock": false,
  "accept-only-store-products": true,
  "order_1": {
    "cmd": "update",
    "order_number": 165240550,
    "customer_inserted": false,
    "customer_updated": false,
    "customer_id": 2433,
    "order_updated": true,
    "order_inserted": false,
    "order_id": 6059,
    "err": "OK"
  },
  "order_2": {
    "cmd": "update",
    "order_number": 165240551,
    "customer_inserted": false,
    "customer_updated": false,
    "customer_id": 2433,
    "order_updated": true,
    "order_inserted": false,
    "order_id": 6060,
    "err": "OK"
  },
  "received": 2,
  "valid": 2,
  "invalid": 0,
  "inserted": 0,
  "updated": 2,
  "err": "ErrOK",
  "errDescr": "OK",
  "sess": "179662158",
  "end": "2025-01-17T18:25:22-03:00",
  "et": 124
}
              
Preparação para os demais testes. Faça o login do item 13.1 e substitua STORE_ID e API_TOKEN pelos valores da sessão. Os blocos abaixo mostram campos de formulário, um por linha; envie-os por POST com application/x-www-form-urlencoded, deixando o cliente HTTP codificar os valores. O upload tem formato multipart próprio. Os exemplos descrevem o que testar; não executam chamadas ao abrir este manual.

13.3 - HLP: descobrir campos e ações

Envie ao endpoint https://www.rumo.com.br/adm/Adm360.ehc:

cmd=HLP
StoreID=STORE_ID
token=API_TOKEN
table=news

Conferir: o retorno tableHelp, os campos de leitura e as ações liberadas para news. Se houver permissão de exclusão, confira deleteByID. Repita omitindo table para consultar a ajuda disponível. Ausência de uma ação pode decorrer da permissão ou de a tabela não oferecer a operação.

13.4 - REG: leitura e ciclo de cadastro

Comece com uma leitura de notícias:

cmd=REG
StoreID=STORE_ID
token=API_TOKEN
actions=[{"a":"r","t":"news","out":["id","title","date","enable"],"page":1,"pageSize":20}]

Conferir: resultado individual da ação e registros retornados. Uma lista vazia não representa falha. Para exercitar escrita, use uma loja de testes e um registro criado exclusivamente para esse teste, com as permissões da matriz REG.

Mantenha cmd=REG, StoreID e token. Em chamadas separadas, substitua o campo actions pelos exemplos a seguir.

Incluir uma notícia desativada:

[{"a":"i","t":"news","f":[["title","Teste de integracao ADM360"],["body","Conteudo ficticio para teste."],["enable",false]]}]

Anote o id devolvido pela ação de inclusão. Nos próximos exemplos, 123 é apenas um número ilustrativo: substitua-o pelo ID realmente criado neste teste.

Alterar e ler para conferir:

[{"a":"u","t":"news","id":123,"f":[["title","Teste de integracao revisado"]]}]
[{"a":"r","t":"news","id":123,"out":["id","title","enable"]}]

Excluir somente o registro criado para teste:

[{"a":"d","t":"news","id":123}]

Conferir: sucesso de cada ação e ausência do registro após a exclusão. Não reutilize um ID preexistente da loja. O erro geral ErrOK não dispensa a leitura dos resultados individuais.

13.5 - REL: descobrir e executar um relatório

Primeiro consulte o catálogo de relatórios por REG:

cmd=REG
StoreID=STORE_ID
token=API_TOKEN
actions=[{"a":"r","t":"reportUtilities","f":[["utilities",false]],"out":["id","name","type","description","parName1","parType1","parSize1"]}]

Escolha um objeto retornado para o usuário e consulte seus parâmetros parName1..8, parType1..8 e parSize1..8, acrescentando os campos necessários a out. Substitua REPORT_ID pelo ID escolhido:

cmd=REL
StoreID=STORE_ID
token=API_TOKEN
ObjectID=REPORT_ID
Page=1
QtRecords=20

Se o objeto exigir parâmetros, acrescente Par1 até Par8 conforme o catálogo. Não envie parâmetros fictícios nem assuma que todos os relatórios aceitam os mesmos valores.

Conferir: erro geral, identificação do relatório, dados e metadados retornados. Teste Page=2 mantendo o restante dos campos. Em resultado vazio, alguns metadados podem não aparecer.

13.6 - UTL: selecionar e testar um utilitário

Consulte o catálogo de utilitários autorizados:

cmd=REG
StoreID=STORE_ID
token=API_TOKEN
actions=[{"a":"r","t":"reportUtilities","f":[["utilities",true]],"out":["id","name","type","description","parName1","parType1","parSize1"]}]

Leia a descrição e todos os parâmetros do objeto escolhido. Este próximo passo pode alterar dados: escolha um utilitário apropriado à loja de testes e confirme seu efeito antes de enviar.

cmd=UTL
StoreID=STORE_ID
token=API_TOKEN
ObjectID=UTILITY_ID

Substitua UTILITY_ID e acrescente apenas os parâmetros Par1..8 exigidos pelo objeto. Não há um utilitário universal nem um modo de simulação implícito neste exemplo.

Conferir: retorno e efeito específicos do utilitário. Alguns geram arquivo ou redirecionamento. Em timeout ou resposta inesperada, confira o resultado na loja antes de repetir a operação.

13.7 - FMG: listar e criar uma pasta de teste

Com permissão de Alteração em Design, liste a área HTML:

cmd=FMG
StoreID=STORE_ID
token=API_TOKEN
Operation=list
path=htm
page=1
pageSize=20

Conferir: path, folderList, fileList e informações de paginação. Com acesso somente a Produtos, envie path vazio para listar a base prod; o caminho é relativo à área liberada.

Para testar criação, confirme antes que a pasta testeapi não existe. Use outro nome exclusivo se necessário:

cmd=FMG
StoreID=STORE_ID
token=API_TOKEN
Operation=create
path=htm
folderName=testeapi

Conferir: retorno sem erro e presença da pasta em uma nova listagem de htm. O teste de upload abaixo pode utilizar essa pasta. Não remova pastas que já existiam antes do teste.

13.8 - UPL: enviar um arquivo de teste

Crie localmente um pequeno arquivo testeapi.htm contendo apenas um parágrafo de teste. Para este exemplo, use Alteração em Design e a pasta htm/testeapi criada no item anterior. Configure uma chamada POST multipart para https://www.rumo.com.br/adm/Adm360UploadExec.asp.

Campo multipartTipoValor
StoreIDTextoSTORE_ID
tokenTextoAPI_TOKEN
PathTextohtm/testeapi
FileTypeTexto1
MaxFilesTexto1
SaveAs0Textotesteapi.htm
File0ArquivoSelecionar o arquivo local testeapi.htm

Omita Overwrite0 para não sobrescrever. Não envie a string false, pois um valor preenchido pode ativar a sobrescrita. Deixe o cliente HTTP gerar o cabeçalho multipart com seu delimitador (boundary); não envie o arquivo como texto de formulário comum.

Conferir: resultado do upload e presença de testeapi.htm em uma listagem FMG de htm/testeapi. Para limpar somente o arquivo criado neste teste:

cmd=FMG
StoreID=STORE_ID
token=API_TOKEN
Operation=delete
path=htm/testeapi
items=["testeapi.htm"]

Depois de confirmar que a pasta está vazia e foi criada por você neste teste, remova-a com Operation=delete, path=htm e items=["testeapi"]. Confira o retorno individual da operação.

13.9 - LOU: encerrar a sessão

Execute por último, após concluir os demais testes:

cmd=LOU
StoreID=STORE_ID
token=API_TOKEN

Conferir: retorno ErrOK. Uma chamada autenticada posterior com o token encerrado deve ser recusada; descarte o token e faça um novo LIN para continuar. Não grave seu valor nos registros de teste.

14 - Dicionário de Dados

14.1 - Order Management [Comando OMN]

JSON de API de pedidos [Inclusão/Alteração]

Campo Tipo/Opções Descrição
send-webhook-notifications Boolean (true/false) Indica se notificações via webhook devem ser enviadas.
sync-marketplaces Boolean (true/false) Indica se os marketplaces devem ser sincronizados.
sync-stores Boolean (true/false) Indica se as lojas devem ser sincronizadas.
manage-stock Boolean (true/false) Indica se o gerenciamento de estoque está ativo.
accept-only-store-products Boolean (true/false) Indica se apenas produtos da loja são aceitos.
orders[].cmd String ("insert/update") Indica o comando a ser executado para o pedido.
orders[].order.number String Número do pedido. (OBRIGATÓRIO quando for alteração)
orders[].order.ref_number String Número de referência personalizado do pedido.
orders[].order.transaction_status String ("WAITING PAYMENT", "PAID", etc.) Status da transação do pedido.
orders[].order.payment_status String ("PENDING", "PAID", etc.) Status do pagamento do pedido.
orders[].order.custom_data String Dados personalizados do pedido.
orders[].order.invoice String Número da nota fiscal do pedido.
orders[].order.amount_without_shipping Float Valor total do pedido, sem incluir o frete.
orders[].order.coupon_discount Float Desconto aplicado via cupom.
orders[].order.discount_without_shipping Float Desconto aplicado, excluindo o valor do frete.
orders[].order.short_obs String Observação curta sobre o pedido.
orders[].order.status String ("New", "Processed", etc.) Status geral do pedido.
orders[].customer.name String Nome completo do cliente.
orders[].customer.gender String ("male", "female") Gênero do cliente.
orders[].customer.birth_date String (ISO 8601) Data de nascimento do cliente no formato ISO 8601 (ex.: 1978-01-01T03:00:00Z).
orders[].customer.email String Email do cliente. (OBRIGATÓRIO)
orders[].customer.phone String Telefone fixo do cliente.
orders[].customer.cellphone String Celular do cliente.
orders[].customer.custom_1 String Informação personalizada 1 do cliente.
orders[].customer.custom_2 String Informação personalizada 2 do cliente.
orders[].customer.custom_3 String Informação personalizada 3 do cliente.
orders[].customer.document.type String ("CPF", "CNPJ") Tipo do documento principal do cliente.
orders[].customer.document.number String Número do documento principal do cliente.
orders[].customer.additional_document.type String ("RG", etc.) Tipo de documento adicional do cliente.
orders[].customer.additional_document.number String Número do documento adicional do cliente.
orders[].customer.address.country String País do endereço do cliente.
orders[].customer.address.street String Logradouro do endereço do cliente.
orders[].customer.address.street_number String Número do endereço do cliente.
orders[].customer.address.complement String Complemento do endereço do cliente.
orders[].customer.address.neighborhood String Bairro do endereço do cliente.
orders[].customer.address.city String Cidade do endereço do cliente.
orders[].customer.address.state String Estado do endereço do cliente.
orders[].customer.address.zipcode String CEP do endereço do cliente.
orders[].payment.method String Método de pagamento utilizado no pedido (ex.: "Cartão de Crédito", "Boleto", etc.).
orders[].payment.processed_by String Nome do processador de pagamento (ex.: "Pagar.me", "PayPal", etc.).
orders[].payment.brand String Bandeira do cartão de crédito (ex.: "VISA", "MasterCard", etc.).
orders[].payment.installments Integer Número de parcelas escolhidas pelo cliente.
orders[].payment.interest Decimal Valor dos juros aplicados ao pagamento parcelado.
orders[].shipping.name String Nome do destinatário do pedido.
orders[].shipping.email String Email do destinatário.
orders[].shipping.amount Decimal Valor do frete do pedido.
orders[].shipping.amount_packaging Decimal Valor adicional para embalagem no pedido.
orders[].shipping.custom_1 String Campo customizável 1 relacionado ao frete.
orders[].shipping.custom_2 String Campo customizável 2 relacionado ao frete.
orders[].shipping.custom_3 String Campo customizável 3 relacionado ao frete.
orders[].shipping.discount Decimal Valor de desconto aplicado no frete.
orders[].shipping.message String Mensagem personalizada do cliente sobre o frete.
orders[].shipping.gift Boolean Indica se o pedido é um presente (true ou false).
orders[].shipping.phone String Telefone do destinatário do pedido.
orders[].shipping.info String Informações detalhadas sobre o envio (ex.: tipo de entrega, CEP).
orders[].shipping.obs String Observações adicionais sobre o frete.
orders[].shipping.tracking_code String Código de rastreamento do pedido.
orders[].shipping.delivery_date String (ISO 8601) Data prevista para entrega do pedido (formato ISO 8601).
orders[].shipping.address.country String País do destinatário.
orders[].shipping.address.street String Rua do endereço de entrega.
orders[].shipping.address.street_number String Número do endereço de entrega.
orders[].shipping.address.complement String Complemento do endereço.
orders[].shipping.address.neighborhood String Bairro do endereço de entrega.
orders[].shipping.address.city String Cidade do endereço de entrega.
orders[].shipping.address.state String Estado do endereço de entrega (ex.: "RJ", "SP").
orders[].shipping.address.zipcode String CEP do endereço de entrega.
orders[].items[].id Integer ID único do item no pedido.
orders[].items[].sku_code String Código SKU (Stock Keeping Unit) do produto.
orders[].items[].name String Nome do item no pedido.
orders[].items[].category_name String Nome da categoria à qual o item pertence.
orders[].items[].bar_code String Código de barras do item (pode ser null).
orders[].items[].descriptor_1 String Descritor adicional 1 do item (pode ser null).
orders[].items[].descriptor_2 String Descritor adicional 2 do item (pode ser null).
orders[].items[].descriptor_3 String Descritor adicional 3 do item (pode ser null).
orders[].items[].simple_descriptor_1 String Descritor simplificado 1 do item (pode ser null).
orders[].items[].simple_descriptor_2 String Descritor simplificado 2 do item (pode ser null).
orders[].items[].simple_descriptor_3 String Descritor simplificado 3 do item (pode ser null).
orders[].items[].color String Cor do item no pedido.
orders[].items[].filters String Filtros aplicáveis ao item (pode ser null).
orders[].items[].unit_price Decimal Preço unitário do item.
orders[].items[].quantity Integer Quantidade do item no pedido.
orders[].items[].weight Decimal Peso do item em gramas.

15 - Tratamento de Erros

As respostas usam err e errDescr para informar o resultado geral. O envelope pode incluir begin, srv, cmd, sess, end e et.

{
  "err": "ErrOK",
  "errDescr": "OK"
}
  • Não grave senha, token, OTP ou dados pessoais em logs.
  • Use somente HTTPS e um usuário exclusivo para cada aplicação.
  • Em operações de escrita, implemente timeout, retentativa limitada e conciliação antes de reenviar.
  • Teste em loja autorizada e mantenha trilha de auditoria de alterações.

Os erros são retornados em "err" e "errDescr" respectivamente.

No exemplo o retorno aponta que não ocorreram erros:


  "err": "ErrOK",
  "errDescr": "OK",
              

Exemplo de retorno da API quando ocorre erro:


  "err": "ErrOrderManagementInvData",
  "errDescr": "Invalid OrderData",