Conecte qualquer e-commerce, app ou sistema ao mesmo estoque que sincroniza automaticamente com Shopee, Amazon e Mercado Livre. Uma venda no seu site desconta do estoque de todos os canais.
# Registrar venda no seu site curl -X POST https://lojexa.com/api/v1/vendas \ -H "Authorization: Bearer lj_live_***" \ -H "Content-Type: application/json" \ -d '{ "reference": "PEDIDO-9934", "channel": "website", "items": [ { "sku": "CAMISETA-P", "quantity": 2 } ] }' # Resposta — estoque sincronizado em todos os canais { "success": true, "data": { "sale_id": 9934, "status": "confirmed", "items_processed": [{ "sku": "CAMISETA-P", "stock_after": 13 }] } }
Da criacao da conta ate a primeira venda sincronizada, em minutos.
Acesse o painel em Configuracoes → API e clique em "Criar Nova Chave". Defina os escopos necessarios e copie a chave — ela e exibida apenas uma vez.
Faca um GET /api/v1/produtos com seu Bearer token para
listar produtos em tempo real. Filtre por nome, SKU ou categoria e
exiba apenas o estoque disponivel para venda.
Um POST /api/v1/vendas baixa o estoque central e dispara
a sincronizacao automatica com Shopee, Amazon e Mercado Livre.
O LOJEXA cuida do resto.
API REST com autenticacao por Bearer Token. Base URL: https://lojexa.com/api/v1
Verificar autenticacao e status da chave. Ideal para healthchecks da integracao.
Listar produtos com estoque disponivel em tempo real. Suporta paginacao, busca e filtro por categoria.
Buscar produto especifico por SKU. Retorna dados completos incluindo estoque reservado e disponivel.
Registrar venda e baixar estoque automaticamente. Idempotente por reference. Sincroniza todos os canais.
Cancelar venda e restaurar estoque. O estoque e re-sincronizado com todos os marketplaces conectados.
Estatisticas de uso da chave: vendas hoje, no mes, consumo de rate limit e configuracao de webhook.
Copie e cole. Substitua lj_live_SEU_TOKEN pela sua chave.
# POST /api/v1/vendas — registrar uma venda curl -X POST https://lojexa.com/api/v1/vendas \ -H "Authorization: Bearer lj_live_SEU_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "reference": "PEDIDO-9934", "channel": "website", "items": [{"sku": "CAMISETA-P", "quantity": 2}] }' # Resposta esperada (HTTP 201): # { "success": true, "data": { "sale_id": 9934, "status": "confirmed", ... } }
<?php $ch = curl_init('https://lojexa.com/api/v1/vendas'); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $_ENV['LOJEXA_API_KEY'], 'Content-Type: application/json', ], CURLOPT_POSTFIELDS => json_encode([ 'reference' => 'PEDIDO-9934', 'channel' => 'website', 'items' => [[ 'sku' => 'CAMISETA-P', 'quantity' => 2, ]], ]), ]); $result = json_decode(curl_exec($ch), true); curl_close($ch); // Tratar 409 ALREADY_PROCESSED como sucesso (idempotencia) if (!$result['success'] && ($result['error']['code'] ?? '') !== 'ALREADY_PROCESSED') { throw new RuntimeException($result['error']['message'] ?? 'Erro desconhecido'); }
const response = await fetch('https://lojexa.com/api/v1/vendas', { method: 'POST', headers: { 'Authorization': `Bearer ${process.env.LOJEXA_API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ reference: 'PEDIDO-9934', channel: 'website', items: [{ sku: 'CAMISETA-P', quantity: 2 }], }), }); const data = await response.json(); // Tratar 409 ALREADY_PROCESSED como sucesso if (!data.success && data.error?.code !== 'ALREADY_PROCESSED') { throw new Error(data.error?.message || 'Falha desconhecida'); } console.log('Venda registrada:', data.data.sale_id);
import os, requests resp = requests.post( 'https://lojexa.com/api/v1/vendas', headers={'Authorization': f'Bearer {os.environ["LOJEXA_API_KEY"]}'}, json={ 'reference': 'PEDIDO-9934', 'channel': 'website', 'items': [{'sku': 'CAMISETA-P', 'quantity': 2}], } ) # Tratar 409 ALREADY_PROCESSED como sucesso data = resp.json() if not data['success'] and data.get('error', {}).get('code') != 'ALREADY_PROCESSED': raise Exception(data['error']['message']) print(f"Venda registrada: {data['data']['sale_id']}")
Receba notificacoes automaticas quando vendas sao confirmadas ou canceladas. Sem polling, sem latencia.
Disparado apos POST /api/v1/vendas ser processado com sucesso.
O payload inclui os itens vendidos e o estoque atualizado.
Disparado quando uma venda e cancelada via POST /api/v1/vendas/{ref}/cancelar.
O estoque ja foi restaurado quando o evento chega.
Como configurar
Em Configuracoes → API Keys, informe a URL do seu endpoint ao criar ou editar uma chave.
Gerenciar API Keys$webhookSecret = $_ENV['LOJEXA_WEBHOOK_SECRET']; $sig = $_SERVER['HTTP_X_LOJEXA_SIGNATURE'] ?? ''; $payload = file_get_contents('php://input'); $expected = 'sha256=' . hash_hmac('sha256', $payload, $webhookSecret); if (!hash_equals($expected, $sig)) { http_response_code(401); exit; } $event = json_decode($payload, true); switch ($event['event']) { case 'sale.confirmed': // Venda confirmada — atualizar seu sistema processarVenda($event['data']); break; case 'sale.reversed': // Venda cancelada — reverter no seu sistema reverterVenda($event['data']); break; } http_response_code(200); // Sempre responder 200 em < 5s
Use hash_equals() para prevenir timing attacks.
Responda sempre HTTP 200 em menos de 5 segundos.
Quem usa a API LOJEXA e como integra com o estoque centralizado.
Site WooCommerce, Magento ou customizado? Sincronize o estoque em tempo real com todos os marketplaces sem vender o mesmo item duas vezes.
Aplicativo React Native ou Flutter que registra pedidos? Consuma a API para exibir estoque em tempo real e registrar vendas instantaneamente.
ERP legado, planilha avancada ou sistema proprio? Integre via API para manter o estoque LOJEXA sempre atualizado sem migrar de plataforma.
Vende para revendedores ou distribuidores? Abra um canal de API dedicado com escopos e rate limits especificos para cada parceiro.
| Funcionalidade | Gratuito | Profissional | Empresarial |
|---|---|---|---|
| Acesso a API REST | |||
| Rate limit | — | 60 req/min | 300 req/min |
| Webhooks | |||
| Chaves multiplas | ate 5 | Ilimitado | |
| Suporte tecnico API | Dedicado |
read:products permite apenas consultas — listar produtos, verificar estoque,
fazer ping. Nao altera nada no sistema. O write:sales habilita o registro e cancelamento
de vendas, o que altera o estoque. Use apenas os escopos necessarios para reduzir o risco em
caso de vazamento da chave.
HTTP 422 com "code": "INSUFFICIENT_STOCK" e a mensagem
indica qual SKU nao tem estoque suficiente. A venda nao e processada parcialmente —
e tudo ou nada. Recomendamos verificar o campo stock_available
em GET /api/v1/produtos/{sku} antes de confirmar o checkout ao cliente.
POST /api/v1/vendas, voce deve enviar um campo
reference unico (ID do pedido no seu sistema ou UUID). Se a mesma
reference for enviada novamente — por exemplo em um retry apos timeout —
a API retorna HTTP 409 ALREADY_PROCESSED sem registrar a venda duas vezes.
Trate esse codigo como sucesso na sua logica.
per_page ate 100).
Ao exceder o limite, a API retorna HTTP 429 e voce deve aguardar
antes de tentar novamente.
GET /api/v1/produtos periodicamente para verificar o estoque.
Os webhooks sao uteis quando voce precisa que seu sistema reaja imediatamente
a eventos sem precisar consultar a API constantemente.
TEST-SKU-001) em sua conta
e registrar vendas com esses SKUs. Voce pode cancelar as vendas logo em seguida
via POST /api/v1/vendas/{ref}/cancelar para restaurar o estoque.
O campo channel aceita o valor "test" para identificar
requisicoes de teste nos logs.
14 dias gratis, sem cartao de credito. Configure sua primeira API Key em minutos.
Criar conta gratuita Ver documentacao