Documentação da API
Integre sua aplicação com o GameMarket através da nossa API RESTful. Acesse seus produtos, pedidos, saldo e estatísticas de forma programática.
Introdução
A API do GameMarket permite que vendedores verificados integrem suas aplicações com a plataforma. Com ela, você pode:
- Criar novos anúncios automaticamente (limite: 50/dia por conta)
- Gerenciar seus produtos (listar, atualizar, ativar/desativar)
- Consultar pedidos e histórico de vendas
- Verificar saldo e estatísticas
- Listar jogos disponíveis na plataforma
Nota: Para usar a API, você precisa ser um vendedor verificado. Acesse suas configurações para solicitar verificação.
Autenticação
A API utiliza chaves de API para autenticação. Você pode criar e gerenciar suas chaves na página de configurações.
Usando a chave de API
Inclua sua chave de API no header x-api-key de todas as requisições:
Exemplo de requisição (também aceita /api/gamemarket/...)
Permissões
Cada chave de API pode ter diferentes permissões:
readPermite leitura de dados (produtos, pedidos, saldo)writePermite criação e atualização de recursosdeletePermite exclusão de recursos
Gestão de Chaves
Endpoints para gerenciar suas chaves de API. Estes endpoints requerem autenticação por sessão (login no site).
POST /api/api-keys
Cria uma nova chave de API. Você pode ter no máximo 5 chaves ativas.
Headers
Content-Type: application/json- Tipo do conteúdo
GET /api/api-keys
Lista todas as suas chaves de API.
DELETE /api/api-keys/:id
Revoga uma chave de API. A chave não poderá mais ser usada.
Parâmetros de Path
id(number) obrigatório - ID da chave de API
GET /api/api-keys/:id/usage
Retorna o histórico de uso de uma chave de API (últimas 100 requisições).
Parâmetros de Path
id(number) obrigatório - ID da chave de API
Produtos
Endpoints para gerenciar seus produtos na plataforma.
GET /api/v1/products
read
Lista todos os seus produtos com paginação. Retorna um campo 'status' calculado para cada produto.
Query Parameters
page(number) default: 1 - Número da páginalimit(number) default: 20 - Itens por página (máx 100)status(string) - Filtrar por status: 'ativo' (aprovado e visível), 'desativado' (inativo manualmente), 'em_analise' (aguardando aprovação), 'rejeitado' (negado pela equipe), 'todos' (sem filtro)
Headers
x-api-key: gm_sk_...- Sua chave de API
GET /api/v1/products/:id
read
Retorna os detalhes de um produto específico.
Parâmetros de Path
id(number) obrigatório - ID do produto
Headers
x-api-key: gm_sk_...- Sua chave de API
Nota: Em anúncios com variantes (listingType 'multiple'), o campo variants traz o título, o preço e o estoque de cada variante, e multipleProducts vem sempre null. A resposta do PATCH segue a mesma forma.
POST /api/v1/products
write
Cria um novo anúncio/produto na plataforma. O anúncio ficará pendente de aprovação. Limite: 50 anúncios por dia por conta.
Headers
x-api-key: gm_sk_...- Sua chave de APIContent-Type: application/json- Tipo do conteúdo
Corpo da Requisição (JSON)
title(string) obrigatório - Título do anúncio (5-200 caracteres)description(string) obrigatório - Descrição detalhada (20-5000 caracteres)price(number) obrigatório - Preço em centavos (mín: 100 = R$ 1,00, ou o mínimo global configurado na categoria)game(string) obrigatório - Slug do jogo (use GET /games para listar)category(string) default: account - Categoria: 'account' ou 'item'warrantyPeriod(number) obrigatório - Período de garantia em dias (valores aceitos: 7, 14 ou 30)accountProvenance(string) obrigatório - Procedência: 'creator' (criador original) ou 'resale' (revenda)listingType(string) default: single - Tipo de listagem: 'single' ou 'multiple'isAutoDelivery(boolean) default: false - Se é entrega automática (⚠️ APENAS para listingType='single')autoDeliveryContent(string) - ⚠️ OBRIGATÓRIO se isAutoDelivery=true E listingType='single'. Conteúdo entregue automaticamente (máx 10.000 chars)deliveryTime(string) - Prazo de entrega (ex: '1d', '2h', '15min', máx 20 chars)imageUrls(string[]) - Array de URLs HTTPS de imagens (máx 10, apenas URLs públicas)
⚠️ Campos Obrigatórios Condicionalmente:
- autoDeliveryContent é obrigatório se isAutoDelivery=true (⚠️ Auto-delivery funciona APENAS com listingType='single')
- imageUrls devem ser HTTPS e acessíveis publicamente (validação automática)
- warrantyPeriod aceita apenas os valores: 7, 14 ou 30 dias
PATCH /api/v1/products/:id
write
Atualiza informações de um produto. Para desativar um anúncio, use isActive: false.
Parâmetros de Path
id(number) obrigatório - ID do produto
Headers
x-api-key: gm_sk_...- Sua chave de APIContent-Type: application/json- Tipo do conteúdo
Corpo da Requisição (JSON)
title(string) - Novo título (mín: 5 chars, máx: 200) ⚠️ Requer nova aprovaçãodescription(string) - Nova descrição (mín: 20 chars, máx: 5.000) ⚠️ Requer nova aprovaçãoprice(number) - Novo preço em centavos (mín: 100 = R$ 1,00, ou o mínimo global configurado na categoria)isActive(boolean) - Ativar (true) ou desativar (false) o anúnciowarrantyPeriod(number) - Período de garantia em dias (valores aceitos: 7, 14 ou 30)deliveryTime(string) - Prazo de entrega (máx 20 chars, ex: '1d', '2h')autoDeliveryContent(string) - Conteúdo de entrega automática (máx 10.000 chars)
⚠️ Importante sobre edições (PATCH):
- Alterações em title ou description retornam o produto para status "em_analise" (nova aprovação necessária)
- Produtos com status "rejeitado" não podem ser editados via API (HTTP 403)
- Para desativar um anúncio temporariamente, use isActive: false
- Voltam para análise as alterações reais de title, description, warrantyPeriod e deliveryTime. Enviar um valor igual ao atual não conta como alteração e não reenvia o anúncio para análise.
- warrantyPeriod só vale para anúncios da categoria account; nos demais, o campo é ignorado.
- Reativar (isActive: true) exige anúncio aprovado, com estoque e fora do Modo Offline. Os códigos de recusa estão na seção de códigos de erro.
Nota: Por segurança, a exclusão de produtos via API foi desabilitada. Para desativar um anúncio, use PATCH /api/v1/products/:id com isActive: false. Para excluir permanentemente, acesse o painel do vendedor no site.
Saldo
GET /api/v1/balance
read
Retorna o saldo atual do vendedor.
Headers
x-api-key: gm_sk_...- Sua chave de API
Pedidos
GET /api/v1/orders
read
Lista todos os seus pedidos (vendas e compras).
Query Parameters
page(number) default: 1 - Número da páginalimit(number) default: 20 - Itens por página (máx 100)type(string) - Filtrar por tipo (sales, purchases)status(string) - Filtrar por status
Headers
x-api-key: gm_sk_...- Sua chave de API
GET /api/v1/orders/:id
read
Retorna os detalhes de um pedido. Aceita orderCode (ex: GM-AB12CD) ou ID numérico como parâmetro.
Parâmetros de Path
id(string) obrigatório - OrderCode (ex: GM-AB12CD) ou ID numérico do pedido
Headers
x-api-key: gm_sk_...- Sua chave de API
Estatísticas
GET /api/v1/stats
read
Retorna estatísticas gerais do vendedor.
Headers
x-api-key: gm_sk_...- Sua chave de API
Jogos
GET /api/v1/games
read
Lista todos os jogos disponíveis e ativos na plataforma. Use o campo slug ao criar produtos.
Headers
x-api-key: gm_sk_...- Sua chave de API
Limites & Quotas
Rate Limits
- Requisições por minuto: 30/min
- Requisições por dia: 3000/dia
💡 Os limites são por conta (não por chave). Todas as suas chaves compartilham o mesmo rate limit. Headers de resposta incluem: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset (timestamp Unix em segundos)
Limites de Criação
- Anúncios por dia (via API): 50/dia por conta
- Imagens por anúncio: Máx 10
- Conteúdo auto-delivery: Máx 10,000 chars
Limites de Tamanho
- Título do produto: 5-200 chars
- Descrição: 20-5,000 chars
- Preço mínimo: R$ 1,00 (padrão; configurável por jogo)
- Preço máximo: R$ 1.000.000,00 por anúncio
Melhores Práticas
Segurança
- Nunca exponha sua API key no código client-side
Use variáveis de ambiente e sempre faça chamadas pelo backend - Rotacione suas chaves periodicamente
Recomendamos rotação a cada 90 dias por segurança - Monitore o uso das suas chaves
Verifique regularmente os logs de acesso em Configurações → API
Performance
- Implemente cache local
Liste de jogos (GET /games) raramente muda - cache por 24h - Use paginação eficientemente
Limite máximo é 100 itens. Use limit menor para respostas mais rápidas - Implemente retry com backoff exponencial
Em caso de erro 429 (rate limit), aguarde o tempo indicado em X-RateLimit-Reset
Validação de Dados
- Valide antes de enviar
Verifique tipos, limites e formatos localmente antes de fazer requisições - Sempre verifique o campo success
Respostas incluem "success": true/false, nunca assuma sucesso sem verificar - Produtos editados podem requerer nova aprovação
Alterações reais em título, descrição, garantia (warrantyPeriod) ou prazo de entrega (deliveryTime) retornam o produto para status "em_analise"
Códigos de Erro
- 401 API key inválida ou ausente
- A chave de API não foi fornecida ou está incorreta.
- 403 Permissão insuficiente
- A chave de API não tem permissão para esta operação.
- 403 Vendedor em débito (SELLER_IN_DEBT)
- A API foi suspensa porque o vendedor possui débito pendente com a plataforma. Regularize as disputas para restaurar o acesso.
- 429 Rate limit excedido
- Você excedeu o limite de requisições. Aguarde antes de tentar novamente.
- 404 Recurso não encontrado
- O recurso solicitado não existe ou você não tem acesso a ele.
- 500 Erro interno do servidor
- Ocorreu um erro inesperado. Tente novamente mais tarde.
- 403 - Conta de vendedor restrita (SELLER_RESTRICTED)
- A API fica suspensa enquanto a conta estiver restrita. Fale com o suporte.
- Rotas: Todas as rotas
- 400 - Preço acima do máximo por anúncio
- O preço aceita no máximo 100000000 centavos (R$ 1.000.000,00). Acima disso, a requisição é recusada com erro de validação (error "Validation error") no campo price. Confira se o valor está em centavos e não foi multiplicado por 100 duas vezes.
- Rotas: POST /api/v1/products · PATCH /api/v1/products/:id
- 409 - Estoque em uso (STOCK_BUSY)
- A troca de credenciais (autoDeliveryContent) coincidiu com uma venda ou outra alteração de estoque em andamento. Nada foi alterado e a resposta traz retryable: true: reenvie a mesma requisição em alguns segundos.
- Rotas: PATCH /api/v1/products/:id
- 410 - Anúncio removido em definitivo (LISTING_TAKEN_DOWN)
- Recusa ao reativar (isActive: true). O anúncio foi removido pela moderação e não pode ser reativado nem editado. Se você acredita que houve um engano, fale com o suporte.
- Rotas: PATCH /api/v1/products/:id
- 410 - Anúncio recusado em definitivo (LISTING_PERMANENTLY_REJECTED)
- Recusa ao reativar (isActive: true). O anúncio foi recusado em definitivo pela moderação e não pode ser reativado, editado nem reenviado para análise. Se você acredita que houve um engano, fale com o suporte.
- Rotas: PATCH /api/v1/products/:id
- 409 - Pausado pelo Modo Offline (OFFLINE_PAUSED)
- Recusa ao reativar (isActive: true). Desative o Modo Offline no painel do vendedor: isso reativa de uma vez todos os anúncios pausados por ele.
- Rotas: PATCH /api/v1/products/:id
- 400 - Anúncio não aprovado (NOT_APPROVED)
- Recusa ao reativar (isActive: true). Só anúncio aprovado pode ser ativado: aguarde a análise e ative depois da aprovação.
- Rotas: PATCH /api/v1/products/:id
- 400 - Anúncio sem estoque (NO_STOCK)
- Recusa ao reativar (isActive: true). Reponha o estoque antes de ativar. Em listagem única com entrega automática, as novas credenciais podem ir em autoDeliveryContent na mesma requisição do isActive: true; nos demais casos, use o painel do vendedor.
- Rotas: PATCH /api/v1/products/:id
- 200 - Nenhuma alteração aplicada
- Quando todos os campos enviados entre title, description, warrantyPeriod, deliveryTime e isActive já tinham o valor atual e nenhum outro campo foi enviado, a resposta é 200 com a mensagem "No changes applied": nada é gravado e o anúncio não volta para análise. Um corpo sem nenhum campo aplicável ao anúncio continua respondendo 400 ("No applicable fields").
- Rotas: PATCH /api/v1/products/:id
Exemplos de Código
- cURL
- JavaScript
- Python
- PHP
- Ruby
- Go
- C#