{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"c69e5817-0462-43f7-9a57-39d648867fa4","name":"ERP - Integração","description":"### **Considerações iniciais**\n\nEsta documentação detalha os endpoints disponíveis na API do ERP e disponibiliza um console interativo para que você consiga testar as requisições sem ser necessário escrever nenhuma linha de código. Além disso, através do console também é possível gerar automaticamente o código das requisições para diversas linguagens (PHP, Java, Ruby, entre muitas outras).\n\n### **Informações gerais**\n\n##### **Base URL**\n\nExistem duas base URL em nossa api, uma para o ambiente **sandbox/homologação** e outra para **produção:**\n\n- Sandbox: [<b>https://sandbox.tecno.mobi</b>](https://)\n    \n- Produção: [<b>https://api.tecno.mobi</b>](https://)\n    \n\nNa sequência, é informado a constante **/api** juntamente com a versão que você está utilizando de nossa api (v1 / v2 / v3 / ...).\n\nExemplo de baseUrl em produção: [<b>https://</b>](https://)[<b>api.tecno.mobi</b>](https://)[<b>/api/v1</b>](https://).\n\n##### Tokens de autenticação\n\n###### **Basic**\n\nO token basic é gerado ao cadastrar um novo usuário dentro da API.\n\nRecomendamos o uso deste token apenas em sistemas onde as requisições para nossa plataforma não ficam expostas como por exemplo em:\n\n1. Plataformas backends\n    \n2. Aplicativos\n    \n3. Sistemas desktop\n    \n4. Sistemas embarcados\n    \n\nAo inserir um novo usuário pelo cadastro de empresas ou pelos próprios endpoints de cadastros de usuários, retornamos a propriedade **usu_token_basic** com o token basic onde você deverá armazenar para utilizar na autenticação dos demais endpoints.\n\n**Como enviar o token BASIC em minhas requisições?**\n\nAdicionar no **header** de sua requisição o parâmetro \"**Authorization**\" com o valor do parâmetro \"Basic **{{usu_token_basic}}**\".\n\n``` json\n{\n   \"Authorization\" : \"Basic HAK1HUISHU12HUHAU29891M19J2981==\"\n}\n\n ```\n\n###### **Bearer**\n\nO token bearer é gerado a partir da autenticação com usuário e senha dentro de nossa plataforma. Este token possui data de expiração e precisa ser renovado a cada cíclo.  \nRecomendamos o uso deste token para qualquer tipo de aplicação, desde frontend até backend.\n\n**Como saber a data de expiração?**\n\nAo utilizar a rota de autenticação por email e senha, caso sejam válidos, na resposta da requisição retornamos o token na propriedade \"**token**\" e a data e hora de expiração na propriedade \"**token_exp**\". **Por padrão, o tempo de uso do token é de até 25 horas.**\n\n**Como renovar meu token?**\n\nFornecemos também um endpoint específico para renovação do token que deve ser utilizado antes do token expirar. Caso o token venha a expirar, basta chamar o endpoint de autenticação novamente e gerar um novo token bearer.\n\n**Como enviar o token BEARER em minhas requisições?**\n\nAdicionar no **header** de sua requisição o parâmetro \"**Authorization**\" com o valor do parâmetro \"Bearer **{{token}}**\".\n\n``` json\n{\n   \"Authorization\" : \"{{vault:bearer-token}}\"\n}\n\n ```\n\n##### **Estrutura de comunicação**\n\nPara se comunicar com nossa plataforma, os dados são fornecidos e também recebidos a partir da tecnologia [JSON](https://www.oracle.com/br/database/what-is-json/) utilizando o protocolo de comunicação [HTTP](https://pt.wikipedia.org/wiki/Hypertext_Transfer_Protocol).\n\n##### Limites da API\n\nPara conservação e melhor disponibilidade de nosso ecossistema, algumas limitações se fizeram necessárias para quem estiver integrando com nossa api.\n\n- Nas requisições **POST**, o limite de registros enviados no payload por requisição são 10.\n    \n- Nas requisições **GET**, o máximo de registros retornados por página são 100. Para acessar os demais registros, o integrador precisará utilizar a paginação.\n    \n\nCaso o integrador ultrapassar este limite de objetos, o seguinte erro será retornado e nenhum dos registros enviados será processado pela API:\n\n``` json\n{\n   \"status\": \"erro\",\n   \"codigo\": \"-2\",\n   \"tag\": \"\",\n   \"mensagem\": \"Atenção, a quantidade de registros enviados ultrapassou o limite disponível pela API.\",\n   \"mensagem_original\": \"Atenção, a quantidade de registros enviados ultrapassou o limite disponível pela API.\",\n   \"personalizado\": {\n      \"qtde_enviada\": 11,\n      \"qtde_maxima\": 10\n   }\n}\n\n ```\n\n##### Timezone e formatação da data e hora\n\nTodos os campos recebidos e enviados relacionados à datas e horários são tratados com o timezone **UTF-03:00** e formatação **DD/MM/AAAA HH:MM:SS**.\n\n- Data e hora:: **14/07/2022 18:30:00**\n    \n- Data: **14/07/2022**\n    \n- Hora: **18:30:00**\n    \n\n##### Idpk\n\nCódigo identificador de um registro específico dentro de nossa plataforma. Cada recurso possui uma sigla com três (3) caracteres seguida de \"**_idpk**\".\n\n\\[Exemplos\\]\n\n- Empresa: **emp_idpk**\n    \n- Cliente: **cli_idpk**\n    \n- Produto: **pro_idpk**\n    \n- Boleto: **fmb_idpk**\n    \n\nPara cada propriedade idpk, o código sequencial nunca se repete, por exemplo, só existe uma empresa com **emp_idpk = 1**, um produto com **pro_idpk = 10** e esta é a lógica para todos os demais recursos da plataforma.\n\n**o IDPK em alguns casos será um número inteiro e em outros, poderá ser uma chave UUID de 36 caracteres.**\n\n### **Status Code**\n\n- **200** Retorno padrão para sucesso ou erro de processamento no servidor;  \n    Quando houver este status code e o retorno for um Json Object, sempre terá uma propriedade \"status\" informando \"sucesso\" ou \"erro\";\n    \n- **401** Token não autorizado para utilização no sistema;\n    \n- **500** Erro interno do servidor ainda não mapeado;\n    \n\n### **Estrutura de retorno padrão**\n\nOs campos a seguir são retornados na maioria dos endpoints fornecidos pela **api**.\n\n##### Em caso de sucesso\n\n| **Propriedade** | **Tipo** | **Descrição** |\n| --- | --- | --- |\n| status | Text | Indica se a requisição deu certo ou não.  <br>sucesso / erro |\n| total_registros | Integer | Quando for GET, esta propriedade informará a quantidade máxima de registros disponíveis com base nos filtros aplicados. |\n| registros | Array | Em caso de sucesso, esta propriedade possuirá a listagem de objetos que está sendo solicitado para a api. |\n\n##### Em caso de erro\n\n| **Propriedade** | **Tipo** | **Descrição** |\n| --- | --- | --- |\n| status | Text | Indica se a requisição deu certo ou não.  <br>sucesso / erro |\n| mensagem | Text | Retornará uma mensagem com o motivo de ter gerado o erro ou bloqueio de acesso. |\n\n### Webhook\n\nTodas as empresas cadastradas tem a possibilidade de vincular um endpoint do tipo POST e mais um token de autenticação para sempre que algum evento importante ocorrer com os dados dentro de nossa plataforma, notificarmos via webhook para o endpoint cadastrado.\n\nNosso sistema enviará uma requisição para o webhook definido juntamente com o token (opcional).\n\n##### Regras de funcionamento\n\nCaso nossa plataforma efetuar a chamada de webhook e o endpoint da api configurada não responder com **sucesso**, esta notificação webhook ira para uma fila de reenvio. Nossa plataforma tentará reenviar 50 vezes durante 8 horas seguidas, **caso em todas as vezes o envio falhar, esta notificação ficará bloqueada e não será mais reenviada automaticamente**. O integrador então poderá solicitar o reenvio de todas as mensagens bloqueadas chamando este [endpoint](https://documenter.getpostman.com/view/3333877/2s9YXb8Qri#a8c79917-e0cc-4cb6-9122-3db6c573cec8).\n\n##### Recebendo webhook\n\nAo sofrer alguma alteração nos registros dentro de nossa plataforma como atualização de status, os dados alterados serão encaminhados no body do POST conforme exemplo abaixo:\n\n**Requisição**: POST\n\n**URL**: [https://sua.api.com.br/webhook/post](https://)\n\n##### Cabeçalho do webhook (Header):\n\n| **Parâmetros** | **Exemplos** |\n| --- | --- |\n| x-api-key | {TOKEN_DEFINIDO} |\n| Content-Type | Application/Json |\n\n##### Tipos de webhooks enviados:\n\n| **Callback's** | **Descrição** |\n| --- | --- |\n| **`CONTA_ATIVADA`** | Evento disparado ao recebermos a aprovação da ativação da conta digital. |\n| **`CONTA_DESATIVADA`** | Evento disparado ao encerrarmos a conta digital da empresa. |\n| **`CONTA_REJEITADA`** | Evento disparado ao enviar a conta digital para aprovação e algo dos dados enviados for rejeitado. |\n| **`COBRANCA_LIQUIDADA`** | Evento disparado ao uma cobrança PIX for paga ou um BOLETO compensado dentro de nossa plataforma. |\n| **`COBRANCA_ESTORNADA`** | Evento disparado ao ser efetuado a devolução/estorno de uma cobrança PIX ou cobrança CARTÃO. |\n| **`COBRANCA_CONFIRMADA`** | Evento disparado ao recebermos a confirmação de um pagamento via CARTÃO. Neste momento o dinheiro ainda não está disponível dentro da conta digital. |\n| **`COBRANCA_RECEBIDA`** | Evento disparado ao ficar disponível o dinheiro de uma cobrança CARTÃO que estava com o status \"Confirmado\". |\n| **`COBRANCA_EXCLUIDA`** | Evento disparado ao ser excluída uma cobrança PIX, BOLETO, CARTÃO ou LINK DE PAGAMENTO. Ao executar este evento a cobrança é enviada diretamente para a lixeira. |\n| **`TRANSFERENCIA_RECEBIDA`** | Evento disparado para o webhook padrão da empresa (emp_webhook) sempre que uma transferência PIX for recebida. |\n\n##### Conta - Webhook (Body):\n\n| **Propriedade** | **Tipo** | **Descrição** |\n| --- | --- | --- |\n| tipo | Text | Tipo do evento que ocorreu com o registro. (Um dos listados na tabela de webhooks). |\n| conta | Object | Objeto com todos os dados da conta digital. |\n\n##### Cobrança - Webhook (Body):\n\n| **Propriedade** | **Tipo** | **Descrição** |\n| --- | --- | --- |\n| tipo | Text | Tipo do evento que ocorreu com o registro. (Um dos listados na tabela de webhooks). |\n| tipo_cobranca | Text | Identifica o tipo da cobrança: cartao, pix, boleto ou bolepix. |\n| pagamento_efetuado_por | Text | Descrição que indica qual foi a modalidade utilizada para ser efetuado o pagamento desta cobrança. |\n| cartao / pix / item | Object | Esta propriedade tem o nome dinâmico, varia conforme o tipo de cobrança.  <br>Dentro desta propriedade ficará o objeto(s) que sofreu as alterações conforme o tipo de evento. |\n\n### Sistema web integrado\n\nIntegre nosso sistema a qualquer outro que deseja abrir nosso painel já autenticado com o usuário e senha existente. Integrando este recurso a seu sistema, você terá o controle total, proporcionando ao cliente final uma experiência de alto nível.\n\nA url padrão para ser utilizada nesta comunicação, precisa ser:\n\nhttps://{NOME_SISTEMA}/#/auth/login?encode='{PARAMETOS_BASE64}'\n\n\\[Exemplo\\]\n\n\\-> [https://<b>app.pixapay.com.br</b>/#/auth/login?encode='{PARAMETOS_BASE64}'](https://)\n\n##### Parâmetros em Base64\n\nOs parâmetros possíveis para serem utilizados são:\n\n> {  \n\"email\":\"[teste@teste.com](https://)\",  \n\"senha\":\"12345\",  \n\"empresa_idpk\":10,  \n\"redirect\":\"cobrancasPix\",  \n\"redirect_idpk\":1,  \n\"redirect_options\":{  \n\"tipo_pix\":\"instantaneo\",  \n\"data_inicio\":\"08/11/2021\",  \n\"data_fim\":\"12/11/2021\"  \n}  \n} \n  \n\n**email**: Conta de email do usuário.\n\n**senha**: Senha de acesso do usuário.\n\n**redirect_empresa_idpk**: Código identificador da empresa.\n\n**redirect**: É tudo que vem após **/#/** da url do nosso sistema web:\n\n**redirect_idpk**: Código identificador único do registro que está sendo aberta a tela do sistema web.\n\n**redirect_options**.**tipo_pix**: Caso a tela que está sendo aberta for a de pix, este campo poderá conter \"**instantaneo**\" ou \"**cobranca**\".\n\n**redirect_options.data_inicio**: Altera o filtro de período da tela que está sendo exibida.\n\n**redirect_options.data_fim**: Altera o filtro de período da tela que está sendo exibida.\n\nDepois de definir os parâmetros, converta o JSON em base64 e adicione-o na url montada no lugar da variável \"PARAMETROS_BASE64\": [https://app.pixapay.com.br/#/auth/login?encode='{PARAMETOS_BASE64}'](https://)","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"3333877","team":1480473,"collectionId":"c69e5817-0462-43f7-9a57-39d648867fa4","publishedId":"2sB3BDHVw9","public":true,"publicUrl":"https://documenter-api.postman.tech/view/3333877/2sB3BDHVw9","privateUrl":"https://go.postman.co/documentation/3333877-c69e5817-0462-43f7-9a57-39d648867fa4","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"0099ff"},"documentationLayout":"classic-single-column","customisation":{"metaTags":[{"name":"description","value":"Nesta documentação você entenderá como integrar o seu software com nosso ERP. Fornecemos de forma simples recursos essenciais para gerenciamento de suas empresas."},{"name":"title","value":"Mercúrio ERP"}],"appearance":{"default":"dark","themes":[{"name":"dark","logo":"https://content.pstmn.io/dfe313db-944e-4ae0-85d7-c3cd90020200/TWVyY3VyaW9XZWIgMTMyeDEzMi5wbmc=","colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"0099ff"}},{"name":"light","logo":"https://content.pstmn.io/3c029806-d87a-4c25-9452-42ff0f59db6b/TWVyY3VyaW9XZWIgNjB4NjAucG5n","colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"0099ff"}}]}},"version":"8.11.4","publishDate":"2025-08-06T13:45:51.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"Mercúrio ERP","description":"Nesta documentação você entenderá como integrar o seu software com nosso ERP. Fornecemos de forma simples recursos essenciais para gerenciamento de suas empresas."},"logos":{"logoLight":"https://content.pstmn.io/3c029806-d87a-4c25-9452-42ff0f59db6b/TWVyY3VyaW9XZWIgNjB4NjAucG5n","logoDark":"https://content.pstmn.io/dfe313db-944e-4ae0-85d7-c3cd90020200/TWVyY3VyaW9XZWIgMTMyeDEzMi5wbmc="}},"statusCode":200},"environments":[],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/f6446771e00384e321495892d389ac4bd2c1d3a94d90a235dfe8c48641873485","favicon":"https://res.cloudinary.com/postman/image/upload/v1609325182/team/r3dm2kfznnrhe2v5hoyn.ico"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"}],"canonicalUrl":"https://documenter.gw.postman.com/view/metadata/2sB3BDHVw9"}