LB
Loomya Bridge / Documentação
API Reference Dashboard

Loomya Bridge

Plataforma de integração entre sistemas

O Loomya Bridge é uma plataforma iPaaS (Integration Platform as a Service) que conecta sistemas como ERPs, CRMs e plataformas de e-commerce. Com ele você pode configurar webhooks, automatizar sincronização de dados e monitorar todas as integrações em tempo real.

Webhooks em tempo real
Receba e envie eventos instantaneamente entre sistemas.
Sincronização automática
Polling periódico para manter dados sempre atualizados.
Logs detalhados
Monitore cada evento com status, duração e erros.

URL Base

URL
https://bridge.loomya.co

Autenticação

Todas as requisições autenticadas devem incluir sua API Key no header Authorization.

HTTP
Authorization: Bearer lmy_live_sua_api_key_aqui
Sua API Key é gerada quando sua conta é criada. Acesse o Dashboard para visualizá-la.

Verificar autenticação

GET /clients/me

Retorna os dados do cliente autenticado, incluindo uso do mês e estatísticas.

Resposta
{
  "client": {
    "id": "281bd3b8-32e8-4688-96ae-6cb579197abd",
    "name": "Minha Empresa",
    "email": "contato@empresa.com"
  },
  "usage": {
    "month": "2026-03",
    "executions": 1247,
    "webhookCalls": 89
  },
  "stats": {
    "totalIntegrations": 3
  }
}

Início Rápido

Em menos de 5 minutos você pode configurar sua primeira integração e enviar um evento.

1

Crie uma integração

Define a origem e o destino dos dados.

cURL
curl -X POST https://bridge.loomya.co/config \
  -H "Authorization: Bearer lmy_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Pedidos Shopify → Bling",
    "source": "shopify",
    "destination": "bling"
  }'
2

Conecte os sistemas

Autentique via OAuth no Dashboard ou via link direto.

URL
# Shopify
https://bridge.loomya.co/oauth/shopify/start?clientId={seu_client_id}&shop=sua-loja.myshopify.com

# Bling
https://bridge.loomya.co/oauth/bling/start?clientId={seu_client_id}
3

Envie um evento

Dispare um evento para a integração criada.

cURL
curl -X POST https://bridge.loomya.co/webhook/push/{integrationId} \
  -H "Authorization: Bearer lmy_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "event": "order.created",
    "payload": { "order_id": "1001", "total": 299.90 }
  }'
4

Verifique os logs

Acompanhe o resultado no Dashboard ou via API.

cURL
curl https://bridge.loomya.co/logs?limit=5 \
  -H "Authorization: Bearer lmy_live_..."

Clientes

Gerenciamento de contas, API Keys e credenciais de conectores. Há dois níveis de acesso:

Master Key

Chave de administrador definida na variável MASTER_KEY. Usada para criar clientes.

API Key

Chave do cliente no formato lmy_live_.... Usada em todas as operações do dia a dia.

Criar cliente

POST /clients Master Key

Cria um novo cliente e retorna a primeira API Key (exibida apenas uma vez).

CampoTipoDescrição
namestringsimNome do cliente
emailstringsimE-mail único do cliente
planfree | starter | pro | enterprisenãoPlano (padrão: free)
Resposta 201
{
  "client": {
    "id": "281bd3b8-32e8-4688-96ae-6cb579197abd",
    "name": "Minha Empresa",
    "email": "contato@empresa.com",
    "plan": "starter",
    "createdAt": "2026-03-16T10:00:00.000Z"
  },
  "apiKey": {
    "id": "c3f1a2b4-...",
    "key": "lmy_live_a1b2c3d4e5f6g7h8",  // exibida apenas aqui
    "label": "default"
  }
}

Dados do cliente autenticado

GET /clients/me

Retorna os dados do cliente, suas API Keys (sem o valor completo) e uso do mês atual.

Resposta
{
  "client": { "id": "...", "name": "...", "email": "...", "plan": "starter" },
  "apiKeys": [
    { "id": "...", "keyPrefix": "lmy_live_a1b2", "label": "default", "lastUsedAt": "..." }
  ],
  "usage": { "month": "2026-03", "executions": 1247, "webhookCalls": 89 },
  "stats": { "totalIntegrations": 3 }
}

API Keys

POST /clients/me/keys Gerar nova chave

Gera uma nova API Key. O valor completo é exibido apenas na resposta desta requisição.

CampoTipoDescrição
labelstringnãoRótulo identificador (padrão: default)
DELETE /clients/me/keys/:keyId Revogar chave

Remove uma API Key. Não é possível revogar a última chave ativa.

Uso e estatísticas

GET /clients/me/usage

Retorna execuções e chamadas de webhook do mês atual.

Resposta
{
  "usage": {
    "month": "2026-03",
    "executions": 1247,
    "webhookCalls": 312
  }
}

Credenciais de conectores

Armazene tokens de acesso manualmente (alternativa ao fluxo OAuth).

POST /clients/me/credentials Salvar credencial
Body — Shopify
{
  "connector": "shopify",
  "shopDomain": "minha-loja.myshopify.com",
  "accessToken": "shpat_..."
}
Body — Bling
{
  "connector": "bling",
  "accessToken": "...",
  "refreshToken": "..."
}
GET /clients/me/credentials Listar credenciais

Lista conectores configurados. Os tokens nunca são retornados.

DELETE /clients/me/credentials/:connector Remover credencial

Remove as credenciais de um conector (shopify ou bling).

API Reference interativa

Teste todos os endpoints diretamente no navegador

A referência completa de todos os endpoints — integrações, webhooks, logs, OAuth e sincronização — está disponível na API Reference. Você pode testar as chamadas diretamente, com exemplos prontos e autenticação configurável.

/config /webhook/push /logs /oauth /sync + mais

Integrações

Uma integração define o canal entre dois sistemas. Cada integração pertence a um cliente e possui um código único que identifica sua combinação de origem, destino e feature.

Código da integração

Ao criar uma integração, o sistema gera automaticamente um code no formato origem_destino_feature. Esse código é único por cliente — você não pode ter duas integrações com o mesmo código na mesma conta.

shopify
bling
pedido
origem  ·  destino  ·  feature
shopify_bling_pedido

Features disponíveis

A feature é detectada automaticamente pelo nome que você escolhe para a integração. As keywords abaixo determinam qual feature será usada:

FeatureKeywords no nomeCódigo gerado
Pedidopedido, order, venda_pedido
Produtoproduto, product_produto
Clientecliente, customer, contato_cliente
Estoqueestoque, inventory, stock_estoque
Nota Fiscalnota, fiscal, nfe, invoice_nota_fiscal
Entregaentrega, fulfillment_entrega
Reembolsoreembolso, refund_reembolso
Geralnenhuma acima_geral

Regras de unicidade

CódigoPermitido?Motivo
shopify_bling_pedido✓ SimPrimeiro cadastro
shopify_bling_pedido✗ NãoCódigo duplicado para o mesmo cliente
bling_shopify_pedido✓ SimDireção invertida — código diferente
shopify_bling_produto✓ SimFeature diferente

Criar integração

POST /config

Cria uma integração e retorna o objeto com o code gerado. Retorna 409 se o código já existir para este cliente.

CampoTipoDescrição
namestringsimNome descritivo — inclua a feature (ex: "Shopify → Bling (Pedido)")
sourcestringsimSistema de origem: shopify, bling, etc.
destinationstringsimSistema de destino: shopify, bling, etc.
mappingobjectnãoMapeamento de campos {"campo_origem": "campo_destino"}
statusstringnãoactive (padrão) ou inactive
cURL
curl -X POST https://bridge.loomya.co/config \
  -H "Authorization: Bearer lmy_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Shopify → Bling (Pedido)",
    "source": "shopify",
    "destination": "bling"
  }'
Resposta 201
{
  "success": true,
  "integration": {
    "id":          "uuid-da-integracao",
    "name":        "Shopify → Bling (Pedido)",
    "code":        "shopify_bling_pedido",
    "source":      "shopify",
    "destination": "bling",
    "status":      "active",
    "createdAt":   "2026-03-17T12:00:00.000Z"
  }
}
Resposta 409 — duplicado
{
  "error":   "Conflict",
  "message": "Já existe uma integração com o código \"shopify_bling_pedido\" para esta conta.",
  "code":    "shopify_bling_pedido"
}

Excluir integração

DELETE /config/:id

Remove permanentemente a integração e todos os seus logs. No Dashboard, a exclusão exige digitar o código da integração (ex.: shopify_bling_pedido) para confirmar.

cURL
curl -X DELETE https://bridge.loomya.co/config/uuid-da-integracao \
  -H "Authorization: Bearer lmy_live_..."

Conector Shopify

Conecte sua loja Shopify via OAuth 2.0 e registre webhooks automáticos.

Conectar via OAuth

URL
GET /oauth/shopify/start?clientId={clientId}&shop=sua-loja.myshopify.com

O usuário é redirecionado para autorização na Shopify e retorna ao dashboard após autenticação.

Registrar webhooks

POST /config/:id/webhooks/shopify

Registra automaticamente todos os webhooks na Shopify (products, orders, customers). Os IDs dos webhooks são armazenados para remoção futura.

DELETE /config/:id/webhooks/shopify
O escopo write_customers requer aprovação da Shopify para apps públicos. Para lojas de desenvolvimento, todos os escopos funcionam imediatamente.

Conector Bling

Conecte sua conta Bling ERP via OAuth 2.0 para sincronização de produtos, pedidos e contatos.

Conectar via OAuth

URL
GET /oauth/bling/start?clientId={clientId}

Verificar status dos conectores

GET /oauth/status
Resposta
{
  "connections": {
    "shopify": { "connected": true, "shopDomain": "minha-loja.myshopify.com" },
    "bling":   { "connected": true, "expired": false }
  }
}

Sincronização

Sincronize dados em lote do Bling para o sistema de destino ou configure polling automático.

Sincronização completa

POST /config/:id/sync

Inicia sincronização em background. Retorna imediatamente com status 202 Accepted.

Body
{
  "entities": ["products", "orders", "customers"]
  // Deixe vazio para sincronizar tudo
}

Polling automático

POST /config/:id/poll

Configura sincronização periódica automática do Bling.

Body
{
  "enabled": true,
  "intervalMinutes": 15  // 1 a 1440 minutos
}

Configurações de Integração

Controle como, quando e com que resiliência cada integração é executada

Cada integração possui um conjunto de configurações avançadas acessíveis pelo ícone de engrenagem na tabela de integrações do Dashboard. Essas configurações são independentes por integração — você pode, por exemplo, ter um polling a cada 15 minutos para pedidos e um polling diário para estoque.

Agendamento (Polling)

O polling é um mecanismo de busca proativa de dados no sistema de origem. Ao contrário dos webhooks (que são disparados pelo sistema externo), o polling é iniciado pela Loomya Bridge no intervalo configurado.

Intervalo fixo

Executa a cada N minutos. Ideal para sincronizações contínuas como pedidos e estoque. Ex: a cada 15 minutos.

Horários específicos

Executa em horários determinados do dia. Ex: às 08:00, 12:00 e 18:00. Ideal para sincronizações periódicas planejadas.

Dias da semana: você pode restringir o polling a dias específicos — por exemplo, apenas de segunda a sexta. Combinado com horários específicos, isso cria agendamentos como "às 08:00 apenas em dias úteis".
Exemplo — polling diário às 06:00 em dias úteis
// PATCH /config/:id/settings
{
  "pollEnabled": true,
  "scheduleType": "times",
  "scheduleTimes": ["06:00"],
  "scheduleDays": [1, 2, 3, 4, 5],  // 0=Dom, 1=Seg … 6=Sáb
  "scheduleTimezone": "America/Sao_Paulo"
}

Janela de Execução

A janela de execução restringe o horário em que eventos podem ser processados. Se um evento chegar fora da janela configurada, ele não é descartado — é automaticamente reagendado para quando a janela abrir novamente.

Reagendamento automático: o evento é colocado de volta na fila com um delay calculado até a abertura da janela. Isso garante que nenhum evento seja perdido. O limite é de 3 reagendamentos por evento — após isso, o evento é descartado com um aviso no log.
Exemplo — executar apenas em horário comercial
{
  "windowStart": "08:00",
  "windowEnd": "22:00"
  // Evento que chegar às 23:30 será reagendado para 08:00 do dia seguinte
}
CampoTipoDescrição
windowStartHH:MMHorário de abertura da janela (ex: 08:00)
windowEndHH:MMHorário de fechamento. Suporta overnight (ex: windowStart: 22:00, windowEnd: 06:00)

Filtros de Execução

Filtros permitem que você restrinja quais eventos são efetivamente processados, evitando execuções desnecessárias e economizando quota. Eventos filtrados são descartados antes de consumir uma execução do seu plano.

Valor mínimo do pedido

Ignora pedidos abaixo de um valor. Útil para não sincronizar pedidos de teste ou de baixo valor. O campo verificado é total_price (Shopify) ou totalVenda (Bling).

Status financeiro

Processa apenas pedidos com status financeiro específico. Ex: apenas paid para só criar pedidos já pagos no ERP.

Exemplo — só pedidos pagos acima de R$ 50
{
  "filterMinValue": 50,
  "filterStatuses": ["paid", "authorized"]
}

Status disponíveis (Shopify financial_status):

paid pending authorized partially_paid refunded voided

Notificações de Falha

A plataforma monitora automaticamente falhas consecutivas e envia um alerta por e-mail quando o limite configurado é atingido. O alerta inclui o nome da integração, o número de falhas e a mensagem do último erro.

CampoPadrãoDescrição
alertEmail E-mail da conta E-mail de destino dos alertas. Pode ser diferente do e-mail da conta — por exemplo, para alertar um time técnico separado.
alertAfterFailures 3 Número de falhas consecutivas antes de enviar o alerta. O contador é zerado quando um evento é processado com sucesso. Um novo alerta só é enviado após 1 hora de cooldown.
O e-mail de alerta tem cooldown de 1 hora — mesmo com muitas falhas seguidas, você não receberá spam. Um alerta é enviado, e o próximo só ocorre se as falhas continuarem após 1 hora.

Resiliência — Retry e Prioridade

Configure como a integração se comporta em caso de falha e com que prioridade seus jobs são processados na fila compartilhada do Redis.

Prioridade da fila

Alta

Jobs processados antes dos demais. Use para integrações críticas como pedidos em produção.

Normal

Padrão. A maioria das integrações deve usar este nível.

Baixa

Jobs executados quando a fila está ociosa. Ideal para sincronizações de estoque em horários de pico.

Retry automático

Quando um job falha (ex: API do destino fora do ar), a plataforma tenta novamente automaticamente.

CampoPadrãoDescrição
maxRetries 3 Máximo de tentativas. 0 = sem retry. Após esgotar, o job vai para a fila de falhas e fica disponível nos logs.
retryBackoff exponential exponential: o atraso dobra a cada tentativa (60s → 120s → 240s). fixed: sempre o mesmo atraso.
retryInitialDelay 60s Tempo de espera antes da 1ª retentativa, em segundos.
Exemplo — integração de alta prioridade com retry agressivo
{
  "priority": "high",
  "maxRetries": 5,
  "retryBackoff": "exponential",
  "retryInitialDelay": 30   // 30s → 60s → 120s → 240s → 480s
}
Loomya Bridge

Plataforma de integração entre sistemas