Documentação da API Pública - GameMarket

Integre seu sistema com a GameMarket usando nossa API RESTful. Gerencie produtos, pedidos, saldo e estatísticas de vendas diretamente da sua aplicação.

Autenticação

Todas as requisições à API devem incluir o header x-api-key com sua chave de API. As chaves seguem o formato gm_sk_[64 caracteres hex].

Requisitos: Ser vendedor verificado na plataforma.

Base URL

https://gamemarket.com.br/api/v1

Caminho alternativo: https://gamemarket.com.br/api/gamemarket

Endpoints Disponíveis

Gestão de Chaves

  • POST /api/api-keys - Criar nova chave de API (máximo 5 ativas)
  • GET /api/api-keys - Listar todas as chaves
  • DELETE /api/api-keys/:id - Revogar uma chave
  • GET /api/api-keys/:id/usage - Histórico de uso (últimas 100 requisições)

Produtos

  • GET /api/v1/products - Listar produtos com paginação e filtros de status
  • GET /api/v1/products/:id - Detalhes de um produto específico
  • POST /api/v1/products - Criar novo anúncio (limite: 50/dia)
  • PATCH /api/v1/products/:id - Atualizar produto existente

Saldo

  • GET /api/v1/balance - Saldo disponível, pendente e bloqueado

Pedidos

  • GET /api/v1/orders - Listar pedidos (vendas e compras)
  • GET /api/v1/orders/:id - Detalhes de um pedido

Estatísticas

  • GET /api/v1/stats - Total de vendas, avaliação, nível e produtos ativos

Jogos

  • GET /api/v1/games - Listar jogos disponíveis na plataforma

Limites e Quotas (v1)

  • Requisições por minuto: 30
  • Requisições por dia: 3000
  • Criação de anúncios: 50 por dia
  • Imagens por anúncio: máximo 10
  • 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)

API v2 (Beta)

A API v2 mantém a v1 intacta e adiciona: variantes com preço individual, edição de preço e estoque de cada variante, reabastecimento de estoque de entrega automática, criação de anúncios multi-variante, edição em massa de preço e status, mediações, avaliações recebidas e contestação de avaliação, com scopes granulares e idempotência obrigatória nas escritas.

Base URL: https://gamemarket.com.br/api/v2 · Autenticação: header x-api-key com chave de prefixo gm_v2_sk_ (chaves v1 e v2 são isoladas entre si).

Autenticação e Scopes

Cada chave v2 recebe scopes granulares na criação (ex.: catalog:read, products:read, products:write, orders:read, mediations:read, reviews:read, reviews:contest, wallet:read). Endpoint sem o scope necessário responde 403.

Idempotência (obrigatória em escritas)

Toda requisição POST/PATCH exige o header Idempotency-Key (16–255 caracteres [A-Za-z0-9_-]). Reenvios com a mesma chave retornam a mesma resposta sem duplicar a operação.

  • Sem o header em escrita → 400 (IDEMPOTENCY_KEY_REQUIRED)
  • Requisição idêntica ainda em processamento → 409
  • Reenvio após sucesso → resposta original armazenada (janela de 24h)

Endpoints v2

  • GET /api/v2/products - Listar anúncios com variantes e preço de cada uma
  • GET /api/v2/products/:id - Detalhe do anúncio com preço efetivo/base
  • POST /api/v2/products - Criar anúncio (single ou multi-variante com entrega automática)
  • PATCH /api/v2/products/:id - Atualizar anúncio (em anúncio com variantes, o preço muda pela rota de variantes)
  • PATCH /api/v2/products/:id/variants - Alterar preço e estoque das variantes de um anúncio dinâmico (retorno item a item, de 1 a 100 variantes por requisição)
  • POST /api/v2/products/:id/stock - Reabastecer o estoque de entrega automática (adiciona credenciais, com deduplicação). Limites por requisição: 2000 itens, 5000 caracteres por item e 10000 itens no total por anúncio ou variante
  • PATCH /api/v2/products/bulk-price - Edição de preço em massa (retorno item a item, de 1 a 100 itens por requisição)
  • PATCH /api/v2/products/bulk-status - Ativar/desativar anúncios em massa (de 1 a 100 itens por requisição)
  • GET /api/v2/orders e GET /api/v2/orders/:id - Pedidos (vendas e compras)
  • GET /api/v2/mediations e GET /api/v2/mediations/:orderId - Mediações (leitura)
  • GET /api/v2/reviews, GET /api/v2/reviews/stats, POST /api/v2/reviews/:reviewId/contest e GET /api/v2/contestations - Avaliações e contestações
  • GET /api/v2/balance e GET /api/v2/stats - Saldo e estatísticas
  • GET /api/v2/catalog/games - Catálogo de jogos com preço mínimo
  • GET /api/v2/me e GET /api/v2/usage - Identidade da chave e consumo atual

Exemplos de payload (endpoints de escrita da v2)

Corpo de requisição aceito por cada endpoint de escrita. Todos os schemas da v2 são estritos: campo não documentado faz a requisição ser recusada com HTTP 400.

POST /api/v2/products

{   "title": "Conta Valorant Full Acesso",   "description": "Conta com skins raras e e-mail original incluído.",   "price": 9990,   "game": "valorant",   "category": "account",   "warrantyPeriod": 14,   "accountProvenance": "resale",   "listingType": "multiple",   "deliveryTime": "24h",   "autoDeliverySeparator": "--",   "imageUrls": [     "https://cdn.exemplo.com/conta-valorant.png"   ],   "variants": [     {       "title": "Primária",       "price": 9990,       "autoDeliveryItems": "login1:senha1--login2:senha2"     },     {       "title": "Secundária",       "price": 7990,       "stock": 5     }   ] }

PATCH /api/v2/products/:id

{   "price": 8990,   "isActive": true,   "warrantyPeriod": 14,   "deliveryTime": "24h" }

PATCH /api/v2/products/:id/variants

{   "items": [     {       "index": 0,       "price": 4490     },     {       "index": 2,       "price": 8990,       "stock": 7     }   ] }

POST /api/v2/products/:id/stock

{   "variantIndex": 0,   "credentialsText": "login1:senha1--login2:senha2--login3:senha3",   "separator": "--",   "dedupeMode": "skip" }

PATCH /api/v2/products/bulk-price

{   "items": [     {       "id": 9123,       "price": 4490     },     {       "id": 9311,       "price": 8990     }   ] }

PATCH /api/v2/products/bulk-status

{   "items": [     {       "id": 9123,       "isActive": false     },     {       "id": 9311,       "isActive": true     }   ] }

POST /api/v2/reviews/:reviewId/contest

{   "reason": "Avaliação injusta: o comprador não respondeu o suporte e abriu nota baixa.",   "orderId": 48210 }

Limites e Quotas (v2)

  • Requisições por minuto: 60 (por conta)
  • Requisições por dia: 5000 (por conta)
  • Headers de limite em toda resposta: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset e Retry-After

Como obter acesso

A v2 está em beta fechado: as chaves são emitidas pela equipe GameMarket para vendedores verificados, mediante solicitação via suporte. A API v1 permanece disponível para todos os vendedores verificados.

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 em título ou descrição 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.

Exemplos de Código

Disponíveis em 7 linguagens: cURL, JavaScript, Python, PHP, Ruby, Go e C#.

A v1 traz exemplos de listagem de anúncios, atualização de anúncio e consulta de saldo. A v2 traz o fluxo completo de um anúncio dinâmico: descobrir o índice de cada variante em GET /api/v2/products, alterar o preço da variante em PATCH /api/v2/products/:id/variants e reabastecer o estoque de entrega automática em POST /api/v2/products/:id/stock, sempre com o header Idempotency-Key nas escritas e leitura do resultado item a item.