O Panamah possui uma API de entrada, usada atualmente pelos o SDKs. Através dessa API, é possível gerenciar assinantes e realizar a subida de arquivos em lotes com informações diversas, como vendas, produtos, lojas e etc. Chamamos essa API de Panamah Core.
O Panamah Core possui duas frentes, o Admin e o Stream. Atráves do Admin é possível gerenciar assinantes, criando, buscando e atualizando.
O Stream é encarregado de subir os arquivos em lote, como movimentações de um assinante. É necessário em ambos os casos, a utilização o Authorization Token.
Ao realizar a autenticação na rota /stream/auth é enviado um access token e um refresh token, o primeiro deverá ser utilizado para as demais requisições nas rotas de Stream. Um exemplo de token:
IMPORTANTE
O
Acess Tokenirá expirar com um determinado tempo, por isso será necessário realizar uma nova autenticação ou utilizar a rota de refresh com oRefresh Token.
| Security Scheme Type | API Key |
|---|---|
| Header parameter name: | Authorization |
Cada SDK possui um identificador cadastrado no Panamah. Ele servirá para identificar de qual plataforma está sendo enviada a requisição.
Para parceiros que queiram utilizar API. esse cabeçalho é constituido com panamah-api1.0.0.
| Security Scheme Type | API Key |
|---|---|
| Header parameter name: | x-sdk-identity |
/admin/assinantes
Essas informações definem os campos obrigatórios nas requisições e a estrutura minima do payload na resposta. É possível enviar outros campos baseados nos esquemas de assinantes, assim como receber mais informações nas rotas de GET e PUT.
Retorna os dados do assinante cadastro no Panamah.
| id | string Id da assinante |
| nome | string Nome do assinante |
| fantasia | string Nome fantasia do assinante |
| cnpj | string CNPJ do assinante |
{- "id": "string",
- "nome": "string",
- "fantasia": "string",
- "cnpj": "string"
}{- "id": "string",
- "nome": "string",
- "fantasia": "string",
- "ativo": true,
- "oficial": true,
- "creatorHost": "string",
- "creatorSDKIdentity": "string",
- "cnpj": "string",
- "softwaresAtivos": [ ],
- "softwaresEmContratosDeManutencao": [ ],
- "planoUso": { }
}Retorna os dados de um assinante previamente cadastro no Panamah.
| id required | string ID do Assinante |
const request = require('request'); const options = { method: 'GET', url: 'https://panamah.io/api/v2/admin/assinantes/{id}', headers: {Authorization: 'REPLACE_KEY_VALUE'} }; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); });
{- "id": "string",
- "nome": "string",
- "fantasia": "string",
- "ativo": true,
- "oficial": true,
- "creatorHost": "string",
- "creatorSDKIdentity": "string",
- "cnpj": "string",
- "softwaresAtivos": [ ],
- "softwaresEmContratosDeManutencao": [ ],
- "planoUso": { }
}Retorna os dados do assinante atualizado no Panamah.
| id required | string ID do Assinante |
| id | string Id da assinante |
| nome | string Nome do assinante |
| fantasia | string Nome fantasia do assinante |
| ativo | boolean Informação se assinante está ativo |
| oficial | boolean Informação se assinante é oficial |
| creatorHost | string Host criador |
| creatorSDKIdentity | string SDK criador |
| cnpj | string CNPJ do assinante |
| softwaresAtivos | array Softwares ativos do assinante |
| softwaresEmContratosDeManutencao | array Software em contrados de manutenção do assinante |
| planoUso | object Planos do assinante |
{- "id": "string",
- "nome": "string",
- "fantasia": "string",
- "ativo": true,
- "oficial": true,
- "creatorHost": "string",
- "creatorSDKIdentity": "string",
- "cnpj": "string",
- "softwaresAtivos": [ ],
- "softwaresEmContratosDeManutencao": [ ],
- "planoUso": { }
}{- "id": "string",
- "nome": "string",
- "fantasia": "string",
- "ativo": true,
- "oficial": true,
- "creatorHost": "string",
- "creatorSDKIdentity": "string",
- "cnpj": "string",
- "softwaresAtivos": [ ],
- "softwaresEmContratosDeManutencao": [ ],
- "planoUso": { }
}Retorna tokens para realização de envio de dados
| ts | string timestamp da requisição É possível obter aqui |
| assinanteId | string ID do assinante |
| key | string chave calculada pelo o secret, assinanteId e ts. É possível obter aqui com o código abaixo.
|
{- "ts": "string",
- "assinanteId": "string",
- "key": "string"
}{- "accessToken": "string",
- "refreshToken": "string"
}Realiza atualização e retorna tokens para realização de envio de dados. No header Authorization, deverá ser usado o valor do refreshToken obtido anteriomente.
const request = require('request'); const options = { method: 'GET', url: 'https://panamah.io/api/v2/stream/auth/refresh', headers: {Authorization: 'REPLACE_KEY_VALUE'} }; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); });
{- "accessToken": "string",
- "refreshToken": "string"
}Realiza o envio de dados para o Panamah atraves de arquivos em lote
Formato de arquivos .pdt
| assinanteId | string ID do assinante |
| op | string Enum: "update" "delete" |
| tipo | string Enum: "ASSINANTE" "REVENDA" "SECAO" "GRUPO" "SUBGRUPO" "HOLDING" "LOJA" "META" "FORMA_PAGAMENTO" "FUNCIONARIO" "ACESSO" "CLIENTE" "FORNECEDOR" "PRODUTO" "EAN" "TROCA_FORMA_PAGAMENTO" "TROCA_DEVOLUCAO" "EVENTO_CAIXA" "VENDA" "COMPRA" "LOCAL_ESTOQUE" "ESTOQUE_MOVIMENTACAO" "TITULO_PAGAR" "TITULO_RECEBER" |
| data | object Corpo seguindo o exemplo dos esquemas descritos aqui |
[- {
- "assinanteId": "string",
- "op": "update",
- "tipo": "ASSINANTE",
- "data": { }
}
]{- "sucessos": {
- "total": 0,
- "itens": [
- { }
]
}, - "falhas": {
- "total": 0,
- "itens": [
- { }
]
}
}É possível consultar dados pendentes que ainda não foram processados com sucesso pela API Panamah. Atualmente, essa funcionalidade está disponível apenas para produtos.
Como o envio dos modelos de dados é independente e ocorre de forma assíncrona, pode acontecer de os dados de venda ficarem incompletos, justamente porque os produtos correspondentes ainda não foram processados.
A função de envio de dados pendentes é importante justamente para atenuar esses problemas e garantir que as informações de venda fiquem o mais completas possível. Por isso, é necessário acionar esse recurso periodicamente.
A resposta sempre retorna uma lista de pendências organizadas por assinante e tipo de recurso (ex.: PRODUTO).
Cada item contém:
assinanteId → Identificador do assinante que possui pendênciasmodels ou ids → Lista de modelos ou identificadores dos recursos pendentes (normalmente produtos ainda não sincronizados)Esses objetos podem ser usados para:
| start | number >= 0 Default: 0 Índice de início para paginação, usado como |
| count | number [ 1 .. 1000 ] Default: 100 Example: count=50 Número máximo de itens a serem retornados, usado como |
const request = require('request'); const options = { method: 'GET', url: 'https://panamah.io/api/v2/stream/pending-resources', qs: {start: 'SOME_NUMBER_VALUE', count: 'SOME_NUMBER_VALUE'}, headers: {Authorization: 'REPLACE_KEY_VALUE'} }; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); });
{- "35472867000228": {
- "PRODUTO": [
- "18974299",
- "18974310",
- "18974680"
]
}
}