GAMEPRICEAPI / DESENVOLVEDORES

Pronta para conectar.

Integre o catálogo de jogos físicos, metadados disponíveis e referências de preço à sua aplicação. Comece pela autenticação e faça sua primeira consulta.

REST + JSONAPI v1Bearer tokenValores em USD
Nesta documentação

Sua primeira consulta

Use a URL base https://api.meuretro.com.br e uma chave de cliente com acesso ativo. Os exemplos abaixo leem a variável de ambiente GAMEPRICEAPI_KEY no seu servidor.

curl --fail-with-body --get \
  'https://api.meuretro.com.br/v1/products' \
  --header "Authorization: Bearer $GAMEPRICEAPI_KEY" \
  --data-urlencode 'q=mario' \
  --data-urlencode 'limit=5'

O exemplo cURL usa um shell compatível com bash. Configure a variável de ambiente fora do código e mantenha a chave em segredo.

Ainda não tem acesso? Solicite acesso à equipe da GAMEPRICEAPI ↗. A documentação é pública; os dados exigem contratação, ativação da conta e uma chave válida.

Autenticação e acesso comercial

Envie a chave exclusivamente no cabeçalho Authorization, com o esquema Bearer. Todos os endpoints de /v1/, incluindo imagens, cobertura e consumo, exigem autenticação e acesso ativo.

Cabeçalho de autenticação
Authorization: Bearer SUA_CHAVE

A equipe emite a chave e ativa o acesso após confirmar as condições comerciais. Uma chave emitida para uma conta pendente, suspensa ou expirada não libera os dados. A página pública não oferece cadastro automático ou checkout.

  • Mantenha a chave no backend, em uma variável de ambiente ou gerenciador de segredos.
  • Não inclua a chave em URLs, aplicativos cliente, JavaScript público, repositórios ou logs.
  • Não use a chave diretamente em uma tag de imagem. Seu backend deve buscar o arquivo autenticado.
  • Em caso de exposição, solicite a revogação e a emissão de uma nova chave pelo canal de atendimento.

Uso interno ou em um app?

A diferença principal é quem terá acesso às referências no seu produto — não se o seu app é pago ou gratuito. Escolha a modalidade pelo uso e dimensione a cota pelo volume de requisições feitas pelo seu backend.

ModalidadeUso a contratarCota-base
Uso internoPainéis privados, análise e gestão de estoque acessíveis somente à equipe da sua organização. Exibir referências a clientes em uma loja ou aplicativo exige escopo de Apps e sites.10.000 requisições por mês
60 por minuto
Preço sob consulta
Apps e sitesExibição para usuários de um app, site ou loja, inclusive gratuitos, nos projetos aprovados no contrato. A integração e a chave ficam no seu backend.100.000 requisições por mês
60 por minuto
Preço sob consulta
Parcerias de dadosDistribuição de bases, exportações a terceiros ou revenda via outra API exigem análise e autorização específica por escrito. Não estão incluídas automaticamente na modalidade Apps e sites.Volume e condições personalizados após análise
Preço sob consulta

As cotas-base orientam novas contratações. A ativação é manual, após o acordo comercial; não há contratação automática, acesso ilimitado nem cobrança automática de excedentes. Consulte os limites efetivos da sua conta em /v1/usage.

O que precisa constar do acordo

  • Projetos, marcas, ambientes e formas de exibição autorizados, além da cobertura de dados necessária.
  • Uso de imagens, créditos e atribuições aplicáveis. Ter acesso ao arquivo não substitui as permissões de uso.
  • Política de cache, retenção e tratamento dos dados após o encerramento do contrato.
  • Quotas, validade do acesso e eventuais ajustes de capacidade; volumes maiores dependem de análise técnica.
Esta página explica a oferta e a integração; não altera unilateralmente contratos de clientes existentes. O escopo aprovado por escrito prevalece. Conte à equipe como pretende usar os dados ↗.

Uma integração para muitos usuários

O navegador ou celular do seu usuário conversa com o seu backend. Seu backend consulta a GAMEPRICEAPI com uma chave secreta, atualiza o cache permitido no contrato e entrega a experiência do app. Não distribua a chave aos usuários nem crie um proxy público irrestrito da API.

  1. Encontre os produtos e salve os IDs canônicos, como gameprice:12345.
  2. Atualize os IDs conhecidos em lotes de até 100, com uma fila e frequência compatíveis com a sua cota e a atualização dos dados.
  3. Sirva as referências do seu cache, preservando as datas de observação e sinalizando valores antigos conforme stale.
  4. Busque imagens separadamente apenas quando necessário e mantenha os créditos e a política de cache contratados.
Exemplo de dimensionamento: atualizar 1.000 produtos conhecidos usa 10 lotes de 100 IDs. Repetir esse ciclo 30 vezes usa 300 requisições, mais buscas, downloads de imagens, consultas de consumo, páginas adicionais e retentativas admitidas. Isso não significa 300 usuários ou visualizações: a unidade de cota é a requisição à API.

O cache reduz chamadas repetidas, mas não autoriza revenda ou distribuição da base. Combine a frequência de atualização com a cobertura disponível; consultas de clientes não provocam uma nova coleta no fornecedor.

O modelo de produto

O ID público usa o namespace gameprice, como gameprice:12345. Trate o ID completo como uma chave opaca: utilize o valor retornado pela API, sem calcular IDs nem deduzir equivalências com outros catálogos. Identificadores complementares ficam em metadata.identifiers. Plataforma, país e tipo de lançamento ajudam a distinguir regiões e edições.

As respostas usam o formato canônico gameprice:, inclusive nos IDs ausentes, nos links de imagens e em next_after.

Exemplo ilustrativo. Todos os títulos, IDs e valores abaixo são fictícios. O exemplo demonstra o formato; não representa um produto disponível ou uma cotação real.
Objeto de produto · exemplo fictício
{
  "id": "gameprice:12345",
  "title": "Jogo de exemplo",
  "identifiers": { "gamepriceapi": "12345" },
  "platform_id": 6,
  "country_id": 1,
  "release_type": 0,
  "category_id": 0,
  "product_type": "game",
  "currency": "USD",
  "metadata": {
    "title": "Jogo de exemplo",
    "description": null,
    "release_date": null,
    "developers": [],
    "publishers": [],
    "genres": [{ "id": null, "name": "Aventura" }],
    "players": null,
    "platform": { "id": 6, "name": null },
    "country": { "id": 1, "name": null },
    "edition": null,
    "identifiers": { "gamepriceapi": "12345" },
    "barcodes": [],
    "images": [],
    "links": [],
    "attributes": {}
  },
  "metadata_observed_at": "2026-10-11T12:00:00.000Z",
  "prices": {
    "loose": {
      "amount_cents": 2500,
      "observed_at": "2026-10-11T12:00:00.000Z",
      "stale": false
    },
    "cib": {
      "amount_cents": 4500,
      "observed_at": "2026-10-11T12:00:00.000Z",
      "stale": false
    },
    "new": {
      "amount_cents": null,
      "observed_at": null,
      "stale": true
    }
  },
  "provenance": {
    "source": "EBAY",
    "delivered_by": "GAMEPRICEAPI",
    "source_role": "upstream_marketplace",
    "acquisition_method": "licensed_partner_reference",
    "source_basis": "partner_reported",
    "source_url": null,
    "provider_as_of": null,
    "fetched_at": "2026-10-11T12:00:00.000Z",
    "match_type": "exact_provider_identity"
  }
}

Identidade e metadados

CampoSignificado
idstringID público canônico com namespace, como gameprice:12345. Use o valor completo retornado pela API, sem inferir equivalência entre fornecedores.
identifiersobjectIdentificadores como gamepriceapi, metacritic e howlongtobeat, quando disponíveis. Os valores são strings. Não são IDs de anúncios ou transações do eBay.
platform_id
country_id
release_type
category_idinteger
Códigos da fonte. Não são códigos ISO ou identificadores universais. category_id: 0 jogo, 1 console, 2 controle, 4 guia, 5 acessório; outras categorias são representadas como product.
product_typestringgame, console, controller, guide, accessory ou product, conforme a categoria. A cobertura efetiva depende do acervo.
metadataobjectDetalhes disponíveis do produto. Textos ausentes são null; listas ausentes são []. Não presuma preenchimento completo.
metadata.description
metadata.release_date
metadata.editionstring | null
Descrição, data de lançamento e edição, quando informadas pela fonte. A data é normalizada para YYYY-MM-DD.
metadata.developers
metadata.publishers
metadata.genresarray
Listas de objetos {id, name}. Cada propriedade pode ser uma string ou null.
metadata.playersnumber | string | nullInformação de jogadores conforme a fonte; pode ser um número ou texto descritivo.
metadata.platform
metadata.countryobject
{id, name} com código numérico da fonte e nome textual, quando disponível. O nome pode ser null.
metadata.barcodesarrayObjetos com value, format, normalized e checksum_valid. Preserve códigos como strings, inclusive zeros à esquerda. Validação desconhecida é null.
metadata.imagesarraySomente arquivos disponíveis no cache da API: type, url protegida e relativa, mime_type, attribution quando informada e dimensões quando conhecidas. Preserve a atribuição de origem ao exibir a imagem. Veja imagens.
metadata.linksarrayLinks de produto ou busca no formato {source, url}, quando disponíveis. Não comprovam vendas realizadas nem a origem de cada referência de preço.
metadata.attributesobjectCampos complementares de produto selecionados da fonte. O conjunto pode variar; não contém dados de coleções de usuários.
metadata_observed_atdate-time | nullData de observação dos metadados. É independente da data de cada referência de preço.

Preços que mantêm o contexto

A GAMEPRICEAPI entrega referências processadas recebidas por uma integração licenciada. O parceiro informa o eBay como mercado de origem; isso é diferente de consultar diretamente a API do eBay. currency é sempre USD; amount_cents é um inteiro em centavos. Por exemplo, 12345 representa US$ 123,45.

Soltoprices.loose

Referência para o item sem o conjunto completo de caixa e manuais.

Completoprices.cib

Referência para a condição completa na caixa (complete in box).

Lacradoprices.new

Referência da condição nova/lacrada classificada pela fonte.

Como interpretar a origem

Campo em provenanceSignificado
source: EBAY
source_role: upstream_marketplace
Mercado de origem informado para a integração, não o fornecedor direto da API nem a fonte comprovada de uma transação individual.
delivered_by: GAMEPRICEAPIServiço que entrega esta resposta.
acquisition_method: licensed_partner_referenceReferência processada recebida por uma integração com parceiro licenciado.
source_basis: partner_reportedA informação sobre o mercado de origem foi reportada pelo parceiro. Não representa verificação individual de todos os preços no eBay.
source_url: nullNão há URL de anúncio ou venda que comprove este preço; nenhuma URL de evidência é inventada.
match_type: exact_provider_identityCorrespondência exata do produto no catálogo da integração. Não atesta uma correspondência com transação no marketplace.

O serviço não representa afiliação oficial com o eBay e não entrega uma lista de transações ou vendas concluídas. Links em metadata.links ajudam a localizar produtos; não são evidência de cálculo dos preços.

CampoComo interpretar
amount_centsInteiro positivo ou null. Ausência não é preço zero.
observed_atQuando a API recebeu um valor válido para aquela condição. Pode ser null.
staletrue quando a observação está ausente ou ultrapassa a janela de atualização configurada no serviço.
provider_as_ofData informada pelo fornecedor, quando disponível. Não é substituída pela hora da consulta.
fetched_atQuando o registro foi recebido na sincronização. Não implica que todos os preços foram atualizados.

Quando uma atualização não traz um preço válido, a API preserva o último valor conhecido e a sua data de observação original. Use stale junto das datas para decidir como exibir referências antigas.

As referências não são ofertas de venda, garantia de valor no mercado brasileiro ou estimativas convertidas para BRL. A API não promete atualização em tempo real.

Referência dos endpoints

Todas as rotas abaixo exigem Authorization: Bearer SUA_CHAVE e acesso ativo. Respostas de dados usam JSON, exceto o download de imagens.

Buscar produtos

GET/v1/products

Combine filtros para encontrar a identidade que procura. Sem filtros, a resposta percorre o acervo disponível. Os parâmetros são opcionais, exceto a combinação de identificação externa.

ParâmetroTipo / regraUso
qstring · até 120 caracteresBusca por título.
platform_idinteger · 1–100000Plataforma da fonte.
country_idinteger · 1–100000País/região da fonte.
category_idinteger · 0–100Categoria do produto.
barcodestring · até 80 caracteresGTIN/ISBN com dígito verificador válido. Preserve zeros à esquerda. Código inválido retorna 400.
external_sourcestring · até 40 caracteresNamespace do identificador, como gamepriceapi, metacritic ou howlongtobeat. Letras minúsculas, números e sublinhado, iniciando por letra. Envie com external_id.
external_idstring · 1–200 caracteresID na origem indicada. Envie com external_source.
afterstringCursor retornado em next_after.
updated_afterdate-timeFiltro de atualização. UTC com milissegundos: 2026-10-11T00:00:00.000Z.
limitinteger · 1–100Tamanho da página. Padrão: 20.
Resposta sem resultados
{
  "data": [],
  "next_after": null
}

Com resultados, data contém objetos de produto. Filtros não reconhecidos ou repetidos retornam 400 invalid_query.

Consultar um produto

GET/v1/products/{id}

Use o ID completo retornado na busca, por exemplo gameprice:12345. A resposta contém {"data": produto}. Um ID válido que não existe retorna 404 product_not_found.

Consultar produtos em lote

POST/v1/prices/batch

POST /v1/products/batch é um alias com o mesmo comportamento. Envie de 1 a 100 IDs distintos com Content-Type: application/json. Ambas as rotas devolvem os objetos completos de produto, incluindo metadados e preços.

Corpo JSON · substitua pelos IDs reais
{
  "ids": ["gameprice:12345", "gameprice:67890"]
}

A resposta tem data com os produtos encontrados e not_found com os IDs ausentes. IDs repetidos, formato inválido, lista vazia ou mais de 100 IDs retornam 400 invalid_product_ids. O corpo deve ter apenas a propriedade ids.

Imagens com acesso protegido

GET/v1/products/{id}/image?variant=cover

metadata.images lista somente as imagens já armazenadas no cache da API. Use a url relativa retornada, resolvida na URL base, e envie o mesmo cabeçalho Bearer usado nas consultas JSON.

cURL · exemplo com ID fictício
curl --fail-with-body \
  'https://api.meuretro.com.br/v1/products/gameprice:12345/image?variant=cover' \
  --header "Authorization: Bearer $GAMEPRICEAPI_KEY" \
  --output cover.img

A resposta de sucesso é binária, com o tipo de arquivo em Content-Type. variant=cover solicita a capa; outras variantes só devem ser utilizadas quando aparecerem em metadata.images. A presença de uma imagem não implica que outras vistas estejam disponíveis.

Se o produto ou a variante não tiver arquivo disponível, a API retorna 404 — image_not_available para a imagem ausente. A consulta não busca o arquivo no fornecedor. Downloads autenticados admitidos também consomem uma consulta da cota.

Para exibir imagens no seu produto, faça a busca a partir do backend e entregue o conteúdo conforme as condições do seu contrato. Uma tag <img> apontando diretamente para a API não envia o cabeçalho Bearer.

Catálogos e plataformas

GET/v1/catalogs

Retorna {"data": [...]} com os catálogos configurados e sua cobertura atual. Cada entrada contém id, platform_id, country_id, release_type, products, priced_products, with_barcodes, with_images, last_success_at e next_run_at.

last_success_at indica a última sincronização bem-sucedida do catálogo. next_run_at é uma referência operacional de agendamento, não uma garantia de conclusão ou disponibilidade de novos dados.

GET/v1/platforms

Retorna {"data": [...]} com id, name e products por plataforma. O nome pode ser null quando indisponível na fonte.

A cobertura depende dos catálogos configurados e do andamento da sincronização. Não presuma acervo mundial completo, nem metadados e imagens para todos os registros. Estas rotas também exigem acesso ativo e consomem cota.

Consumo da sua conta

GET/v1/usage

Consulte os contadores da sua própria conta no mês corrente em UTC. A resposta inclui esta requisição e contém:

CampoDescrição
client_idIdentificador da conta autenticada.
monthMês de referência em UTC, no formato YYYY-MM.
requestsConsultas autenticadas admitidas no mês, incluindo esta.
returned_itemsContador de itens retornados; separado da quantidade de consultas. Inclui produtos, entradas de cobertura/plataformas e downloads de imagem bem-sucedidos.
accessstatus informa a situação do acesso; plan é o rótulo comercial, quando definido; expires_at é a validade em UTC ou null.
limits.per_minute
limits.per_month
Limites definidos para a sua conta.

Os contadores ajudam no planejamento da integração. Não representam uma fatura e não substituem as condições comerciais contratadas.

Paginação e sincronização

Para percorrer resultados, repita a busca com os mesmos filtros e envie o valor de next_after no parâmetro after. Encerre quando next_after for null. O cursor usa a ordenação por ID; não calcule o próximo ID manualmente.

  1. Faça a primeira consulta com os filtros desejados e limit.
  2. Processe data e armazene os produtos pelo ID completo.
  3. Se houver next_after, consulte a próxima página preservando os filtros.

updated_after inclui registros cujo fetched_at ou metadata_observed_at é posterior ao instante informado. Uma página vazia indica ausência de correspondências naquele momento.

Não é um feed transacional de alterações. A sincronização pode atualizar o acervo durante a paginação. Para conciliar uma base local, use janelas de tempo sobrepostas, atualizações idempotentes por ID e reconciliação periódica. O endpoint não fornece eventos de exclusão.

A API atual oferece consulta JSON paginada e em lote. Não há download CSV, exportação integral em um único arquivo, endpoint de histórico de preços ou de vendas individuais concluídas. Paginar o catálogo para um cache autorizado não amplia o direito de redistribuí-lo.

Limites e cotas

Os limites efetivos são definidos por conta e compartilhados entre suas chaves. Criar ou alternar chaves não multiplica a cota. As modalidades-base têm 60 requisições por minuto; Uso interno inclui 10.000 por mês e Apps e sites, 100.000. Ajustes dependem do acordo comercial e da capacidade aprovada.

Cada requisição autenticada admitida em /v1/ consome uma consulta, inclusive erros de parâmetros e produtos não encontrados. Um lote de até 100 IDs consome uma consulta; cada página de resultados e cada download de imagem são requisições separadas. Itens retornados são contabilizados à parte e não substituem a unidade de cota.

A cota mensal segue o mês de calendário em UTC, não 30 dias corridos nem a data de contratação. Ao atingir a cota de conta, a API retorna 429 com Retry-After; requisições recusadas por esse limite não acrescentam consumo. Não há cobrança automática de excedentes. A rota /v1/usage também consome uma consulta e fica indisponível quando a conta está limitada: acompanhe os saldos antes de esgotá-los.

Também existe proteção por IP. A entrada pública limita a taxa a 120 requisições por minuto por IP, compartilhada por contas que usam esse mesmo IP. Esse controle adicional pode recusar rajadas antes do limite da conta. Distribua as chamadas em uma fila, mantenha a taxa abaixo dos limites aplicáveis e respeite 429; o limite de 60 por minuto não é uma garantia de aceitar qualquer rajada.
CabeçalhoSignificado
X-RateLimit-LimitLimite de consultas por minuto da conta.
X-RateLimit-RemainingConsultas restantes na janela de minuto após a reserva da requisição.
X-RateLimit-ResetFim da janela de minuto, em Unix timestamp de segundos.
X-MonthlyQuota-RemainingConsultas restantes no mês após a reserva.
Retry-AfterSegundos a aguardar quando informado na rejeição. Pode ser maior quando a cota mensal se esgota.
X-Request-IdID de rastreio quando fornecido pela aplicação.

Os cabeçalhos de saldo são enviados em requisições admitidas. Rejeições anteriores à reserva podem não conter os saldos. Uma rejeição da proteção de entrada pode ter corpo não JSON e não incluir Retry-After; nesse caso, use espera progressiva com variação aleatória e um limite de tentativas.

Erros e retentativas

Erros gerados pela aplicação usam um objeto error com código estável e identificador da requisição. Guarde o request_id para suporte e evite registrar o cabeçalho de autenticação. A camada de proteção de entrada pode responder sem JSON ou identificador; verifique o status e o tipo de conteúdo antes de interpretar o corpo.

Formato de erro · ID ilustrativo
{
  "error": {
    "code": "invalid_api_key",
    "request_id": "00000000-0000-4000-8000-000000000000"
  }
}
HTTPCódigo / situaçãoAção
400invalid_query, invalid_product_id, invalid_product_ids, invalid_jsonCorrija os parâmetros, IDs ou o corpo antes de repetir.
400credentials_must_use_authorization_headerRemova as credenciais da URL. Use o cabeçalho Bearer.
401invalid_api_keyVerifique a chave e o cabeçalho. Chaves ausentes, inválidas ou revogadas não autenticam.
403subscription_inactive
subscription_expired
O acesso comercial está inativo ou expirado. Entre em contato para ativar ou renovar.
404product_not_found
image_not_available
not_found
Verifique o ID, a disponibilidade da imagem ou a rota.
405method_not_allowedUse o método HTTP documentado.
413 / 414body_too_large
url_too_long
Reduza o corpo ou a URL. Corpo JSON: até 32 KiB.
415json_required
encoding_not_supported
Use application/json sem compressão no corpo.
429rate_limit_exceeded
monthly_quota_exceeded
ingress_rate_limit
Respeite Retry-After quando presente. Sem esse cabeçalho, use espera progressiva com variação aleatória. Não repita imediatamente.
503service_unavailableRepita com espera progressiva e variação aleatória, mantendo um número limitado de tentativas.

As operações documentadas são de leitura, incluindo as consultas em lote via POST. Repetir uma requisição admitida consome outra consulta; evite retentativas automáticas de erros 400, 401 e 403.

Disponibilidade do serviço

GET/health

Endpoint público de disponibilidade básica do processo. Não exige chave e não expõe o catálogo, clientes ou estatísticas do acervo. Uma resposta 200 não atesta a atualização dos preços ou a disponibilidade do fornecedor.

Para avaliar seus dados, use as datas de observação e os sinais de atualização retornados nas consultas autenticadas.