Por onde começo?
- 1Cadastre-se com um nome de usuário e entre no painel.
- 2Crie uma chave de API na aba Conectar. A chave completa aparece uma única vez, ao ser criada, então guarde-a em um lugar seguro na hora.
- 3Envie a chave no cabeçalho Authorization em toda requisição que precisar dela.
- 4Chame /account primeiro para verificar se a chave funciona, depois faça pedidos com /orders.
Autenticação
Requisições sobre a sua conta (account, orders, proxy-user) exigem chave de API, enviada no cabeçalho como Authorization: Bearer spk_... Preços, países e cotações são públicos e funcionam sem chave.
A StarProxy guarda apenas um hash de cada chave, não a chave em si. Se perder uma chave, crie outra no painel. A chave antiga para de funcionar nesse momento. Use as chaves só em código de servidor. Nunca as coloque em código que roda no navegador nem em um repositório público.
Authorization: Bearer spk_your_api_key
URL base e formato dos dados
- URL base
- https://starproxy.shop/api/v1
- Corpo da requisição e da resposta
- application/json
- Valores
- USD como número, ex.: 1047.70
- Data e hora
- ISO 8601 (UTC)
Há limite de chamadas?
Uma chave de API pode fazer até 60 chamadas por minuto. Endpoints públicos sem chave permitem 60 chamadas por minuto por IP. Acima do limite você recebe HTTP 429, então espere um minuto e envie de novo.
Como são os erros?
Um código de status HTTP, mais um corpo JSON com um código de erro curto e uma mensagem.
{
"error": {
"code": "insufficient_balance",
"message": "Your balance is too low for this order. Top up in the dashboard."
}
}| HTTP | code | Significado |
|---|---|---|
| bad_requestHTTP 400Falta um valor obrigatório, ou o valor não é válido para este produto. | Falta um valor obrigatório, ou o valor não é válido para este produto. | |
| unauthorizedHTTP 401A chave de API está ausente ou não confere. | A chave de API está ausente ou não confere. | |
| insufficient_balanceHTTP 402Seu saldo é menor que o total do pedido. Nada foi descontado. | Seu saldo é menor que o total do pedido. Nada foi descontado. | |
| not_foundHTTP 404Não há pedido com este id na sua conta. | Não há pedido com este id na sua conta. | |
| rate_limitedHTTP 429Requisições demais em um minuto. | Requisições demais em um minuto. | |
| server_errorHTTP 500O servidor não conseguiu concluir a requisição. Nada foi descontado. | O servidor não conseguiu concluir a requisição. Nada foi descontado. |
Endpoints
Consultar conta
GET/api/v1/accountExige chave de API
Retorna seu saldo, host e portas do proxy, usuário e senha do proxy e os seus IPs autorizados.
curl https://starproxy.shop/api/v1/account \ -H "Authorization: Bearer spk_your_api_key"
{
"username": "star_user01",
"balance_usd": 1300,
"proxy": {
"host": "gate.starproxy.shop",
"http_port": 6100,
"socks5_port": 6200,
"username": "spexample1",
"password": "your_password"
},
"allowed_ips": [
"203.0.113.10"
]
}Consultar produtos e preços
GET/api/v1/productsNão precisa de chave
Retorna a faixa de pedido de cada produto, o preço por faixa de quantidade e os descontos por período, com base na mesma tabela da página de preços.
curl https://starproxy.shop/api/v1/products
{
"currency": "USD",
"prices_as_of": "2026-10-31",
"products": [
{
"id": "unlimited",
"unit": "day",
"quantity": {
"meaning": "days",
"min": 1,
"max": 365
},
"...": "..."
},
{
"id": "residential",
"unit": "gb",
"...": "..."
}
]
}Listar países e cidades
GET/api/v1/countriesNão precisa de chave
Retorna os países disponíveis em cada produto, além dos valores de cidade para a opção -city- do usuário.
| Campo | Tipo | Significado |
|---|---|---|
productOpcional | string | Um de unlimited, residential, isp, datacenter. O padrão é residential. |
curl "https://starproxy.shop/api/v1/countries?product=datacenter"
{
"product": "datacenter",
"countries": [
{
"code": "us",
"name": "United States",
"region": "americas",
"datacenter": true,
"cities": [
{
"name": "New York",
"value": "new_york"
},
{
"name": "Los Angeles",
"value": "los_angeles"
}
]
}
]
}Obter cotação
POST/api/v1/quoteNão precisa de chave
Calcula o total do pedido sem mexer no saldo. Envie o mesmo corpo que usaria no pedido.
| Campo | Tipo | Significado |
|---|---|---|
productObrigatório | string | Um de unlimited, residential, isp, datacenter. |
quantityObrigatório | integer | Dias para unlimited (1~365), GB para residential (5~5,000), quantidade de IPs para isp (1~1,000) ou datacenter (5~5,000). |
concurrencyOpcional | integer | Só para unlimited. Um de 200, 500, 1000, 2000. |
bandwidthOpcional | integer | Só para unlimited, em Mbps. Um de 100, 200, 500, 1000. |
monthsOpcional | integer | Só para isp e datacenter. Um de 1, 3, 6, 12. |
countryOpcional | string | Só para isp e datacenter. Um código de país de duas letras, como jp. Veja os valores válidos em /countries. |
curl -X POST https://starproxy.shop/api/v1/quote \
-H "Content-Type: application/json" \
-d '{"product":"unlimited","quantity":30,"concurrency":1000,"bandwidth":200}'{
"product": "unlimited",
"quantity": 30,
"unit_price_usd": 8.41,
"unit": "day",
"total_usd": 252.3
}Criar um pedido
POST/api/v1/ordersExige chave de API
Desconta o total do saldo e cria o pedido. O status começa como pending (ativando) e muda para active quando o pedido fica pronto. Se não puder ser ativado, passa a refunded e o valor integral volta para o saldo. Saldo insuficiente retorna 402.
| Campo | Tipo | Significado |
|---|---|---|
productObrigatório | string | Um de unlimited, residential, isp, datacenter. |
quantityObrigatório | integer | Dias para unlimited (1~365), GB para residential (5~5,000), quantidade de IPs para isp (1~1,000) ou datacenter (5~5,000). |
concurrencyOpcional | integer | Só para unlimited. Um de 200, 500, 1000, 2000. |
bandwidthOpcional | integer | Só para unlimited, em Mbps. Um de 100, 200, 500, 1000. |
monthsOpcional | integer | Só para isp e datacenter. Um de 1, 3, 6, 12. |
countryOpcional | string | Só para isp e datacenter. Um código de país de duas letras, como jp. Veja os valores válidos em /countries. |
curl -X POST https://starproxy.shop/api/v1/orders \
-H "Authorization: Bearer spk_your_api_key" \
-H "Content-Type: application/json" \
-d '{"product":"unlimited","quantity":30,"concurrency":1000,"bandwidth":200}'{
"order": {
"id": "SP-7KQ2M-X4HTD",
"product": "unlimited",
"quantity": 30,
"months": null,
"concurrency": 1000,
"bandwidth_mbps": 200,
"country": null,
"unit_price_usd": 8.41,
"total_usd": 252.3,
"status": "pending",
"created_at": "2026-10-31T09:12:44.120Z",
"updated_at": "2026-10-31T09:12:44.120Z"
},
"balance_usd": 1047.7
}Listar pedidos
GET/api/v1/ordersExige chave de API
Retorna até 100 pedidos, do mais recente para o mais antigo.
| Campo | Tipo | Significado |
|---|---|---|
statusOpcional | string | Um de pending, active, refunded. Deixe vazio para todos os status. |
curl "https://starproxy.shop/api/v1/orders?status=pending" \ -H "Authorization: Bearer spk_your_api_key"
{
"orders": [
{
"id": "SP-7KQ2M-X4HTD",
"product": "unlimited",
"quantity": 30,
"months": null,
"concurrency": 1000,
"bandwidth_mbps": 200,
"country": null,
"unit_price_usd": 8.41,
"total_usd": 252.3,
"status": "pending",
"created_at": "2026-10-31T09:12:44.120Z",
"updated_at": "2026-10-31T09:12:44.120Z"
}
]
}Consultar um pedido
GET/api/v1/orders/{id}Exige chave de API
Retorna um pedido pelo id. Use para ver se a ativação terminou.
| Campo | Tipo | Significado |
|---|---|---|
idObrigatório | string | O id do pedido, por exemplo SP-7KQ2M-X4HTD. |
curl https://starproxy.shop/api/v1/orders/SP-7KQ2M-X4HTD \ -H "Authorization: Bearer spk_your_api_key"
{
"order": {
"id": "SP-7KQ2M-X4HTD",
"product": "unlimited",
"quantity": 30,
"months": null,
"concurrency": 1000,
"bandwidth_mbps": 200,
"country": null,
"unit_price_usd": 8.41,
"total_usd": 252.3,
"status": "active",
"created_at": "2026-10-31T09:12:44.120Z",
"updated_at": "2026-10-31T09:40:02.511Z"
}
}Gerar um usuário de proxy
GET/api/v1/proxy-userExige chave de API
Retorna um usuário de proxy com as suas opções já incluídas, além de URLs HTTP e SOCKS5 prontas para colar. Sem session, cada requisição recebe um novo IP.
| Campo | Tipo | Significado |
|---|---|---|
productOpcional | string | Um de unlimited, residential, isp, datacenter. O padrão é unlimited. |
countryOpcional | string | Um código de país de duas letras, como jp. |
cityOpcional | string | Um valor de cidade de /countries, como tokyo. Exige country. |
sessionOpcional | string | 1~32 letras ou números. Requisições com a mesma session compartilham um IP. |
ttlOpcional | integer | Minutos para manter o IP da sessão, de 1~60. O padrão é 30. |
curl "https://starproxy.shop/api/v1/proxy-user?product=residential&country=jp&city=tokyo&session=job42&ttl=30" \ -H "Authorization: Bearer spk_your_api_key"
{
"username": "spexample1-zone-res-cc-jp-city-tokyo-sid-job42-ttl-30",
"password": "your_password",
"http": "http://spexample1-zone-res-cc-jp-city-tokyo-sid-job42-ttl-30:your_password@gate.starproxy.shop:6100",
"socks5": "socks5h://spexample1-zone-res-cc-jp-city-tokyo-sid-job42-ttl-30:your_password@gate.starproxy.shop:6200"
}Exemplo completo
Um script que obtém uma cotação, faz o pedido com o saldo e conecta por um IP do Japão.
import requests
API = "https://starproxy.shop/api/v1"
HEAD = {"Authorization": "Bearer spk_your_api_key"}
# 1) Check the price first
plan = {"product": "residential", "quantity": 100}
print(requests.post(f"{API}/quote", json=plan).json())
# 2) Order from your balance
r = requests.post(f"{API}/orders", json=plan, headers=HEAD)
order = r.json()["order"]
print(order["id"], order["status"])
# 3) Get a username for Japanese IPs
u = requests.get(f"{API}/proxy-user", headers=HEAD,
params={"product": "residential", "country": "jp"}).json()
proxies = {"http": u["http"], "https": u["http"]}
print(requests.get("https://ipinfo.io/json", proxies=proxies, timeout=30).json())const API = "https://starproxy.shop/api/v1";
const HEAD = { Authorization: "Bearer spk_your_api_key", "Content-Type": "application/json" };
// Check the balance
const acc = await fetch(`${API}/account`, { headers: HEAD }).then((r) => r.json());
console.log(acc.balance_usd);
// Order 7 days of unlimited
const res = await fetch(`${API}/orders`, {
method: "POST",
headers: HEAD,
body: JSON.stringify({ product: "unlimited", quantity: 7, concurrency: 500, bandwidth: 100 }),
});
if (res.status === 402) console.log("Top up first");
else console.log((await res.json()).order.id);Pedidos feitos pela API são processados como os do painel e aparecem na aba Histórico. Troque spk_your_api_key nos exemplos pela sua própria chave.