1. Crie a chave
No painel da loja, abra Integrações, defina um nome, uma validade e somente as permissões necessárias.
Gerencie produtos, cupons, estoque e catálogos por uma API autenticada, com permissões granulares e isolamento automático entre lojas.
Primeiros passos
Crie a chave no painel, guarde-a no servidor e envie apenas o cabeçalho de autenticação.
No painel da loja, abra Integrações, defina um nome, uma validade e somente as permissões necessárias.
A chave começa com amk_ e o valor completo é mostrado apenas na criação. Depois, somente o hash permanece armazenado.
Envie X-Api-Key em seu back-end. A própria chave identifica a loja; não envie X-Store-Id.
Autenticação
Cada chave pertence a uma única loja e carrega seu próprio conjunto de permissões.
Navegadores, apps distribuídos, logs públicos e repositórios não são locais seguros para credenciais permanentes. Para usar Try It, crie uma chave de teste com permissões mínimas e revogue-a depois.
curl "https://api.amethys.lat/api/v1/dashboard/store/integrations/public/products" \
--request GET \
--header "X-Api-Key: amk_SUA_CHAVE" \
--header "Accept: application/json"Contrato
A API sempre informa success e retorna data em sucesso ou error em falha.
{
"success": true,
"data": { ... }
}{
"success": false,
"error": "Descrição segura do erro"
}Referência completa
Os parâmetros com dois-pontos são identificadores de recursos pertencentes à loja autenticada.
Crie, consulte, edite e remova produtos da loja vinculada à chave.
/productsRetorna os produtos pertencentes à loja autenticada.
Permissão exigida
products:listGET https://api.amethys.lat/api/v1/dashboard/store/integrations/public/products{
"success": true,
"data": [
{
"id": "produto_id",
"name": "Produto digital",
"description": "Descrição da oferta",
"delivery_type": "stock",
"visible": true
}
]
}/productsCria um produto inicialmente não publicado para revisão segura no painel.
Permissão exigida
products:createname é obrigatório. O produto nasce com visible: false.
POST https://api.amethys.lat/api/v1/dashboard/store/integrations/public/products{
"name": "Produto digital",
"description": "Descrição completa",
"banner": "https://exemplo.com/banner.png",
"hex_color": "#8B5CF6",
"delivery_type": "stock"
}/products/:productIdAltera somente os campos informados de um produto da loja.
Permissão exigida
products:editPATCH https://api.amethys.lat/api/v1/dashboard/store/integrations/public/products/:productId{
"name": "Novo nome",
"description": "Nova descrição",
"banner": "https://exemplo.com/banner.png",
"hex_color": "#7C3AED",
"delivery_type": "stock",
"visible": true
}/products/:productIdRemove permanentemente um produto pertencente à loja.
Permissão exigida
products:deleteOperação destrutiva. Confirme o identificador antes de executar.
DELETE https://api.amethys.lat/api/v1/dashboard/store/integrations/public/products/:productIdGerencie descontos associados a um produto específico.
/products/:productId/couponsLista os cupons cadastrados no produto informado.
Permissão exigida
coupons:listGET https://api.amethys.lat/api/v1/dashboard/store/integrations/public/products/:productId/coupons/products/:productId/couponsAdiciona um novo cupom ao produto.
Permissão exigida
coupons:createname é obrigatório. percent e duration_days são validados pelo servidor.
POST https://api.amethys.lat/api/v1/dashboard/store/integrations/public/products/:productId/coupons{
"name": "LANCAMENTO20",
"percent": 20,
"duration_days": 7
}/products/:productId/coupons/:couponIdAtualiza nome, percentual, validade ou estado do cupom.
Permissão exigida
coupons:editPATCH https://api.amethys.lat/api/v1/dashboard/store/integrations/public/products/:productId/coupons/:couponId{
"name": "LANCAMENTO15",
"percent": 15,
"duration_days": 14,
"active": true
}/products/:productId/coupons/:couponIdRemove o cupom indicado do produto.
Permissão exigida
coupons:deleteDELETE https://api.amethys.lat/api/v1/dashboard/store/integrations/public/products/:productId/coupons/:couponIdConfigure opções comerciais e os itens entregues automaticamente.
/products/:productId/stockRetorna as opções e a disponibilidade do produto.
Permissão exigida
stock:listGET https://api.amethys.lat/api/v1/dashboard/store/integrations/public/products/:productId/stock/products/:productId/stockCria uma opção de preço e entrega no produto.
Permissão exigida
stock:createPOST https://api.amethys.lat/api/v1/dashboard/store/integrations/public/products/:productId/stock{
"name": "Licença mensal",
"price": 49.9,
"emoji": "💜",
"pre_description": "Acesso por 30 dias",
"description": "Detalhes completos",
"instructions": "Siga as instruções enviadas por e-mail"
}/products/:productId/stock/:campoIdAtualiza os dados comerciais ou de entrega de uma opção.
Permissão exigida
stock:editPATCH https://api.amethys.lat/api/v1/dashboard/store/integrations/public/products/:productId/stock/:campoId{
"name": "Licença anual",
"price": 399.9,
"instructions": "Ative sua licença no portal"
}/products/:productId/stock/:campoIdRemove uma opção e sua configuração de estoque.
Permissão exigida
stock:deleteDELETE https://api.amethys.lat/api/v1/dashboard/store/integrations/public/products/:productId/stock/:campoId/products/:productId/stock/:campoId/itemsInsere itens únicos que poderão ser entregues após pagamentos confirmados.
Permissão exigida
stock:editAceita um array de strings com até 10.000 itens por requisição. Nunca reutilize um segredo entregue.
POST https://api.amethys.lat/api/v1/dashboard/store/integrations/public/products/:productId/stock/:campoId/items{
"items": [
"CHAVE-UNICA-001",
"CHAVE-UNICA-002"
]
}/products/:productId/stock/:campoId/itemsRemove todos os itens ainda disponíveis daquela opção.
Permissão exigida
stock:editAção destrutiva. Itens já entregues permanecem registrados conforme as regras da plataforma.
DELETE https://api.amethys.lat/api/v1/dashboard/store/integrations/public/products/:productId/stock/:campoId/itemsOrganize produtos em coleções exibidas na vitrine.
/catalogsRetorna os catálogos da loja autenticada.
Permissão exigida
catalogs:listGET https://api.amethys.lat/api/v1/dashboard/store/integrations/public/catalogs/catalogsCria uma coleção e opcionalmente associa produtos.
Permissão exigida
catalogs:createPOST https://api.amethys.lat/api/v1/dashboard/store/integrations/public/catalogs{
"name": "Mais vendidos",
"description": "Produtos em destaque",
"icon": "Sparkles",
"product_ids": ["produto_1", "produto_2"]
}/catalogs/:idAtualiza dados, ordem e produtos associados.
Permissão exigida
catalogs:editPATCH https://api.amethys.lat/api/v1/dashboard/store/integrations/public/catalogs/:id{
"name": "Destaques",
"description": "Seleção principal",
"icon": "Star",
"product_ids": ["produto_1"],
"order": 1
}/catalogs/:idRemove o catálogo sem excluir os produtos associados.
Permissão exigida
catalogs:deleteDELETE https://api.amethys.lat/api/v1/dashboard/store/integrations/public/catalogs/:idMenor privilégio
Conceda apenas as ações que sua integração realmente executa.
productsstockcouponscatalogsTempo real
A API REST continua disponível para consultas e comandos. Para receber mudanças sem consultar repetidamente, crie uma API Key com events:read e conecte seu servidor ao endereço abaixo. Envie a chave no cabeçalho X-Api-Key; não coloque a chave na URL ou em código de navegador.
A conexão recebe connected, depois os 25 eventos mais recentes. Cada evento contém event_id, type, store_id, occurred_at e data com identificadores seguros. Envie {"type":"event.ack","event_id":"..."} após processar. Na reconexão, use ?after=<último event_id> para retomar. O servidor consulta a outbox persistida e pode reenviar eventos; trate event_id de forma idempotente.
O canal é somente de eventos. Comandos continuam na API REST. A chave é revalidada durante a conexão e a leitura pode ser revogada no painel.
import WebSocket from "ws";
const socket = new WebSocket(
"wss://api.amethys.lat/api/v1/dashboard/store/integrations/ws",
{ headers: { "X-Api-Key": process.env.AMETHYS_API_KEY } }
);
socket.on("message", (raw) => {
const event = JSON.parse(raw.toString());
if (!event.event_id) return;
// Persista event.event_id para retomar com ?after=<id>.
console.log(event.type, event.data);
socket.send(JSON.stringify({
type: "event.ack", event_id: event.event_id
}));
});Entrega HTTP
Configure um endpoint HTTPS em Configurações → Webhooks da loja e selecione os eventos. Cada endpoint tem um segredo de assinatura próprio. A Amethys envia um POST com id, event, createdAt e data. O cabeçalho X-Amethys-Delivery identifica a tentativa; X-Amethys-Signature contém o HMAC SHA-256 do corpo bruto.
Há eventos de vendas, pagamentos, afiliados, suporte, produtos, estoque, cupons e catálogos. O worker de webhooks entrega eventos da fila persistida e tenta novamente até cinco vezes em falhas. Responda com HTTP 2xx somente após processar com segurança; deduplique pelo identificador de entrega.
Os históricos de WebSocket e Webhooks ficam nas páginas do Menu da dashboard. Ali é possível filtrar WebSocket por API Key e Webhooks por endpoint/chave de assinatura, sem revelar as chaves.
import { createHmac, timingSafeEqual } from "node:crypto";
const expected = createHmac("sha256", process.env.AMETHYS_WEBHOOK_SECRET)
.update(rawBody).digest("hex");
const received = request.headers["x-amethys-signature"]?.replace(/^sha256=/, "");
if (!received || !/^[0-9a-f]{64}$/i.test(received) || !timingSafeEqual(
Buffer.from(expected, "hex"), Buffer.from(received, "hex")
)) throw new Error("Assinatura inválida");O limite global é de 180 requisições por minuto por IP. Operações de escrita também respeitam 120 por minuto por IP e 60 por minuto por chave/ator.
Ao receber 429, leia Retry-After, aplique backoff exponencial com aleatoriedade e não repita escritas cegamente.
Permissão, validade da chave, propriedade da loja, identificadores e payloads são validados pelo back-end. Um identificador enviado pelo cliente não altera o escopo associado à chave.
Ainda assim, sua aplicação deve validar entrada do próprio usuário e tratar cada resposta como falível.
Diagnóstico
Use o status HTTP para decidir se deve corrigir, autenticar, aguardar ou registrar o incidente.
400Revise JSON, parâmetros e tipos.
401X-Api-Key ausente, inválida ou expirada.
403A chave não possui a permissão exigida.
404O recurso não existe ou não pertence à loja da chave.
409O estado atual impede a operação.
422Os dados são válidos, mas não atendem à regra.
429Aguarde o Retry-After antes de tentar novamente.
500Registre a ocorrência e tente novamente com segurança.
Checklist
Cuidados mínimos para uma integração confiável.
Armazene a chave em um cofre de segredos ou variável de ambiente no servidor.
Crie chaves separadas por aplicação e ambiente.
Use o menor conjunto possível de permissões e defina validade.
Revogue imediatamente chaves expostas ou que não são mais utilizadas.
Não registre cabeçalhos de autenticação em logs, erros ou ferramentas de analytics.
Implemente timeout, backoff e idempotência na sua própria camada de negócio.
Valide identificadores e dados antes de chamar a API.
Monitore respostas 401, 403 e 429 sem tentar contornar os controles.