REST API v1

Integre seu site ao estoque unificado da LOJEXA

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.

HTTPS + HMAC Idempotente Multi-canal < 100ms
POST /api/v1/vendas
# 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
    }]
  }
}

Integre em 3 passos

Da criacao da conta ate a primeira venda sincronizada, em minutos.

1
Crie uma conta e gere sua API Key

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.

2
Consulte produtos e estoque disponivel

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.

3
Registre vendas — estoque sincronizado

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.

Endpoints disponiveis

API REST com autenticacao por Bearer Token. Base URL: https://lojexa.com/api/v1

GET /api/v1/ping

Verificar autenticacao e status da chave. Ideal para healthchecks da integracao.

GET /api/v1/produtos

Listar produtos com estoque disponivel em tempo real. Suporta paginacao, busca e filtro por categoria.

GET /api/v1/produtos/{sku}

Buscar produto especifico por SKU. Retorna dados completos incluindo estoque reservado e disponivel.

POST /api/v1/vendas

Registrar venda e baixar estoque automaticamente. Idempotente por reference. Sincroniza todos os canais.

POST /api/v1/vendas/{ref}/cancelar

Cancelar venda e restaurar estoque. O estoque e re-sincronizado com todos os marketplaces conectados.

GET /api/v1/uso

Estatisticas de uso da chave: vendas hoje, no mes, consumo de rate limit e configuracao de webhook.

Exemplos de integracao

Copie e cole. Substitua lj_live_SEU_TOKEN pela sua chave.

bash
# 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
<?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');
}
javascript
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);
python
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']}")

Webhooks em tempo real

Receba notificacoes automaticas quando vendas sao confirmadas ou canceladas. Sem polling, sem latencia.

Eventos disparados
sale.confirmed

Disparado apos POST /api/v1/vendas ser processado com sucesso. O payload inclui os itens vendidos e o estoque atualizado.

sale.reversed

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
Verificar assinatura HMAC
php — verificar X-Lojexa-Signature
$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.

Casos de uso

Quem usa a API LOJEXA e como integra com o estoque centralizado.

E-commerce proprio

Site WooCommerce, Magento ou customizado? Sincronize o estoque em tempo real com todos os marketplaces sem vender o mesmo item duas vezes.

App mobile

Aplicativo React Native ou Flutter que registra pedidos? Consuma a API para exibir estoque em tempo real e registrar vendas instantaneamente.

Sistema interno

ERP legado, planilha avancada ou sistema proprio? Integre via API para manter o estoque LOJEXA sempre atualizado sem migrar de plataforma.

Integracao B2B

Vende para revendedores ou distribuidores? Abra um canal de API dedicado com escopos e rate limits especificos para cada parceiro.

API disponivel nos planos Profissional e Empresarial

Disponibilidade por plano

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 Email Dedicado

Perguntas frequentes

O escopo 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.

A API retorna 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.

Ao registrar uma venda com 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.

O padrao e 60 requisicoes por minuto por chave de API (plano Profissional). O plano Empresarial oferece 300 req/min. Para sincronizacoes em massa, distribua as requisicoes ao longo do tempo e use paginacao (per_page ate 100). Ao exceder o limite, a API retorna HTTP 429 e voce deve aguardar antes de tentar novamente.

Nao. Webhooks sao opcionais. Voce pode usar apenas o modelo de polling — fazendo 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.

Atualmente nao ha ambiente sandbox separado. Para testes, recomendamos criar produtos de teste com SKUs dedicados (ex: 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.

Pronto para integrar seu site?

14 dias gratis, sem cartao de credito. Configure sua primeira API Key em minutos.

Criar conta gratuita Ver documentacao