Pular para o conteúdo

API para revendedores · v1

Documentação da API para revendedores

Coloque saldo via PIX, compre keys de licença e acompanhe tudo pelo seu próprio sistema. JSON sobre HTTPS, uma chave Bearer por integração.

URL basehttps://evolutionboost.xyz/api/v1

Introdução

A API de revendedores do Evolution Boost permite que revendedores oficiais coloquem saldo via PIX, comprem keys de licença com esse saldo e consultem as próprias keys (livres, resgatadas ou todas) a partir dos seus sistemas, bots ou lojas.

É uma API REST em JSON sobre HTTPS. A URL base é https://evolutionboost.xyz/api/v1. Ela é feita para uso servidor a servidor: nunca chame pelo navegador nem coloque a sua chave dentro de um app (não há CORS).

  • Dinheiro é sempre um inteiro em centavos de real (12990 = R$ 129,90), com currency: "BRL".
  • Datas são ISO 8601 em UTC.
  • Toda resposta traz o cabeçalho X-Request-Id. Informe-o ao falar com o suporte.
  • As respostas nunca vão para cache (Cache-Control: no-store).
  • Não há webhooks na v1: consulte os endpoints periodicamente.

Autenticação

Autentique toda requisição com a sua chave de API no cabeçalho Authorization, como Bearer token. As chaves começam com evb_live_ e são criadas pela equipe do Evolution Boost no painel admin. Você recebe a chave completa uma única vez, então guarde-a em um cofre de segredos ou variável de ambiente.

  • Chave ausente, inválida, revogada ou expirada devolve 401 invalid_api_key (mesma resposta em todos os casos).
  • Chave válida de revendedor revogado devolve 403 reseller_inactive.
  • Falhas de autenticação demais do mesmo IP (20 por minuto) devolvem 429 antes de a chave ser conferida.
  • Se uma chave vazar, peça à equipe para revogá-la e emitir outra. Você pode ter várias chaves (por exemplo uma por sistema).

Cabeçalhos

CabeçalhoQuandoDescrição
AuthorizationSempreBearer evb_live_..., a sua chave de API.
Content-TypePOSTapplication/json. O corpo tem limite de 24000 bytes.
Idempotency-KeyPOSTUma chave única por operação (UUID). Veja Idempotência.
X-Request-IdOpcionalO seu próprio id de requisição (8 a 64 caracteres entre A-Z a-z 0-9 . _ -), devolvido na resposta; senão, geramos um. Sempre presente nas respostas.
HTTP
Authorization: Bearer evb_live_xxxxxxxxxxxxxxxx

Erros

Os erros usam os status HTTP convencionais e um corpo JSON. Trate por error.type e error.code, nunca pela message. param aponta o campo ou cabeçalho que causou o erro.

Tipos de erro

TipoStatusDescrição
authentication_error401A chave de API está ausente, inválida, revogada ou expirada.
permission_error403A chave é válida, mas a conta do revendedor não está ativa.
invalid_request_error400, 404, 405, 409, 413A requisição está malformada ou aponta para algo que não existe.
insufficient_balance402O saldo não cobre a compra. Nada foi cobrado.
rate_limit_error429Requisições demais. Aguarde Retry-After segundos.
api_error500, 502, 503Algo falhou do nosso lado ou no provedor de pagamento. Tente de novo com espera crescente.

Códigos de erro

CódigoStatusDescrição
invalid_api_key401Chave de API ausente, inválida, revogada ou expirada. A resposta é a mesma em todos os casos.
reseller_inactive403A conta do revendedor foi revogada ou removida.
invalid_json400O corpo está vazio, não é JSON ou não é um objeto JSON.
idempotency_key_required400POST sem o cabeçalho Idempotency-Key.
invalid_idempotency_key400Idempotency-Key deve ter de 1 a 255 caracteres ASCII visíveis, sem espaços.
invalid_amount400amount_cents deve ser um inteiro entre 1000 e 500000.
too_many_pending_deposits400Você já tem 3 depósitos pendentes. Pague um ou espere expirar.
missing_items400Envie items (não vazio) ou package_code.
invalid_items400items deve ser uma lista de objetos.
too_many_items400items aceita no máximo 50 itens.
invalid_package_code400package_code deve ter o formato H150 (1 a 20 letras ou dígitos).
invalid_quantity400quantity deve ser um inteiro entre 1 e 100.
duplicate_package400O mesmo pacote aparece duas vezes em items. Some as quantidades.
too_many_keys400Uma requisição cria no máximo 100 keys no total.
package_unavailable400O pacote não existe ou não tem preço de atacado. Veja GET /packages.
invalid_limit400limit deve ser um inteiro entre 1 e 100.
invalid_cursor400starting_after não é um UUID ou não é um objeto desta lista.
invalid_status400Valor desconhecido no filtro status.
invalid_kind400Valor desconhecido no filtro kind.
invalid_batch_id400batch_id deve ser um UUID.
insufficient_balance402O saldo não cobre o total da compra. Nada foi cobrado nem criado.
resource_missing404O objeto não existe ou é de outro revendedor (mesma resposta), ou o endpoint não existe.
method_not_allowed405Método HTTP não suportado. Veja o cabeçalho Allow.
idempotency_key_reused409A Idempotency-Key já foi usada com outro corpo. Use uma chave nova para uma operação nova.
payload_too_large413O corpo passa de 24000 bytes.
rate_limit_exceeded429Limite de taxa atingido. Aguarde os segundos do cabeçalho Retry-After.
internal_error500Erro inesperado. Tente mais tarde; em POST, reutilize a mesma Idempotency-Key.
payment_provider_error502O provedor PIX falhou ao criar a cobrança. Tente mais tarde.
service_unavailable503O serviço está temporariamente indisponível. Tente de novo com espera crescente.
JSON
{
  "error": {
    "type": "insufficient_balance",
    "code": "insufficient_balance",
    "message": "Insufficient balance: this purchase costs 5990 cents and the balance is 1200 cents.",
    "param": null
  },
  "request_id": "req_5b0f3c9a1d2e4f6a8b7c9d0e1f2a3b4c"
}

Paginação

Os endpoints de lista devolvem {"object": "list", "data": [...], "has_more": bool}, do mais novo para o mais antigo. Use limit (1 a 100, padrão 20) e, para a próxima página, passe o id do último objeto recebido em starting_after. Pare quando has_more for false.

Shell
curl "https://evolutionboost.xyz/api/v1/keys?status=free&limit=100&starting_after=6e7f8a9b-0c1d-4e2f-9a3b-4c5d6e7f8a9b" \
  -H "Authorization: Bearer $EVB_API_KEY"

Idempotência

Todo POST que movimenta dinheiro ou cria keys exige o cabeçalho Idempotency-Key. Gere um UUID novo para cada operação e reutilize-o só para repetir aquela mesma operação (timeout, erro de rede, 5xx). A repetição nunca cobra duas vezes: devolve o resultado original.

  • POST /keys repetido com a mesma chave e o mesmo corpo: 200 com o mesmo lote e o cabeçalho Idempotent-Replayed: true (a primeira chamada devolve 201).
  • POST /deposits repetido com a mesma chave e o mesmo valor: 200 com o mesmo depósito e o mesmo código PIX (sem nova cobrança).
  • Mesma chave com outro corpo: 409 idempotency_key_reused.
  • As chaves valem por revendedor e não expiram. Nunca reutilize uma chave em uma operação nova.

Limites de taxa

Os limites contam por chave de API (falhas de autenticação, por IP). Ao passar do limite você recebe 429 rate_limit_exceeded com o cabeçalho Retry-After em segundos. Espere esse tempo antes de repetir.

EndpointLimite
Leitura (todos os GET)120 por minuto, por chave de API
POST /keys30 por minuto, por chave de API
POST /deposits5 por 5 minutos, por chave de API
Falhas de autenticação20 por minuto, por IP

Guia rápido

O fluxo recomendado, do saldo zerado até as keys na mão:

  1. Veja o que você pode vender e o seu saldo: GET /packages e GET /balance.
  2. Coloque saldo: POST /deposits com amount_cents (R$ 10,00 a R$ 5.000,00). Pague o br_code devolvido (PIX copia e cola) ou o QR em br_code_base64 e consulte GET /deposits/{id} a cada 5 a 10 segundos até status ser paid.
  3. Compre keys: POST /keys com items e uma Idempotency-Key nova. A resposta traz o texto completo de cada key.
  4. Acompanhe: GET /keys?status=free (ainda não resgatadas) ou GET /keys?status=redeemed.
Shell
export EVB_API_KEY="evb_live_..."

# 1. Packages and balance
curl https://evolutionboost.xyz/api/v1/packages -H "Authorization: Bearer $EVB_API_KEY"
curl https://evolutionboost.xyz/api/v1/balance -H "Authorization: Bearer $EVB_API_KEY"

# 2. Deposit R$ 500,00, pay the PIX, poll until "paid"
curl -X POST https://evolutionboost.xyz/api/v1/deposits \
  -H "Authorization: Bearer $EVB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"amount_cents": 50000}'
curl https://evolutionboost.xyz/api/v1/deposits/9b1e4c77-2f3a-4d8e-b5c6-0a1f2e3d4c5b -H "Authorization: Bearer $EVB_API_KEY"

# 3. Buy 10 keys of H150
curl -X POST https://evolutionboost.xyz/api/v1/keys \
  -H "Authorization: Bearer $EVB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"items": [{"package_code": "H150", "quantity": 10}]}'

# 4. Keys not redeemed yet
curl "https://evolutionboost.xyz/api/v1/keys?status=free" -H "Authorization: Bearer $EVB_API_KEY"

Referência da API

Quem você é: revendedor, chave em uso e saldo. Uma boa primeira chamada para testar a integração.

O objeto Reseller

O revendedor dono da chave de API.

  • objectstring (reseller)

    Sempre reseller.

  • idstring

    Id do revendedor.

  • namestring

    Nome de exibição.

  • codestring

    Código do revendedor. É a primeira parte das keys que você compra.

  • statusstring (active | revoked)

    Só revendedores active podem usar a API.

  • tokenTokenInfo

    A chave de API usada nesta requisição.

  • balanceBalance

    Saldo atual.

Endpoints

O objeto Reseller
{
  "object": "reseller",
  "id": "5f0c2a3e-8d41-4b6a-9e2f-1c7d3b9a6e10",
  "name": "ACME Games",
  "code": "ACME",
  "status": "active",
  "token": {
    "name": "Store backend",
    "prefix": "xxxxxxxx"
  },
  "balance": {
    "object": "balance",
    "balance_cents": 125000,
    "currency": "BRL",
    "updated_at": "2026-10-17T14:10:03.000Z"
  }
}

Consultar o revendedor

GET/v1/me

Devolve o revendedor dono da chave, a chave usada e o saldo atual.

Limite de taxa: 120 por minuto, por chave de API

Respostas

  • 200O revendedor.

Erros

Todo endpoint também pode devolver: invalid_api_key, reseller_inactive, rate_limit_exceeded, method_not_allowed, internal_error, service_unavailable.

Requisição
curl https://evolutionboost.xyz/api/v1/me \
  -H "Authorization: Bearer $EVB_API_KEY"
Resposta · 200
{
  "object": "reseller",
  "id": "5f0c2a3e-8d41-4b6a-9e2f-1c7d3b9a6e10",
  "name": "ACME Games",
  "code": "ACME",
  "status": "active",
  "token": {
    "name": "Store backend",
    "prefix": "xxxxxxxx"
  },
  "balance": {
    "object": "balance",
    "balance_cents": 125000,
    "currency": "BRL",
    "updated_at": "2026-10-17T14:10:03.000Z"
  }
}

Referência da API

Planos disponíveis para revendedores, com o seu preço de atacado.

O objeto Package

Um plano do qual você pode comprar keys, com o seu preço de atacado.

  • objectstring (package)

    Sempre package.

  • codestring

    Código do pacote usado em POST /keys (por exemplo H150).

  • hoursinteger

    Horas de farm que uma key concede.

  • account_limitinteger

    Contas Steam que o cliente pode farmar ao mesmo tempo.

  • price_centsinteger

    O seu preço de atacado por key, em centavos de real.

  • currencystring (BRL)

    Sempre BRL.

O objeto Package
{
  "object": "package",
  "code": "H150",
  "hours": 150,
  "account_limit": 3,
  "price_cents": 499,
  "currency": "BRL"
}

Listar pacotes

GET/v1/packages

Lista os pacotes dos quais você pode comprar keys, com o seu preço de atacado por key. Pacotes sem preço de atacado não aparecem e não podem ser comprados. Sem paginação (has_more é sempre false).

Limite de taxa: 120 por minuto, por chave de API

Respostas

  • 200A lista de pacotes.

Erros

Todo endpoint também pode devolver: invalid_api_key, reseller_inactive, rate_limit_exceeded, method_not_allowed, internal_error, service_unavailable.

Requisição
curl https://evolutionboost.xyz/api/v1/packages \
  -H "Authorization: Bearer $EVB_API_KEY"
Resposta · 200
{
  "object": "list",
  "data": [
    {
      "object": "package",
      "code": "H150",
      "hours": 150,
      "account_limit": 3,
      "price_cents": 499,
      "currency": "BRL"
    },
    {
      "object": "package",
      "code": "H600",
      "hours": 600,
      "account_limit": 6,
      "price_cents": 1099,
      "currency": "BRL"
    },
    {
      "object": "package",
      "code": "H1200",
      "hours": 1200,
      "account_limit": 12,
      "price_cents": 1899,
      "currency": "BRL"
    }
  ],
  "has_more": false
}

Referência da API

O seu saldo pré-pago em reais. Depósitos creditam; compras de keys debitam.

O objeto Balance

O saldo atual da carteira do revendedor.

  • objectstring (balance)

    Sempre balance.

  • balance_centsinteger

    Saldo disponível em centavos de real.

  • currencystring (BRL)

    Sempre BRL.

  • updated_atstring | null

    Última alteração do saldo; null se a carteira nunca foi usada.

O objeto Balance
{
  "object": "balance",
  "balance_cents": 125000,
  "currency": "BRL",
  "updated_at": "2026-10-17T14:10:03.000Z"
}

Consultar o saldo

GET/v1/balance

Devolve o saldo atual da sua carteira, em centavos de real.

Limite de taxa: 120 por minuto, por chave de API

Respostas

  • 200O saldo.

Erros

Todo endpoint também pode devolver: invalid_api_key, reseller_inactive, rate_limit_exceeded, method_not_allowed, internal_error, service_unavailable.

Requisição
curl https://evolutionboost.xyz/api/v1/balance \
  -H "Authorization: Bearer $EVB_API_KEY"
Resposta · 200
{
  "object": "balance",
  "balance_cents": 125000,
  "currency": "BRL",
  "updated_at": "2026-10-17T14:10:03.000Z"
}

Referência da API

Todos os movimentos de saldo, imutáveis, com o saldo depois de cada um.

O objeto LedgerEntry

Um movimento de saldo imutável.

  • objectstring (ledger_entry)

    Sempre ledger_entry.

  • idstring

    Id do movimento (também é o cursor de paginação).

  • kindstring (deposit | key_purchase | adjustment | refund)

    deposit (PIX pago), key_purchase (compra de keys), adjustment (manual, pela equipe do Evolution Boost) ou refund (estorno).

  • amount_centsinteger

    Valor com sinal: positivo credita, negativo debita.

  • balance_after_centsinteger

    Saldo logo depois deste movimento.

  • currencystring (BRL)

    Sempre BRL.

  • ref_typestring | null

    O que originou, por exemplo deposit ou key_batch; em geral null em ajustes.

  • ref_idstring | null

    Id do depósito ou do lote de keys.

  • descriptionstring | null

    Descrição curta.

  • created_atstring

    Quando o movimento aconteceu.

Endpoints

O objeto LedgerEntry
{
  "object": "ledger_entry",
  "id": "7d6c5b4a-3f2e-4d1c-9b0a-8f7e6d5c4b3a",
  "kind": "key_purchase",
  "amount_cents": -5990,
  "balance_after_cents": 125000,
  "currency": "BRL",
  "ref_type": "key_batch",
  "ref_id": "d2a7f3c1-4b5e-4f60-9a8b-7c6d5e4f3a21",
  "description": "10x H150, 1x H600",
  "created_at": "2026-10-17T14:10:03.000Z"
}

Listar o extrato

GET/v1/ledger

Lista os movimentos de saldo, do mais novo para o mais antigo. Paginado.

Limite de taxa: 120 por minuto, por chave de API

Parâmetros

  • limitquery · integerOpcional

    Quantidade de objetos por página, de 1 a 100. Padrão 20.

  • starting_afterquery · stringOpcional

    Cursor: o id do último objeto da página anterior. Devolve os objetos que vêm depois dele.

  • kindquery · string (deposit | key_purchase | adjustment | refund)Opcional

    Só movimentos deste tipo.

Respostas

  • 200Uma página do extrato.

Erros

Todo endpoint também pode devolver: invalid_api_key, reseller_inactive, rate_limit_exceeded, method_not_allowed, internal_error, service_unavailable.

Requisição
curl "https://evolutionboost.xyz/api/v1/ledger?kind=key_purchase&limit=20" \
  -H "Authorization: Bearer $EVB_API_KEY"
Resposta · 200
{
  "object": "list",
  "data": [
    {
      "object": "ledger_entry",
      "id": "7d6c5b4a-3f2e-4d1c-9b0a-8f7e6d5c4b3a",
      "kind": "key_purchase",
      "amount_cents": -5990,
      "balance_after_cents": 125000,
      "currency": "BRL",
      "ref_type": "key_batch",
      "ref_id": "d2a7f3c1-4b5e-4f60-9a8b-7c6d5e4f3a21",
      "description": "10x H150, 1x H600",
      "created_at": "2026-10-17T14:10:03.000Z"
    },
    {
      "object": "ledger_entry",
      "id": "2e3f4a5b-6c7d-4e8f-a9b0-c1d2e3f4a5b6",
      "kind": "deposit",
      "amount_cents": 50000,
      "balance_after_cents": 130990,
      "currency": "BRL",
      "ref_type": "deposit",
      "ref_id": "9b1e4c77-2f3a-4d8e-b5c6-0a1f2e3d4c5b",
      "description": "Deposito PIX",
      "created_at": "2026-10-17T14:02:41.000Z"
    }
  ],
  "has_more": true
}

Referência da API

Cobranças PIX que creditam o seu saldo. De R$ 10,00 a R$ 5.000,00 cada, no máximo 3 pendentes ao mesmo tempo.

O objeto Deposit

Uma cobrança PIX que credita o seu saldo depois de paga.

  • objectstring (deposit)

    Sempre deposit.

  • idstring

    Id do depósito.

  • amount_centsinteger

    Valor em centavos de real.

  • currencystring (BRL)

    Sempre BRL.

  • statusstring (pending | paid | failed | expired)

    pending até o PIX ser pago; paid significa que o saldo foi creditado; failed ou expired nunca serão creditados.

  • br_codestring | null

    Código PIX copia e cola. Só enquanto pending.

  • br_code_base64string | null

    QR code em data URL PNG (data:image/png;base64,...). Só enquanto pending.

  • expires_atstring | null

    Quando a cobrança PIX expira (definido pelo provedor de pagamento).

  • created_atstring

    Data de criação.

  • paid_atstring | null

    Quando o pagamento foi confirmado.

O objeto Deposit
{
  "object": "deposit",
  "id": "9b1e4c77-2f3a-4d8e-b5c6-0a1f2e3d4c5b",
  "amount_cents": 50000,
  "currency": "BRL",
  "status": "pending",
  "br_code": "00020101021226850014br.gov.bcb.pix...6304A1B2",
  "br_code_base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
  "expires_at": "2026-10-18T14:00:00.000Z",
  "created_at": "2026-10-17T14:00:00.000Z",
  "paid_at": null
}

Criar um depósito

POST/v1/deposits

Cria uma cobrança PIX de amount_cents. Pague o br_code (copia e cola) ou o QR em br_code_base64; o saldo é creditado sozinho quando o pagamento é confirmado. Depois consulte GET /deposits/{id}. No máximo 3 depósitos pendentes ao mesmo tempo.

Limite de taxa: 5 por 5 minutos, por chave de APIExige Idempotency-Key

Parâmetros

  • Idempotency-Keyheader · stringObrigatório

    Chave única por operação (um UUID é o ideal), de 1 a 255 caracteres ASCII visíveis. Repetir com a mesma chave nunca cobra duas vezes.

Corpo

  • amount_centsintegerObrigatório

    Valor em centavos de real, de 1000 (R$ 10,00) a 500000 (R$ 5.000,00).

Respostas

  • 200O depósito pendente com o código PIX. Repetir com a mesma Idempotency-Key devolve o mesmo depósito.

Erros

Todo endpoint também pode devolver: invalid_api_key, reseller_inactive, rate_limit_exceeded, method_not_allowed, internal_error, service_unavailable.

Requisição
curl -X POST https://evolutionboost.xyz/api/v1/deposits \
  -H "Authorization: Bearer $EVB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"amount_cents":50000}'
Resposta · 200
{
  "object": "deposit",
  "id": "9b1e4c77-2f3a-4d8e-b5c6-0a1f2e3d4c5b",
  "amount_cents": 50000,
  "currency": "BRL",
  "status": "pending",
  "br_code": "00020101021226850014br.gov.bcb.pix...6304A1B2",
  "br_code_base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
  "expires_at": "2026-10-18T14:00:00.000Z",
  "created_at": "2026-10-17T14:00:00.000Z",
  "paid_at": null
}

Consultar um depósito

GET/v1/deposits/{id}

Devolve um depósito. Enquanto ele está pending, esta chamada também confere o pagamento com o provedor PIX; consultar a cada 5 a 10 segundos é o jeito de saber que o saldo foi creditado. Depósito de outro revendedor devolve 404.

Limite de taxa: 120 por minuto, por chave de API

Parâmetros

  • idpath · stringObrigatório

    Id do depósito.

Respostas

  • 200O depósito.

Erros

  • 404resource_missing O objeto não existe ou é de outro revendedor (mesma resposta), ou o endpoint não existe.

Todo endpoint também pode devolver: invalid_api_key, reseller_inactive, rate_limit_exceeded, method_not_allowed, internal_error, service_unavailable.

Requisição
curl https://evolutionboost.xyz/api/v1/deposits/9b1e4c77-2f3a-4d8e-b5c6-0a1f2e3d4c5b \
  -H "Authorization: Bearer $EVB_API_KEY"
Resposta · 200
{
  "object": "deposit",
  "id": "9b1e4c77-2f3a-4d8e-b5c6-0a1f2e3d4c5b",
  "amount_cents": 50000,
  "currency": "BRL",
  "status": "paid",
  "br_code": null,
  "br_code_base64": null,
  "expires_at": "2026-10-18T14:00:00.000Z",
  "created_at": "2026-10-17T14:00:00.000Z",
  "paid_at": "2026-10-17T14:02:41.000Z"
}

Listar depósitos

GET/v1/deposits

Lista os seus depósitos, do mais novo para o mais antigo. Paginado. Diferente de GET /deposits/{id}, a lista não confere pagamentos pendentes no provedor.

Limite de taxa: 120 por minuto, por chave de API

Parâmetros

  • limitquery · integerOpcional

    Quantidade de objetos por página, de 1 a 100. Padrão 20.

  • starting_afterquery · stringOpcional

    Cursor: o id do último objeto da página anterior. Devolve os objetos que vêm depois dele.

  • statusquery · string (pending | paid | failed | expired)Opcional

    Só depósitos com este status.

Respostas

  • 200Uma página de depósitos.

Erros

Todo endpoint também pode devolver: invalid_api_key, reseller_inactive, rate_limit_exceeded, method_not_allowed, internal_error, service_unavailable.

Requisição
curl "https://evolutionboost.xyz/api/v1/deposits?status=paid&limit=20" \
  -H "Authorization: Bearer $EVB_API_KEY"
Resposta · 200
{
  "object": "list",
  "data": [
    {
      "object": "deposit",
      "id": "9b1e4c77-2f3a-4d8e-b5c6-0a1f2e3d4c5b",
      "amount_cents": 50000,
      "currency": "BRL",
      "status": "paid",
      "br_code": null,
      "br_code_base64": null,
      "expires_at": "2026-10-18T14:00:00.000Z",
      "created_at": "2026-10-17T14:00:00.000Z",
      "paid_at": "2026-10-17T14:02:41.000Z"
    },
    {
      "object": "deposit",
      "id": "3c8f1a20-6b7d-4e9f-8a1b-2c3d4e5f6a7b",
      "amount_cents": 100000,
      "currency": "BRL",
      "status": "paid",
      "br_code": null,
      "br_code_base64": null,
      "expires_at": "2026-10-11T09:00:00.000Z",
      "created_at": "2026-10-10T09:00:00.000Z",
      "paid_at": "2026-10-10T09:01:15.000Z"
    }
  ],
  "has_more": false
}

Referência da API

Compre keys de licença com o seu saldo e consulte as keys que são suas.

O objeto Key

Uma key de licença que pertence a você.

  • objectstring (key)

    Sempre key.

  • idstring

    Id da key (também é o cursor de paginação).

  • keystring | null

    Texto completo da key. null em keys antigas que não podem ser recuperadas (use key_prefix).

  • key_prefixstring

    As três primeiras partes da key, seguras para exibir.

  • package_codestring

    Pacote da key.

  • hoursinteger | null

    Horas concedidas pela key.

  • statusstring (free | redeemed | revoked | suspended)

    free (ainda não resgatada), redeemed (resgatada), revoked (revogada) ou suspended (suspensa).

  • batch_idstring | null

    Lote de compra que criou a key.

  • created_atstring

    Data de criação.

  • redeemed_atstring | null

    Quando um cliente resgatou.

O objeto Key
{
  "object": "key",
  "id": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
  "key": "ACME-H150-AAAA-AAAA-AAAA-AAAA",
  "key_prefix": "ACME-H150-AAAA",
  "package_code": "H150",
  "hours": 150,
  "status": "free",
  "batch_id": "d2a7f3c1-4b5e-4f60-9a8b-7c6d5e4f3a21",
  "created_at": "2026-10-17T14:10:03.000Z",
  "redeemed_at": null
}

Comprar keys

POST/v1/keys

Debita o preço de atacado do seu saldo e cria as keys em uma única operação atômica. Se o saldo não bastar, nada é cobrado nem criado (402 insufficient_balance). Até 100 keys e 50 itens por requisição. A resposta traz o texto completo de cada key.

Limite de taxa: 30 por minuto, por chave de APIExige Idempotency-Key

Parâmetros

  • Idempotency-Keyheader · stringObrigatório

    Chave única por operação (um UUID é o ideal), de 1 a 255 caracteres ASCII visíveis. Repetir com a mesma chave nunca cobra duas vezes.

Corpo

  • itemsPurchaseItem[]Obrigatório

    O que comprar: de 1 a 50 objetos {package_code, quantity}, cada pacote uma vez só.

  • items[].package_codestringObrigatório

    Código do pacote de GET /packages.

  • items[].quantityintegerOpcional

    Quantidade de keys, de 1 a 100. Padrão 1.

Para um único pacote você também pode enviar {"package_code": "H150", "quantity": 10} em vez de items.

Respostas

  • 201O lote foi comprado.
  • 200Repetição com a mesma Idempotency-Key e o mesmo corpo: o lote original, sem nova cobrança.Idempotent-Replayed: true quando a resposta é uma repetição.

Erros

Todo endpoint também pode devolver: invalid_api_key, reseller_inactive, rate_limit_exceeded, method_not_allowed, internal_error, service_unavailable.

Requisição
curl -X POST https://evolutionboost.xyz/api/v1/keys \
  -H "Authorization: Bearer $EVB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"items":[{"package_code":"H150","quantity":2},{"package_code":"H600","quantity":1}]}'
Resposta · 201
{
  "object": "key_batch",
  "batch_id": "d2a7f3c1-4b5e-4f60-9a8b-7c6d5e4f3a21",
  "total_cents": 2097,
  "balance_cents": 122903,
  "currency": "BRL",
  "keys": [
    {
      "object": "key",
      "id": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
      "key": "ACME-H150-AAAA-AAAA-AAAA-AAAA",
      "key_prefix": "ACME-H150-AAAA",
      "package_code": "H150",
      "hours": 150,
      "status": "free",
      "batch_id": "d2a7f3c1-4b5e-4f60-9a8b-7c6d5e4f3a21",
      "created_at": "2026-10-17T14:10:03.000Z",
      "redeemed_at": null
    },
    {
      "object": "key",
      "id": "6e7f8a9b-0c1d-4e2f-9a3b-4c5d6e7f8a9b",
      "key": "ACME-H150-BBBB-BBBB-BBBB-BBBB",
      "key_prefix": "ACME-H150-BBBB",
      "package_code": "H150",
      "hours": 150,
      "status": "free",
      "batch_id": "d2a7f3c1-4b5e-4f60-9a8b-7c6d5e4f3a21",
      "created_at": "2026-10-17T14:10:03.000Z",
      "redeemed_at": null
    },
    {
      "object": "key",
      "id": "b4c5d6e7-f8a9-4b0c-8d1e-2f3a4b5c6d7e",
      "key": "ACME-H600-CCCC-CCCC-CCCC-CCCC",
      "key_prefix": "ACME-H600-CCCC",
      "package_code": "H600",
      "hours": 600,
      "status": "free",
      "batch_id": "d2a7f3c1-4b5e-4f60-9a8b-7c6d5e4f3a21",
      "created_at": "2026-10-17T14:10:03.000Z",
      "redeemed_at": null
    }
  ]
}

Listar keys

GET/v1/keys

Lista as suas keys, da mais nova para a mais antiga. Paginado. Filtre por status (free = ainda não resgatada), pacote ou lote de compra. Respostas que trazem o texto da key são auditadas.

Limite de taxa: 120 por minuto, por chave de API

Parâmetros

  • limitquery · integerOpcional

    Quantidade de objetos por página, de 1 a 100. Padrão 20.

  • starting_afterquery · stringOpcional

    Cursor: o id do último objeto da página anterior. Devolve os objetos que vêm depois dele.

  • statusquery · string (free | redeemed | all)Opcional

    free (não resgatadas), redeemed (resgatadas) ou all (padrão; inclui também revogadas e suspensas).

  • package_codequery · stringOpcional

    Só keys deste pacote.

  • batch_idquery · stringOpcional

    Só keys deste lote de compra.

Respostas

  • 200Uma página de keys.

Erros

Todo endpoint também pode devolver: invalid_api_key, reseller_inactive, rate_limit_exceeded, method_not_allowed, internal_error, service_unavailable.

Requisição
curl "https://evolutionboost.xyz/api/v1/keys?status=free&package_code=H150&limit=50" \
  -H "Authorization: Bearer $EVB_API_KEY"
Resposta · 200
{
  "object": "list",
  "data": [
    {
      "object": "key",
      "id": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
      "key": "ACME-H150-AAAA-AAAA-AAAA-AAAA",
      "key_prefix": "ACME-H150-AAAA",
      "package_code": "H150",
      "hours": 150,
      "status": "free",
      "batch_id": "d2a7f3c1-4b5e-4f60-9a8b-7c6d5e4f3a21",
      "created_at": "2026-10-17T14:10:03.000Z",
      "redeemed_at": null
    },
    {
      "object": "key",
      "id": "6e7f8a9b-0c1d-4e2f-9a3b-4c5d6e7f8a9b",
      "key": "ACME-H150-BBBB-BBBB-BBBB-BBBB",
      "key_prefix": "ACME-H150-BBBB",
      "package_code": "H150",
      "hours": 150,
      "status": "free",
      "batch_id": "d2a7f3c1-4b5e-4f60-9a8b-7c6d5e4f3a21",
      "created_at": "2026-10-17T14:10:03.000Z",
      "redeemed_at": null
    }
  ],
  "has_more": true
}

Consultar uma key

GET/v1/keys/{id}

Devolve uma key pelo id (UUID). Para saber se uma key vendida já foi resgatada, pegue o id dela em GET /keys: o texto da key nunca vai na URL, onde proxies e logs poderiam registrá-lo. Key de outro revendedor, id inexistente ou valor malformado devolvem o mesmo 404. Respostas que trazem o texto da key são auditadas.

Limite de taxa: 120 por minuto, por chave de API

Parâmetros

  • idpath · stringObrigatório

    Id da key (UUID), como devolvido por GET /keys ou POST /keys.

Respostas

  • 200A key.

Erros

  • 404resource_missing O objeto não existe ou é de outro revendedor (mesma resposta), ou o endpoint não existe.

Todo endpoint também pode devolver: invalid_api_key, reseller_inactive, rate_limit_exceeded, method_not_allowed, internal_error, service_unavailable.

Requisição
curl https://evolutionboost.xyz/api/v1/keys/1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d \
  -H "Authorization: Bearer $EVB_API_KEY"
Resposta · 200
{
  "object": "key",
  "id": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
  "key": "ACME-H150-AAAA-AAAA-AAAA-AAAA",
  "key_prefix": "ACME-H150-AAAA",
  "package_code": "H150",
  "hours": 150,
  "status": "redeemed",
  "batch_id": "d2a7f3c1-4b5e-4f60-9a8b-7c6d5e4f3a21",
  "created_at": "2026-10-17T14:10:03.000Z",
  "redeemed_at": "2026-10-17T18:22:09.000Z"
}