API de Parceiros
REST sobre HTTPS para partidos políticos e escritórios contábeis integrarem com a plataforma QueroApoiar. Autenticação por chave, respostas em JSON, webhooks assinados.
Quem usa
Dois perfis de parceiro acessam a mesma API com chaves distintas. O escopo de cada chave (criar/editar/ler) é definido pela QueroApoiar no momento da emissão.
Partido político
Pré-cadastra os candidatos filiados em lote, atualiza dados ao longo da campanha e acompanha doações para auditoria interna. Ver detalhes →
Escritório contábil
Acessa em modo leitura os candidatos vinculados ao escritório e extrai doações no detalhe necessário para a prestação de contas eleitoral no SPCE. Ver detalhes →
Início rápido
1. Receba a chave
A chave é emitida pela QueroApoiar após a assinatura do contrato. Cada
parceiro recebe duas: uma de homologação ({sigla}_test_…) e
outra de produção ({sigla}_live_…).
2. Faça a primeira chamada
# Listar candidatos do seu partido
curl https://api.queroapoiar.com.br/api/parceiros/candidatos \
-H "X-API-Key: {sua_chave}"
const response = await fetch(
"https://api.queroapoiar.com.br/api/parceiros/candidatos",
{ headers: { "X-API-Key": process.env.QA_API_KEY } }
);
const { items } = await response.json();
console.log(items);
import os, requests
resp = requests.get(
"https://api.queroapoiar.com.br/api/parceiros/candidatos",
headers={"X-API-Key": os.environ["QA_API_KEY"]},
)
print(resp.json())
<?php
$ch = curl_init("https://api.queroapoiar.com.br/api/parceiros/candidatos");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-API-Key: " . getenv("QA_API_KEY")]);
$resp = curl_exec($ch);
echo $resp;
3. Cadastre um candidato
curl -X POST https://api.queroapoiar.com.br/api/parceiros/candidatos \
-H "X-API-Key: {sua_chave}" \
-H "Content-Type: application/json" \
-d '{
"cpf": "12345678900",
"nome": "Maria Silva Santos",
"nomeUrna": "Maria do Bairro",
"email": "[email protected]",
"telefone": "11999998888",
"cargo": "deputado_federal",
"uf": "SP",
"municipio": "São Paulo",
"tituloEleitor": "123456789012",
"genero": "F",
"slug": "maria-do-bairro"
}'
O campo cargo tem 13 valores possíveis (enum fechado). A API rejeita
qualquer valor fora dessa lista com 422 CARGO_INVALIDO. Veja a lista
completa em Cargos válidos.
Os campos genero (M/F) e slug são opcionais.
genero personaliza o tratamento no email de boas-vindas
(Bem-vindo / Bem-vinda); se omitido, é inferido do cargo. slug
define a URL pública (queroapoiar.com.br/{slug}); se omitido,
é gerado de nomeUrna; se ocupado, retorna
409 SLUG_OCUPADO.
O candidato recebe um e-mail com link para definir a senha. Em seguida paga a taxa de inscrição, valida o celular e a campanha vai ao ar.
Partidos
Use a API para pré-cadastrar candidatos antes da abertura das campanhas. Substitui digitação manual e mantém o CRM interno sincronizado com a plataforma.
Endpoints disponíveis
| Operação | Endpoint | Permissão necessária |
|---|---|---|
| Cadastrar candidato individual | POST /candidatos | candidatos.criar |
| Cadastrar em lote | POST /candidatos/lote | candidatos.criar |
| Atualizar dados | PATCH /candidatos/{cpf} | candidatos.editar |
| Listar candidatos | GET /candidatos | candidatos.ler |
| Consultar candidato | GET /candidatos/{cpf} | candidatos.ler |
| Acompanhar doações | GET /doacoes | doacoes.ler |
Volume
Até 1.000 candidatos: chamadas individuais ou dois lotes de 500.
Acima disso, use sempre /candidatos/lote - retorna
um jobId para acompanhar o processamento.
LGPD. O acesso a doações com PII completa (nome, CPF e e-mail do doador) requer DPA assinado entre o partido e a QueroApoiar.
Contadores
Chave configurada em modo somente leitura. Permite extrair candidatos e doações do escritório para prestação de contas eleitoral, sem risco de alteração.
Endpoints disponíveis
| Operação | Endpoint | Uso típico |
|---|---|---|
| Listar candidatos | GET /candidatos | Conferir quem está ativo |
| Consultar candidato | GET /candidatos/{cpf} | Detalhes para FCC e NF |
| Doações de um candidato | GET /candidatos/{cpf}/doacoes | Escrituração mensal |
| Todas as doações | GET /doacoes | Conciliação por período |
| Resumo agregado | GET /doacoes/resumo | Relatório executivo |
Extrair doações do mês
curl "https://api.queroapoiar.com.br/api/parceiros/doacoes?desde=2026-09-01&ate=2026-09-30&status=paga&limite=100" \
-H "X-API-Key: {sua_chave}"
Resposta com doador (nome, CPF, e-mail), valor, forma de pagamento e gateway - campos suficientes para gerar o FCC e a prestação no SPCE.
Autenticação
Toda chamada inclui o cabeçalho X-API-Key. O backend
identifica o parceiro pela chave e filtra os recursos automaticamente -
cada parceiro só vê o próprio escopo.
X-API-Key: {sigla}_{ambiente}_{token}
# Exemplos:
X-API-Key: pt_live_a3f9b2c8d1e4f7a0b3c6d9e2f5a8b1c4
X-API-Key: pmdb_test_e5c1a8b2d6f9c3e7a0b4d8f1c5e9a2b6
Estrutura da chave
{sigla}- código do partido em minúsculas (ex.:pt,pmdb){ambiente}-live(produção) outest(homologação){token}- 48 caracteres hexadecimais aleatórios
Segurança. Armazene a chave em cofre de senhas (1Password, AWS Secrets Manager, Vault). Nunca comite no Git ou cole em planilhas. Em caso de suspeita de vazamento, solicite rotação - a chave antiga é invalidada imediatamente.
Fluxo de cadastro
Sequência disparada quando o parceiro cria um candidato via API até a campanha entrar no ar:
- Pré-cadastro - API cria conta, perfil eleitoral e campanha em estado pendente.
- E-mail - candidato recebe link para definir a senha.
- Primeiro acesso - ao clicar, define a senha e entra no painel.
- Pagamento - candidato paga a inscrição (responsabilidade dele).
- SMS - validação do celular obrigatória por regulação.
- Publicação - campanha vai ao ar e passa a receber doações.
Quem paga a inscrição. O partido cadastra sem custo via API. Cada candidato paga a própria taxa de inscrição ao ativar a campanha - adesão individual e em conformidade com a legislação.
Escopo e permissões
Cada chave carrega um conjunto de permissões granulares definido pela QueroApoiar no momento da emissão.
| Permissão | O que libera | Padrão para partido | Padrão para contador |
|---|---|---|---|
candidatos.criar | POST /candidatos e /lote | Sim | Não |
candidatos.editar | PATCH /candidatos/{cpf} | Sim | Não |
candidatos.ler | GET /candidatos e detalhes | Sim | Sim |
doacoes.ler | GET /doacoes e /resumo | Sim | Sim |
Sem a permissão necessária, a API retorna 403 PERMISSAO_NEGADA.
Permissões podem ser alteradas pelo painel administrativo sem rotacionar
a chave.
Rate limits
| Limite | Padrão | Configurável |
|---|---|---|
| Requisições por minuto (por chave) | 600 | Sim, por contrato |
| Requisições por minuto (por IP) | 1.200 | Não |
| Candidatos por chamada de lote | 500 | Sim, por contrato |
| Quota diária de candidatos (por chave) | 5.000/dia | Sim, por contrato |
Excedido o limite por minuto, a API responde
429 RATE_LIMIT_EXCEDIDO com Retry-After em
segundos. Excedida a quota diária, responde
429 QUOTA_DIARIA_EXCEDIDA e reseta às 00h UTC.
HTTP/1.1 429 Too Many Requests
Retry-After: 60
RateLimit-Limit: 600
RateLimit-Remaining: 0
RateLimit-Reset: 60
Content-Type: application/json
{
"erro": "RATE_LIMIT_EXCEDIDO",
"mensagem": "Limite de 600 requisições por minuto excedido para esta chave."
}
Webhooks
Configure a webhookUrl no momento de criação da chave para
receber notificações assinadas (HMAC-SHA256). A URL fica
amarrada à chave e não pode ser sobrescrita por
requisição — pra trocar, peça atualização ao admin.
Eventos suportados
type | Quando dispara |
|---|---|
donacao.confirmada | Doação confirmada pelo gateway (paid=true, status=authorized) |
donacao.cancelada | Doação cancelada/recusada pelo gateway |
donacao.estornada | Estorno (refund/chargeback) processado |
candidatos_lote.concluido | Job de POST /candidatos/lote terminou de processar |
O admin define quais eventos a chave recebe via
filtro webhookEventos. Vazio = todos os tipos liberados pelas
permissões da chave.
Headers do POST
POST {sua webhookUrl}
Content-Type: application/json
X-QA-Signature: t=<unix_seconds>,v1=<hmac_hex>
X-QA-Timestamp: <unix_seconds>
X-QA-Event: <type>
X-QA-Event-Id: evt_<uuid_hex>
X-QA-Api-Version: 2026-05
User-Agent: QueroApoiar-Webhook/1.0
Body (envelope padronizado)
{
"id": "evt_a1b2c3d4...",
"type": "donacao.confirmada",
"apiVersion": "2026-05",
"createdAt": "2026-05-09T15:30:00.000Z",
"data": { ... }
}
O conteúdo de data varia conforme o type. Para
eventos de doação, traz data.donacao com o objeto Doação
completo. Para candidatos_lote.concluido, traz
data.jobId, data.total, data.sucessos,
data.erros e data.resultados[].
Validação da assinatura
- Reconstrua a mensagem como
${'${X-QA-Timestamp}'}.${'${rawBody}'}— use exatamente os bytes recebidos, sem reparsear o JSON. - Calcule
HMAC-SHA256(webhookSecret, mensagem)em hexadecimal. - Compare em tempo constante com o valor de
v1do header. - Rejeite se
|now - X-QA-Timestamp| > 300(5 min) — protege contra replay.
const crypto = require("crypto");
function validarAssinatura(rawBody, headers, secret) {
// Header vem como "t=1715274600,v1=abc123..."
const sig = headers["x-qa-signature"] || "";
const parts = Object.fromEntries(
sig.split(",").map((p) => p.split("=").map((s) => s.trim()))
);
const ts = parseInt(parts.t, 10);
const v1 = parts.v1;
if (!ts || !v1) return false;
// Replay protection: rejeita timestamps com mais de 5 minutos
const agora = Math.floor(Date.now() / 1000);
if (Math.abs(agora - ts) > 300) return false;
const mensagem = `${'${ts}'}.${'${rawBody}'}`;
const esperado = crypto
.createHmac("sha256", secret)
.update(mensagem)
.digest("hex");
// crypto.timingSafeEqual previne timing attacks
return v1.length === esperado.length &&
crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(esperado));
}
// IMPORTANTE no Express: use express.raw() pra preservar o body cru
// app.post("/webhook/qa",
// express.raw({ type: "application/json" }),
// (req, res) => {
// if (!validarAssinatura(req.body.toString("utf8"), req.headers, SECRET)) {
// return res.sendStatus(401);
// }
// const evento = JSON.parse(req.body.toString("utf8"));
// // ... processa
// res.sendStatus(200);
// }
// );
Idempotência e retry
- Use
iddo envelope (evt_…) pra deduplicar — receber 2x o mesmoiddeve descartar a 2ª. - A QueroApoiar tenta entregar 5 vezes em caso de timeout (10s) ou resposta diferente de 2xx.
- Backoff exponencial: 1 min, 5 min, 30 min, 2h, 12h.
- Ordem dos eventos não é garantida: use
data.donacao.statuscomo source of truth, não otype.
Webhook secret. Fornecido junto com a chave de API quando a chave é criada. Não aparece em nenhuma resposta da API depois disso — guarde no cofre. Em caso de suspeita de vazamento, peça rotação ao admin (rotaciona junto com a chave por padrão).
Anti-SSRF. URLs apontando para localhost, IPs privados
(10.x, 172.16-31.x, 192.168.x) ou metadata de cloud (169.254.169.254)
são rejeitadas no momento do cadastro da chave. Se o admin tentar setar
uma URL inválida, o bulk responde 400 WEBHOOK_INVALIDO.
Erros
A API segue convenções HTTP. Toda resposta de erro tem o mesmo formato:
{
"erro": "CODIGO_DO_ERRO",
"mensagem": "Mensagem amigável em português",
"detalhes": { "campo": "cpf" }
}
Códigos por status
| Status | Código | Quando ocorre |
|---|---|---|
| 400 | CAMPO_OBRIGATORIO | Campo obrigatório ausente |
| 400 | STATUS_INVALIDO | Filtro status fora do enum aceito |
| 400 | DATA_INVALIDA | desde/ate mal formatado |
| 400 | WEBHOOK_INVALIDO | webhookUrl da chave aponta pra IP privado/loopback |
| 400 | ID_OBRIGATORIO | id do job ausente |
| 401 | CHAVE_AUSENTE | Cabeçalho X-API-Key não enviado |
| 401 | CHAVE_INVALIDA | Chave inválida ou revogada |
| 403 | PERMISSAO_NEGADA | Chave sem permissão para o recurso |
| 403 | IP_NAO_AUTORIZADO | IP fora da whitelist |
| 403 | OWNERSHIP_INVALIDA | Vínculo entre candidato e partido não confirmado |
| 403 | CUPOM_PERMISSAO_NEGADA / CUPOM_NAO_PERMITIDO | Cupom não autorizado para a chave (ver Cupons) |
| 404 | CANDIDATO_NAO_ENCONTRADO | CPF não pertence ao seu partido |
| 404 | JOB_NAO_ENCONTRADO | Job inexistente ou expirado (TTL 7d sucesso/30d falha) |
| 404 | ROTA_NAO_ENCONTRADA | Método/path não mapeado em /api/parceiros/* |
| 409 | CADASTRO_DUPLICADO | CPF ou email já cadastrado (mensagem unificada anti-enumeração) |
| 409 | SLUG_OCUPADO | Slug informado já está em uso por outra campanha |
| 413 | LOTE_EXCEDE_LIMITE | Mais de 500 candidatos no lote |
| 415 | TIPO_NAO_SUPORTADO | Content-Type diferente de application/json em POST/PATCH |
| 422 | CPF_INVALIDO | CPF com dígitos verificadores inválidos |
| 422 | EMAIL_INVALIDO | E-mail mal formatado |
| 422 | EMAIL_DOMINIO_BLOQUEADO | Domínio descartável (mailinator, 10minutemail etc.) |
| 422 | TELEFONE_INVALIDO | Não tem 10/11 dígitos ou DDD fora de 11–99 |
| 422 | NOME_INVALIDO / NOME_URNA_INVALIDO | Nome fora de 3–120 chars / nome de urna > 30 chars |
| 422 | CARGO_INVALIDO | Cargo fora dos 13 valores aceitos |
| 422 | UF_INVALIDA | Sigla não está na lista IBGE |
| 422 | MUNICIPIO_INVALIDO | Município fora de 2–80 chars |
| 422 | NUMERO_CANDIDATO_INVALIDO | Número não bate ^\d{2,5}$ |
| 422 | TITULO_ELEITOR_INVALIDO | Título não tem exatamente 12 dígitos |
| 422 | DATA_NASCIMENTO_INVALIDA | Data inválida ou ano fora de 1900–hoje |
| 422 | SLUG_INVALIDO / SLUG_RESERVADO | Slug fora do regex ou na lista de reservados |
| 422 | FORMATO_INVALIDO / UPLOAD_FALHOU | Upload de imagem fora de data URL ou conteúdo corrompido |
| 429 | RATE_LIMIT_EXCEDIDO | Janela de requisições por minuto excedida |
| 429 | QUOTA_DIARIA_EXCEDIDA | 5.000 candidatos/dia por chave atingidos (reseta 00h UTC) |
| 500 | ERRO_INTERNO | Erro inesperado — tente novamente, reportado via Sentry |
| 503 | FILA_INDISPONIVEL | Sistema de fila temporariamente fora; vem com Retry-After: 60 |
Endpoints
Referência completa com parâmetros, exemplos e execução interativa no Playground.
Candidatos
| Método | Caminho | Descrição |
|---|---|---|
| POST | /api/parceiros/candidatos | Criar candidato individual |
| POST | /api/parceiros/candidatos/lote | Criar candidatos em lote |
| GET | /api/parceiros/candidatos | Listar candidatos do partido |
| GET | /api/parceiros/candidatos/{cpf} | Consultar candidato |
| PATCH | /api/parceiros/candidatos/{cpf} | Atualizar dados |
| GET | /api/parceiros/candidatos/{cpf}/doacoes | Doações recebidas |
Doações
| Método | Caminho | Descrição |
|---|---|---|
| GET | /api/parceiros/doacoes | Todas as doações do partido |
| GET | /api/parceiros/doacoes/resumo | Resumo agregado |
Documentos fiscais
| Método | Caminho | Descrição |
|---|---|---|
| GET | /api/parceiros/candidatos/{cpf}/fccs | Lista FCCs (ATSEFCC TSE) com URL de download |
| GET | /api/parceiros/candidatos/{cpf}/notas-fiscais | Lista NFs (inscrição + saques) com pdfUrl |
Imagens
| Método | Caminho | Descrição |
|---|---|---|
| POST | /api/parceiros/candidatos/{cpf}/foto-perfil | Atualizar foto de perfil |
| POST | /api/parceiros/candidatos/{cpf}/foto-capa | Atualizar foto de capa da campanha |
Jobs assíncronos
| Método | Caminho | Descrição |
|---|---|---|
| GET | /api/parceiros/jobs/{id} | Status de um job em lote |
Cupons reservados (gratuidades e descontos)
Permite ao partido pré-aplicar um cupom no candidato no momento do cadastro. Útil para gratuidades emitidas pelo admin do QueroApoiar em parceria comercial. O candidato vê o desconto já aplicado no checkout e não precisa digitar o código.
Como funciona
- Admin do QueroApoiar cria o cupom no painel administrativo (ex:
MISSAO-VIP-2026com gratuidade total ou desconto fixo). - Admin habilita a chave do partido com permissão
cupons.aplicare adiciona o cupom emcuponsPermitidos(whitelist). - Partido envia
POST /candidatoscom o campo opcionalcupom: "MISSAO-VIP-2026". - API valida o cupom (existe, ativo, não esgotado, dentro da validade, tipo "inscrição" ou "ambos") e o associa ao candidato.
- Quando o candidato abre o painel pra pagar, o cupom já vem pré-aplicado.
Exemplo
curl -X POST 'https://api.queroapoiar.com.br/api/parceiros/candidatos' \
-H 'X-API-Key: missao_live_a3f9b2c8d1e4f7a0b3c6d9e2f5a8b1c4' \
-H 'Content-Type: application/json' \
-d '{
"cpf": "12345678900",
"nome": "Maria Silva Santos",
"email": "[email protected]",
"telefone": "11999998888",
"cargo": "deputado_estadual",
"uf": "SP",
"municipio": "São Paulo",
"cupom": "MISSAO-VIP-2026"
}'
Erros possíveis
| HTTP | Erro | Causa |
|---|---|---|
| 403 | CUPOM_PERMISSAO_NEGADA | Chave não tem permissoes.cupons.aplicar |
| 403 | CUPOM_NAO_PERMITIDO | Cupom não está na cuponsPermitidos da chave |
| 422 | CUPOM_INEXISTENTE | Cupom não existe |
| 422 | CUPOM_INATIVO | Cupom existe mas active: false |
| 422 | CUPOM_ESGOTADO | usedCount >= maxUses |
| 422 | CUPOM_AINDA_NAO_VALIDO | now < validFrom |
| 422 | CUPOM_EXPIRADO | now > validUntil |
| 422 | CUPOM_TIPO_INVALIDO | Cupom não é tipo inscricao ou ambos |
Cupom é opcional. Se o partido não envia o campo, o candidato paga a inscrição padrão (R$199 ou o que estiver configurado).
Documentos fiscais (FCC + NF)
Endpoints para o partido baixar arquivos FCC (Forma de Contas de Campanha, formato ATSEFCC do TSE) e Notas Fiscais. Útil para prestação de contas e auditoria interna do partido.
Listar FCCs do candidato
curl 'https://api.queroapoiar.com.br/api/parceiros/candidatos/12345678900/fccs' \
-H 'X-API-Key: pt_live_...'
# Resposta
{
"candidatoCpf": "12345678900",
"candidatoNome": "Maria do Bairro",
"total": 2,
"items": [
{
"id": "67c3b8e4f1d29c5e88a0d234",
"url": "https://arquivos.queroapoiar.com.br/fcc/2026/abc/ATSEFCC00120260930000001.FCC",
"nomeArquivo": "ATSEFCC00120260930000001.FCC",
"withdrawRef": "67d4c9f5g2e3a8b9c0d1e2f3",
"dataSolicitacao": "2026-09-30T14:00:00Z",
"criadoEm": "2026-09-30T14:00:15Z"
}
]
}
Listar NFs do candidato
curl 'https://api.queroapoiar.com.br/api/parceiros/candidatos/12345678900/notas-fiscais' \
-H 'X-API-Key: pt_live_...'
# Resposta
{
"candidatoCpf": "12345678900",
"candidatoNome": "Maria do Bairro",
"total": 3,
"items": [
{
"id": "67e5d0a6h3f4b9c0d1e2f3a4",
"tipo": "inscricao",
"pdfUrl": "https://nfs.queroapoiar.com.br/pdf/...",
"numero": "00012345",
"emitidaEm": "2026-04-15T18:30:00Z",
"valor": 199.00
},
{
"id": "67f6e1b7i4g5c0d1e2f3a4b5",
"tipo": "saque",
"pdfUrl": "https://nfs.queroapoiar.com.br/pdf/...",
"xmlUrl": "https://nfs.queroapoiar.com.br/xml/...",
"numero": "00012346",
"emitidaEm": "2026-09-30T15:00:00Z",
"valor": 1500.00
}
]
}
URLs retornadas são links públicos prontos pra download. URLs da NF têm prazo de validade limitado, consulte sempre via API quando precisar baixar.
Imagens (foto de perfil + capa)
Atualiza a foto de perfil do candidato ou a capa da campanha. Útil para o partido pré-popular as imagens em onboarding em massa.
Especificações
| Item | Valor |
|---|---|
| Formato aceito no upload | jpg, jpeg, png, webp, gif, bmp, svg |
| Tamanho máximo do upload | ~3 MB |
| Resolução recomendada | Perfil: 800x800 quadrada · Capa: 1500x500 retangular |
Toda imagem enviada passa por otimização automática:
é convertida para WebP, redimensionada para a resolução adequada e
compactada sem perda visível. O parceiro pode mandar uma foto grande
(até 3 MB) sem se preocupar - a plataforma serve a versão otimizada
com tempo de carregamento ideal. Em paralelo, é gerada uma miniatura
(campo thumb da resposta) pronta pra listagens.
Exemplo - foto de perfil
curl -X POST 'https://api.queroapoiar.com.br/api/parceiros/candidatos/12345678900/foto-perfil' \
-H 'X-API-Key: pt_live_...' \
-H 'Content-Type: application/json' \
-d '{
"imagemBase64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAAAA..."
}'
# Resposta
{
"mensagem": "Foto de perfil atualizada",
"mediaId": "67g7f2c8j5h6d1e2f3a4b5c6",
"url": "https://arquivos.queroapoiar.com.br/media/2026/9/30/abc123.jpeg",
"thumb": "https://arquivos.queroapoiar.com.br/media/2026/9/30/abc123_thumb.jpeg"
}
Exemplo - foto de capa
curl -X POST 'https://api.queroapoiar.com.br/api/parceiros/candidatos/12345678900/foto-capa' \
-H 'X-API-Key: pt_live_...' \
-H 'Content-Type: application/json' \
-d '{
"imagemBase64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
}'
Erros possíveis
| HTTP | Erro | Causa |
|---|---|---|
| 400 | CAMPO_OBRIGATORIO | Campo imagemBase64 ausente |
| 422 | FORMATO_INVALIDO | Não é data URL (data:image/...;base64,...) |
| 422 | UPLOAD_FALHOU | Imagem corrompida, tipo proibido, ou maior que 4MB |
| 403 | PERMISSAO_NEGADA | Chave não tem candidatos.editar |
Taxas e valores
A plataforma cobra duas categorias de taxa: a taxa de inscrição (paga uma vez pelo candidato) e a taxa por doação (descontada do valor que entra na conta de campanha). Esta seção é informativa para que o parceiro entenda o impacto financeiro no candidato.
Taxa de inscrição
| Cenário | Valor atual | Quem se aplica |
|---|---|---|
| Valor cheio | R$ 299,00 | Padrão se nenhuma regra abaixo se aplicar |
| Promoção | R$ 199,00 | Default atual (promoção ativa). Maioria dos candidatos cai aqui |
| Retornante | R$ 99,00 | Quem teve campanha em 2020/2022/2024 (detectado automaticamente pelo email) |
| Cupom reservado | Variável (pode zerar = gratuidade) | Configurado pelo admin do QueroApoiar via cupom + parceiro envia o código no campo cupom |
| Preço por partido | Variável | Configurado pelo admin do QueroApoiar (negociação comercial). Aplica em todos candidatos do partido |
Pago uma única vez por candidato, antes de a campanha ir ao público. Os valores acima são verificados em runtime contra o valor configurado no admin - mude lá que novos cadastros pegam o novo na próxima request, sem deploy.
Taxas por doação (campanha eleitoral)
| Método | Taxa | Descontada de |
|---|---|---|
| PIX | 1,99% | Valor da doação |
| Cartão de crédito | 3,38% | Valor da doação |
| Boleto | 1,99% | Valor da doação |
Exemplo: doação de R$ 100 via PIX → R$ 1,99 vai pra plataforma, R$ 98,01
entra como saldo da campanha (campo netValue da doação).
Outras taxas
| Item | Valor | Quando aplica |
|---|---|---|
| Saque (transferência) | R$ 10,00 | 2º saque em diante (1º grátis) |
| Antecipação | +3% | Sacar antes do prazo de liberação (PIX D+1, Boleto D+2, Cartão D+30) |
| Reembolso/Estorno | R$ 5,00 | Por estorno solicitado |
| R$ 1,00 por doação | Apenas em doações originadas pelo bot WhatsApp |
Prazo de liberação do dinheiro
| Método | Liberação |
|---|---|
| PIX | D+1 (no dia útil seguinte) |
| Boleto | D+2 |
| Cartão de crédito | D+30 (proteção contra chargeback) |
O prazo conta a partir da confirmação do pagamento (campo paidAt
da doação). Antes desse prazo, o saldo aparece como pendente. Pagar a taxa
de antecipação adianta a liberação.
Valores em homologação (ambiente test): a taxa de inscrição em homologação geralmente está reduzida (R$ 5,00 ou similar) pra acelerar testes. Em produção, valor cheio.
Campos opcionais úteis
genero (M ou F)
Personaliza o tratamento no email de boas-vindas (Bem-vindo
ou Bem-vinda) e em outras comunicações de gênero. Aceita
"M", "F", "Masculino" ou
"Feminino". Recomendado passar: sem o campo,
é inferido do cargo com heurística que erra quando o nome não bate com
o sexo padrão do cargo (ex: cargo "vereador" sempre vira Masculino, mesmo
se for "Maria").
slug (URL pública customizada)
Define a URL onde a campanha do candidato fica acessível:
https://queroapoiar.com.br/{slug}.
- 3 a 50 caracteres, apenas
a-z 0-9 - - Tem que começar com letra ou número
- Se omitido, gerado de
nomeUrna(ounome) com sufixo do partido se ocupado - Se fornecido e já ocupado, retorna
409 SLUG_OCUPADO— parceiro decide qual outro slug usar (não adiciona sufixo silencioso) - Se reservado pelo sistema (
admin,painel,apie similares), retorna422 SLUG_RESERVADO - Se inválido (caracteres proibidos, fora do range), retorna
422 SLUG_INVALIDO
Recomendado: passe slug quando o candidato tiver uma identidade
digital pré-existente (ex: já é conhecido como @joaodasilva) e
você queira que a URL pública combine com isso.
Cargos válidos
O campo cargo aceita exatamente 13 valores. Use o slug
(em snake_case minúsculo). Qualquer outro valor causa
422 CARGO_INVALIDO.
| Slug | Cargo | Esfera |
|---|---|---|
presidente | Presidente da República | Federal |
vice_presidente | Vice-presidente | Federal |
governador | Governador | Estadual |
vice_governador | Vice-governador | Estadual |
senador | Senador | Federal |
suplente_senador | Suplente de senador | Federal |
deputado_federal | Deputado federal | Federal |
deputado_estadual | Deputado estadual | Estadual |
deputado_distrital | Deputado distrital (DF) | Distrital |
prefeito | Prefeito | Municipal |
vice_prefeito | Vice-prefeito | Municipal |
vereador | Vereador | Municipal |
Os campos uf e municipio são sempre
obrigatórios, mesmo para cargos estaduais ou federais. Para
cargos sem município (presidente, governador, senador), use a capital
ou município de domicílio eleitoral.
Partidos
O partido vinculado a uma chave de API é definido pela QueroApoiar no momento da emissão da chave (escolhido a partir da lista canônica abaixo). Você não envia o partido nas requisições de cadastro: ele é inferido automaticamente da chave e aplicado a todos os candidatos criados por ela.
A lista canônica segue o registro oficial do TSE. Caso seu partido tenha cancelado ou recebido novo registro, fale com nosso comercial para revisarmos a chave.
Partidos com registro ativo
| Nome |
|---|
Agir |
Avante |
Cidadania |
DC |
Democrata |
MDB |
Missão |
Mobiliza |
Novo |
PCB |
PCO |
PCdoB |
PDT |
PL |
PP |
PRD |
PRTB |
PSB |
PSD |
PSDB |
PSTU |
PT |
PV |
Podemos |
Psol |
Rede |
Republicanos |
Solidariedade |
UP |
União Brasil |
Os nomes acima são case-sensitive na exibição (ex: Novo, não
NOVO). Em comparações internas o sistema é tolerante a variações
de caixa, mas os valores apresentados ao candidato seguem este formato.
Objeto Candidato
{
"id": "67a3b8e4f1d29c5e88a0d234",
"cpf": "12345678900",
"nome": "Maria Silva Santos",
"nomeUrna": "Maria do Bairro",
"email": "[email protected]",
"telefone": "11999998888",
"cargo": "deputado_federal",
"uf": "SP",
"municipio": "São Paulo",
"numeroCandidato": "12345",
"tituloEleitor": "123456789012",
"partido": "Partido Exemplo",
"urlPublicaCampanha": "https://queroapoiar.com.br/maria-do-bairro",
"status": "aguardando_senha",
"inscricaoPaga": false,
"celularValidado": false,
"emailVerificado": false,
"campanhaPublicada": false,
"totalArrecadado": 0,
"qtdDoacoes": 0,
"criadoEm": "2026-09-20T15:42:18Z",
"criadoViaApi": true
}
Estados possíveis
| Status | Significado |
|---|---|
aguardando_senha | Candidata ainda não definiu a senha pelo e-mail |
aguardando_pagamento | Senha definida, falta pagar a inscrição |
aguardando_ativacao | Pago, falta validar o celular por SMS |
ativa | Campanha pública e recebendo doações |
expirada | 30 dias sem pagamento - conta removida automaticamente |
Objeto Doação
{
"id": "67a3...",
"data": "2026-09-15T14:32:00Z",
"valor": 100.00,
"formaPagamento": "pix",
"status": "paga",
"candidatoCpf": "12345678900",
"doador": {
"nome": "João da Silva",
"cpf": "98765432100",
"email": "[email protected]"
}
}
Changelog
v1.0.0 - Maio de 2026
- Lançamento da API de Parceiros em homologação
- Endpoints para gestão de candidatos
- Endpoints de leitura de doações
- Webhooks assinados com HMAC SHA-256
- Cadastro em lote assíncrono via fila
Suporte
- E-mail: [email protected]
- Status: api.queroapoiar.com.br/api/health
Ao reportar incidentes, inclua o prefixo da chave (16 primeiros caracteres), horário, resposta recebida e volume estimado de chamadas afetadas.