Padrão de mercado, compatível com PerfectPanel e scripts similares. Envie um POST com corpo JSON (ou form-urlencoded) para a URL abaixo. Se o seu painel já consome outro fornecedor, trocar a URL e a chave costuma bastar.
A chave é gerada junto com a conta — sem espera e sem aprovação. Criar conta de revendedor.
Toda chamada leva o campo key. Cada pedido debita a sua
carteira pré-paga pelo preço de fornecedor no momento da criação —
não há fatura nem pós-pago. Recarregue por PIX no painel.
Quatro comportamentos que quebram integração e não aparecem em lista de endpoint.
Erro vem no corpo, como {"error": "..."}. Cliente que decide
sucesso por response.ok vai tratar “saldo insuficiente” como
pedido criado — e só descobre pelo que não foi entregue.
add debita no ato e não é idempotente.
Se a chamada der timeout, não repita automaticamente. Consulte antes se o pedido existe. Retry cego numa chamada que gasta dinheiro cobra duas vezes pela mesma venda.
multiStatus aceita até 1.000 ids por chamada. E pedido
terminal (Completed, Partial, Canceled) não muda mais: pare de
consultá-lo, ou o seu job cresce para sempre.
"14.9000", quatro casas, em BRL. Converter para float e somar é
como centavo some do seu fechamento. Use decimal.
action: balance
{
"key": "SUA_CHAVE_DE_API",
"action": "balance"
}
{ "balance": "250.0000", "currency": "BRL" }
action: services
{
"key": "SUA_CHAVE_DE_API",
"action": "services"
}
[
{
"service": 101,
"name": "Curtidas Instagram",
"type": "Default",
"category": "Curtidas",
"rate": "14.9000",
"min": "50",
"max": "10000",
"refill": false,
"cancel": true,
"currency": "BRL"
}
]
rate é o preço por MIL, já com o seu desconto de volume aplicado. Serviço sem preço de revenda definido simplesmente não aparece na lista. action: add
{
"key": "SUA_CHAVE_DE_API",
"action": "add",
"service": 101,
"link": "https://instagram.com/p/ABC123",
"quantity": 1000
}
{ "order": 84213 }
service e link são obrigatórios; quantity também, exceto em serviços de comentário — nesses, mande comments com uma frase por linha e a quantidade vem daí. action: status
{
"key": "SUA_CHAVE_DE_API",
"action": "status",
"order": 84213
}
{
"charge": "14.9000",
"start_count": "0",
"status": "In progress",
"remains": "820",
"currency": "BRL"
}
remains é quanto falta entregar. charge é o que foi debitado de você, não o que você cobrou do seu cliente. action: multiStatus
{
"key": "SUA_CHAVE_DE_API",
"action": "multiStatus",
"orders": "84213,84214,84215"
}
{
"84213": { "charge": "14.9000", "status": "Completed", "remains": "0", ... },
"84214": { "error": "Incorrect order ID" }
}
action: cancel
{
"key": "SUA_CHAVE_DE_API",
"action": "cancel",
"orders": "84213,84214"
}
[
{ "order": 84213, "cancel": 1 },
{ "order": 84214, "cancel": { "error": "..." } }
]
| status | O que significa |
|---|---|
Pending |
Recebido, ainda não começou a entrega. |
In progress |
Entrega em andamento. |
Partial |
Parte foi entregue e o pedido encerrou. O não entregue já foi estornado. |
Completed |
Entregue por completo. |
Canceled |
Cancelado ou reembolsado. |
refill não é suportado e responde
{"error": "Refill not supported"} — trate como “sem reposição
automática” no seu painel, em vez de deixar o cliente pedir e não acontecer nada.
curl -sX POST https://curtipay.com/api/reseller \
-H "Content-Type: application/json" \
-d '{"key":"SUA_CHAVE_DE_API","action":"balance"}'
Cole um destes prompts no Claude Code, Cursor, ChatGPT ou o assistente que você usar, dentro do seu projeto. Eles já carregam as armadilhas da seção acima — sem elas, a IA escreve um cliente que decide sucesso pelo código HTTP e engole erro em silêncio.
Grátis, sem aprovação — a chave sai junto com a conta.