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.
https://evolutionboost.xyz/api/v1Introduçã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), comcurrency: "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
429antes 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çalho | Quando | Descrição |
|---|---|---|
Authorization | Sempre | Bearer evb_live_..., a sua chave de API. |
Content-Type | POST | application/json. O corpo tem limite de 24000 bytes. |
Idempotency-Key | POST | Uma chave única por operação (UUID). Veja Idempotência. |
X-Request-Id | Opcional | O 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. |
Authorization: Bearer evb_live_xxxxxxxxxxxxxxxxErros
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
| Tipo | Status | Descrição |
|---|---|---|
authentication_error | 401 | A chave de API está ausente, inválida, revogada ou expirada. |
permission_error | 403 | A chave é válida, mas a conta do revendedor não está ativa. |
invalid_request_error | 400, 404, 405, 409, 413 | A requisição está malformada ou aponta para algo que não existe. |
insufficient_balance | 402 | O saldo não cobre a compra. Nada foi cobrado. |
rate_limit_error | 429 | Requisições demais. Aguarde Retry-After segundos. |
api_error | 500, 502, 503 | Algo falhou do nosso lado ou no provedor de pagamento. Tente de novo com espera crescente. |
Códigos de erro
| Código | Status | Descrição |
|---|---|---|
invalid_api_key | 401 | Chave de API ausente, inválida, revogada ou expirada. A resposta é a mesma em todos os casos. |
reseller_inactive | 403 | A conta do revendedor foi revogada ou removida. |
invalid_json | 400 | O corpo está vazio, não é JSON ou não é um objeto JSON. |
idempotency_key_required | 400 | POST sem o cabeçalho Idempotency-Key. |
invalid_idempotency_key | 400 | Idempotency-Key deve ter de 1 a 255 caracteres ASCII visíveis, sem espaços. |
invalid_amount | 400 | amount_cents deve ser um inteiro entre 1000 e 500000. |
too_many_pending_deposits | 400 | Você já tem 3 depósitos pendentes. Pague um ou espere expirar. |
missing_items | 400 | Envie items (não vazio) ou package_code. |
invalid_items | 400 | items deve ser uma lista de objetos. |
too_many_items | 400 | items aceita no máximo 50 itens. |
invalid_package_code | 400 | package_code deve ter o formato H150 (1 a 20 letras ou dígitos). |
invalid_quantity | 400 | quantity deve ser um inteiro entre 1 e 100. |
duplicate_package | 400 | O mesmo pacote aparece duas vezes em items. Some as quantidades. |
too_many_keys | 400 | Uma requisição cria no máximo 100 keys no total. |
package_unavailable | 400 | O pacote não existe ou não tem preço de atacado. Veja GET /packages. |
invalid_limit | 400 | limit deve ser um inteiro entre 1 e 100. |
invalid_cursor | 400 | starting_after não é um UUID ou não é um objeto desta lista. |
invalid_status | 400 | Valor desconhecido no filtro status. |
invalid_kind | 400 | Valor desconhecido no filtro kind. |
invalid_batch_id | 400 | batch_id deve ser um UUID. |
insufficient_balance | 402 | O saldo não cobre o total da compra. Nada foi cobrado nem criado. |
resource_missing | 404 | O objeto não existe ou é de outro revendedor (mesma resposta), ou o endpoint não existe. |
method_not_allowed | 405 | Método HTTP não suportado. Veja o cabeçalho Allow. |
idempotency_key_reused | 409 | A Idempotency-Key já foi usada com outro corpo. Use uma chave nova para uma operação nova. |
payload_too_large | 413 | O corpo passa de 24000 bytes. |
rate_limit_exceeded | 429 | Limite de taxa atingido. Aguarde os segundos do cabeçalho Retry-After. |
internal_error | 500 | Erro inesperado. Tente mais tarde; em POST, reutilize a mesma Idempotency-Key. |
payment_provider_error | 502 | O provedor PIX falhou ao criar a cobrança. Tente mais tarde. |
service_unavailable | 503 | O serviço está temporariamente indisponível. Tente de novo com espera crescente. |
{
"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.
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 /keysrepetido com a mesma chave e o mesmo corpo:200com o mesmo lote e o cabeçalhoIdempotent-Replayed: true(a primeira chamada devolve201).POST /depositsrepetido com a mesma chave e o mesmo valor:200com 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.
| Endpoint | Limite |
|---|---|
| Leitura (todos os GET) | 120 por minuto, por chave de API |
| POST /keys | 30 por minuto, por chave de API |
| POST /deposits | 5 por 5 minutos, por chave de API |
| Falhas de autenticação | 20 por minuto, por IP |
Guia rápido
O fluxo recomendado, do saldo zerado até as keys na mão:
- Veja o que você pode vender e o seu saldo:
GET /packageseGET /balance. - Coloque saldo:
POST /depositscomamount_cents(R$ 10,00 a R$ 5.000,00). Pague obr_codedevolvido (PIX copia e cola) ou o QR embr_code_base64e consulteGET /deposits/{id}a cada 5 a 10 segundos atéstatusserpaid. - Compre keys:
POST /keyscomitemse umaIdempotency-Keynova. A resposta traz o texto completo de cada key. - Acompanhe:
GET /keys?status=free(ainda não resgatadas) ouGET /keys?status=redeemed.
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.idstringId do revendedor.
namestringNome de exibição.
codestringCódigo do revendedor. É a primeira parte das keys que você compra.
statusstring (active | revoked)Só revendedores
activepodem usar a API.tokenTokenInfoA chave de API usada nesta requisição.
balanceBalanceSaldo atual.
Endpoints
{
"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.
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.
curl https://evolutionboost.xyz/api/v1/me \
-H "Authorization: Bearer $EVB_API_KEY"{
"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.codestringCódigo do pacote usado em
POST /keys(por exemploH150).hoursintegerHoras de farm que uma key concede.
account_limitintegerContas Steam que o cliente pode farmar ao mesmo tempo.
price_centsintegerO seu preço de atacado por key, em centavos de real.
currencystring (BRL)Sempre
BRL.
Endpoints
{
"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).
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.
curl https://evolutionboost.xyz/api/v1/packages \
-H "Authorization: Bearer $EVB_API_KEY"{
"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_centsintegerSaldo disponível em centavos de real.
currencystring (BRL)Sempre
BRL.updated_atstring | nullÚltima alteração do saldo;
nullse a carteira nunca foi usada.
Endpoints
{
"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.
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.
curl https://evolutionboost.xyz/api/v1/balance \
-H "Authorization: Bearer $EVB_API_KEY"{
"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.idstringId 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) ourefund(estorno).amount_centsintegerValor com sinal: positivo credita, negativo debita.
balance_after_centsintegerSaldo logo depois deste movimento.
currencystring (BRL)Sempre
BRL.ref_typestring | nullO que originou, por exemplo
depositoukey_batch; em geralnullem ajustes.ref_idstring | nullId do depósito ou do lote de keys.
descriptionstring | nullDescrição curta.
created_atstringQuando o movimento aconteceu.
Endpoints
{
"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.
Parâmetros
limitquery · integerOpcionalQuantidade de objetos por página, de 1 a 100. Padrão 20.
starting_afterquery · stringOpcionalCursor: o
iddo último objeto da página anterior. Devolve os objetos que vêm depois dele.kindquery · string (deposit | key_purchase | adjustment | refund)OpcionalSó movimentos deste tipo.
Respostas
- 200Uma página do extrato.
Erros
- 400invalid_limit
limitdeve ser um inteiro entre 1 e 100. - 400invalid_cursor
starting_afternão é um UUID ou não é um objeto desta lista. - 400invalid_kind Valor desconhecido no filtro
kind.
Todo endpoint também pode devolver: invalid_api_key, reseller_inactive, rate_limit_exceeded, method_not_allowed, internal_error, service_unavailable.
curl "https://evolutionboost.xyz/api/v1/ledger?kind=key_purchase&limit=20" \
-H "Authorization: Bearer $EVB_API_KEY"{
"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.idstringId do depósito.
amount_centsintegerValor em centavos de real.
currencystring (BRL)Sempre
BRL.statusstring (pending | paid | failed | expired)pendingaté o PIX ser pago;paidsignifica que o saldo foi creditado;failedouexpirednunca serão creditados.br_codestring | nullCódigo PIX copia e cola. Só enquanto
pending.br_code_base64string | nullQR code em data URL PNG (
data:image/png;base64,...). Só enquantopending.expires_atstring | nullQuando a cobrança PIX expira (definido pelo provedor de pagamento).
created_atstringData de criação.
paid_atstring | nullQuando o pagamento foi confirmado.
{
"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.
Parâmetros
Idempotency-Keyheader · stringObrigatórioChave ú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órioValor 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-Keydevolve o mesmo depósito.
Erros
- 400idempotency_key_required POST sem o cabeçalho
Idempotency-Key. - 400invalid_idempotency_key
Idempotency-Keydeve ter de 1 a 255 caracteres ASCII visíveis, sem espaços. - 400invalid_json O corpo está vazio, não é JSON ou não é um objeto JSON.
- 400invalid_amount
amount_centsdeve ser um inteiro entre 1000 e 500000. - 400too_many_pending_deposits Você já tem 3 depósitos pendentes. Pague um ou espere expirar.
- 409idempotency_key_reused A
Idempotency-Keyjá foi usada com outro corpo. Use uma chave nova para uma operação nova. - 413payload_too_large O corpo passa de 24000 bytes.
- 502payment_provider_error O provedor PIX falhou ao criar a cobrança. Tente mais tarde.
Todo endpoint também pode devolver: invalid_api_key, reseller_inactive, rate_limit_exceeded, method_not_allowed, internal_error, service_unavailable.
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}'{
"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.
Parâmetros
idpath · stringObrigatórioId 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.
curl https://evolutionboost.xyz/api/v1/deposits/9b1e4c77-2f3a-4d8e-b5c6-0a1f2e3d4c5b \
-H "Authorization: Bearer $EVB_API_KEY"{
"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.
Parâmetros
limitquery · integerOpcionalQuantidade de objetos por página, de 1 a 100. Padrão 20.
starting_afterquery · stringOpcionalCursor: o
iddo último objeto da página anterior. Devolve os objetos que vêm depois dele.statusquery · string (pending | paid | failed | expired)OpcionalSó depósitos com este status.
Respostas
- 200Uma página de depósitos.
Erros
- 400invalid_limit
limitdeve ser um inteiro entre 1 e 100. - 400invalid_cursor
starting_afternão é um UUID ou não é um objeto desta lista. - 400invalid_status Valor desconhecido no filtro
status.
Todo endpoint também pode devolver: invalid_api_key, reseller_inactive, rate_limit_exceeded, method_not_allowed, internal_error, service_unavailable.
curl "https://evolutionboost.xyz/api/v1/deposits?status=paid&limit=20" \
-H "Authorization: Bearer $EVB_API_KEY"{
"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.idstringId da key (também é o cursor de paginação).
keystring | nullTexto completo da key.
nullem keys antigas que não podem ser recuperadas (usekey_prefix).key_prefixstringAs três primeiras partes da key, seguras para exibir.
package_codestringPacote da key.
hoursinteger | nullHoras concedidas pela key.
statusstring (free | redeemed | revoked | suspended)free(ainda não resgatada),redeemed(resgatada),revoked(revogada) oususpended(suspensa).batch_idstring | nullLote de compra que criou a key.
created_atstringData de criação.
redeemed_atstring | nullQuando um cliente resgatou.
{
"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.
Parâmetros
Idempotency-Keyheader · stringObrigatórioChave ú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órioO que comprar: de 1 a 50 objetos
{package_code, quantity}, cada pacote uma vez só.items[].package_codestringObrigatórioCódigo do pacote de
GET /packages.items[].quantityintegerOpcionalQuantidade 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-Keye o mesmo corpo: o lote original, sem nova cobrança.Idempotent-Replayed:truequando a resposta é uma repetição.
Erros
- 400idempotency_key_required POST sem o cabeçalho
Idempotency-Key. - 400invalid_idempotency_key
Idempotency-Keydeve ter de 1 a 255 caracteres ASCII visíveis, sem espaços. - 400invalid_json O corpo está vazio, não é JSON ou não é um objeto JSON.
- 400missing_items Envie
items(não vazio) oupackage_code. - 400invalid_items
itemsdeve ser uma lista de objetos. - 400too_many_items
itemsaceita no máximo 50 itens. - 400invalid_package_code
package_codedeve ter o formatoH150(1 a 20 letras ou dígitos). - 400invalid_quantity
quantitydeve ser um inteiro entre 1 e 100. - 400duplicate_package O mesmo pacote aparece duas vezes em
items. Some as quantidades. - 400too_many_keys Uma requisição cria no máximo 100 keys no total.
- 400package_unavailable O pacote não existe ou não tem preço de atacado. Veja
GET /packages. - 402insufficient_balance O saldo não cobre o total da compra. Nada foi cobrado nem criado.
- 409idempotency_key_reused A
Idempotency-Keyjá foi usada com outro corpo. Use uma chave nova para uma operação nova. - 413payload_too_large O corpo passa de 24000 bytes.
Todo endpoint também pode devolver: invalid_api_key, reseller_inactive, rate_limit_exceeded, method_not_allowed, internal_error, service_unavailable.
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}]}'{
"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.
Parâmetros
limitquery · integerOpcionalQuantidade de objetos por página, de 1 a 100. Padrão 20.
starting_afterquery · stringOpcionalCursor: o
iddo último objeto da página anterior. Devolve os objetos que vêm depois dele.statusquery · string (free | redeemed | all)Opcionalfree(não resgatadas),redeemed(resgatadas) ouall(padrão; inclui também revogadas e suspensas).package_codequery · stringOpcionalSó keys deste pacote.
batch_idquery · stringOpcionalSó keys deste lote de compra.
Respostas
- 200Uma página de keys.
Erros
- 400invalid_limit
limitdeve ser um inteiro entre 1 e 100. - 400invalid_cursor
starting_afternão é um UUID ou não é um objeto desta lista. - 400invalid_status Valor desconhecido no filtro
status. - 400invalid_package_code
package_codedeve ter o formatoH150(1 a 20 letras ou dígitos). - 400invalid_batch_id
batch_iddeve ser um UUID.
Todo endpoint também pode devolver: invalid_api_key, reseller_inactive, rate_limit_exceeded, method_not_allowed, internal_error, service_unavailable.
curl "https://evolutionboost.xyz/api/v1/keys?status=free&package_code=H150&limit=50" \
-H "Authorization: Bearer $EVB_API_KEY"{
"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.
Parâmetros
idpath · stringObrigatórioId 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.
curl https://evolutionboost.xyz/api/v1/keys/1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d \
-H "Authorization: Bearer $EVB_API_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": "redeemed",
"batch_id": "d2a7f3c1-4b5e-4f60-9a8b-7c6d5e4f3a21",
"created_at": "2026-10-17T14:10:03.000Z",
"redeemed_at": "2026-10-17T18:22:09.000Z"
}