QueroApoiar API de Parceiros

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.

Versão
1.0
Status
Em homologação
Base URL
api.queroapoiar.com.br
Suporte
[email protected]

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çãoEndpointPermissão necessária
Cadastrar candidato individualPOST /candidatoscandidatos.criar
Cadastrar em lotePOST /candidatos/lotecandidatos.criar
Atualizar dadosPATCH /candidatos/{cpf}candidatos.editar
Listar candidatosGET /candidatoscandidatos.ler
Consultar candidatoGET /candidatos/{cpf}candidatos.ler
Acompanhar doaçõesGET /doacoesdoacoes.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çãoEndpointUso típico
Listar candidatosGET /candidatosConferir quem está ativo
Consultar candidatoGET /candidatos/{cpf}Detalhes para FCC e NF
Doações de um candidatoGET /candidatos/{cpf}/doacoesEscrituração mensal
Todas as doaçõesGET /doacoesConciliação por período
Resumo agregadoGET /doacoes/resumoRelató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) ou test (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:

  1. Pré-cadastro - API cria conta, perfil eleitoral e campanha em estado pendente.
  2. E-mail - candidato recebe link para definir a senha.
  3. Primeiro acesso - ao clicar, define a senha e entra no painel.
  4. Pagamento - candidato paga a inscrição (responsabilidade dele).
  5. SMS - validação do celular obrigatória por regulação.
  6. 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ãoO que liberaPadrão para partidoPadrão para contador
candidatos.criarPOST /candidatos e /loteSimNão
candidatos.editarPATCH /candidatos/{cpf}SimNão
candidatos.lerGET /candidatos e detalhesSimSim
doacoes.lerGET /doacoes e /resumoSimSim

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

LimitePadrãoConfigurável
Requisições por minuto (por chave)600Sim, por contrato
Requisições por minuto (por IP)1.200Não
Candidatos por chamada de lote500Sim, por contrato
Quota diária de candidatos (por chave)5.000/diaSim, 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

typeQuando dispara
donacao.confirmadaDoação confirmada pelo gateway (paid=true, status=authorized)
donacao.canceladaDoação cancelada/recusada pelo gateway
donacao.estornadaEstorno (refund/chargeback) processado
candidatos_lote.concluidoJob 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

  1. Reconstrua a mensagem como ${'${X-QA-Timestamp}'}.${'${rawBody}'} — use exatamente os bytes recebidos, sem reparsear o JSON.
  2. Calcule HMAC-SHA256(webhookSecret, mensagem) em hexadecimal.
  3. Compare em tempo constante com o valor de v1 do header.
  4. 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 id do envelope (evt_…) pra deduplicar — receber 2x o mesmo id deve 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.status como source of truth, não o type.

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

StatusCódigoQuando ocorre
400CAMPO_OBRIGATORIOCampo obrigatório ausente
400STATUS_INVALIDOFiltro status fora do enum aceito
400DATA_INVALIDAdesde/ate mal formatado
400WEBHOOK_INVALIDOwebhookUrl da chave aponta pra IP privado/loopback
400ID_OBRIGATORIOid do job ausente
401CHAVE_AUSENTECabeçalho X-API-Key não enviado
401CHAVE_INVALIDAChave inválida ou revogada
403PERMISSAO_NEGADAChave sem permissão para o recurso
403IP_NAO_AUTORIZADOIP fora da whitelist
403OWNERSHIP_INVALIDAVínculo entre candidato e partido não confirmado
403CUPOM_PERMISSAO_NEGADA / CUPOM_NAO_PERMITIDOCupom não autorizado para a chave (ver Cupons)
404CANDIDATO_NAO_ENCONTRADOCPF não pertence ao seu partido
404JOB_NAO_ENCONTRADOJob inexistente ou expirado (TTL 7d sucesso/30d falha)
404ROTA_NAO_ENCONTRADAMétodo/path não mapeado em /api/parceiros/*
409CADASTRO_DUPLICADOCPF ou email já cadastrado (mensagem unificada anti-enumeração)
409SLUG_OCUPADOSlug informado já está em uso por outra campanha
413LOTE_EXCEDE_LIMITEMais de 500 candidatos no lote
415TIPO_NAO_SUPORTADOContent-Type diferente de application/json em POST/PATCH
422CPF_INVALIDOCPF com dígitos verificadores inválidos
422EMAIL_INVALIDOE-mail mal formatado
422EMAIL_DOMINIO_BLOQUEADODomínio descartável (mailinator, 10minutemail etc.)
422TELEFONE_INVALIDONão tem 10/11 dígitos ou DDD fora de 11–99
422NOME_INVALIDO / NOME_URNA_INVALIDONome fora de 3–120 chars / nome de urna > 30 chars
422CARGO_INVALIDOCargo fora dos 13 valores aceitos
422UF_INVALIDASigla não está na lista IBGE
422MUNICIPIO_INVALIDOMunicípio fora de 2–80 chars
422NUMERO_CANDIDATO_INVALIDONúmero não bate ^\d{2,5}$
422TITULO_ELEITOR_INVALIDOTítulo não tem exatamente 12 dígitos
422DATA_NASCIMENTO_INVALIDAData inválida ou ano fora de 1900–hoje
422SLUG_INVALIDO / SLUG_RESERVADOSlug fora do regex ou na lista de reservados
422FORMATO_INVALIDO / UPLOAD_FALHOUUpload de imagem fora de data URL ou conteúdo corrompido
429RATE_LIMIT_EXCEDIDOJanela de requisições por minuto excedida
429QUOTA_DIARIA_EXCEDIDA5.000 candidatos/dia por chave atingidos (reseta 00h UTC)
500ERRO_INTERNOErro inesperado — tente novamente, reportado via Sentry
503FILA_INDISPONIVELSistema 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étodoCaminhoDescrição
POST/api/parceiros/candidatosCriar candidato individual
POST/api/parceiros/candidatos/loteCriar candidatos em lote
GET/api/parceiros/candidatosListar candidatos do partido
GET/api/parceiros/candidatos/{cpf}Consultar candidato
PATCH/api/parceiros/candidatos/{cpf}Atualizar dados
GET/api/parceiros/candidatos/{cpf}/doacoesDoações recebidas

Doações

MétodoCaminhoDescrição
GET/api/parceiros/doacoesTodas as doações do partido
GET/api/parceiros/doacoes/resumoResumo agregado

Documentos fiscais

MétodoCaminhoDescrição
GET/api/parceiros/candidatos/{cpf}/fccsLista FCCs (ATSEFCC TSE) com URL de download
GET/api/parceiros/candidatos/{cpf}/notas-fiscaisLista NFs (inscrição + saques) com pdfUrl

Imagens

MétodoCaminhoDescrição
POST/api/parceiros/candidatos/{cpf}/foto-perfilAtualizar foto de perfil
POST/api/parceiros/candidatos/{cpf}/foto-capaAtualizar foto de capa da campanha

Jobs assíncronos

MétodoCaminhoDescriçã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

  1. Admin do QueroApoiar cria o cupom no painel administrativo (ex: MISSAO-VIP-2026 com gratuidade total ou desconto fixo).
  2. Admin habilita a chave do partido com permissão cupons.aplicar e adiciona o cupom em cuponsPermitidos (whitelist).
  3. Partido envia POST /candidatos com o campo opcional cupom: "MISSAO-VIP-2026".
  4. API valida o cupom (existe, ativo, não esgotado, dentro da validade, tipo "inscrição" ou "ambos") e o associa ao candidato.
  5. 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

HTTPErroCausa
403CUPOM_PERMISSAO_NEGADAChave não tem permissoes.cupons.aplicar
403CUPOM_NAO_PERMITIDOCupom não está na cuponsPermitidos da chave
422CUPOM_INEXISTENTECupom não existe
422CUPOM_INATIVOCupom existe mas active: false
422CUPOM_ESGOTADOusedCount >= maxUses
422CUPOM_AINDA_NAO_VALIDOnow < validFrom
422CUPOM_EXPIRADOnow > validUntil
422CUPOM_TIPO_INVALIDOCupom 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

ItemValor
Formato aceito no uploadjpg, jpeg, png, webp, gif, bmp, svg
Tamanho máximo do upload~3 MB
Resolução recomendadaPerfil: 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

HTTPErroCausa
400CAMPO_OBRIGATORIOCampo imagemBase64 ausente
422FORMATO_INVALIDONão é data URL (data:image/...;base64,...)
422UPLOAD_FALHOUImagem corrompida, tipo proibido, ou maior que 4MB
403PERMISSAO_NEGADAChave não tem candidatos.editar

Taxas e valores

Importante: taxas e valores são fixados pela QueroApoiar. A API não aceita parâmetros de taxa, valor de inscrição, desconto livre ou similares. O parceiro não pode mudar valores no cadastro do candidato. Qualquer ajuste comercial (preço especial, gratuidade, desconto) é configurado pelo admin do QueroApoiar via cupom reservado ou preço por partido.

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árioValor atualQuem se aplica
Valor cheioR$ 299,00Padrão se nenhuma regra abaixo se aplicar
PromoçãoR$ 199,00Default atual (promoção ativa). Maioria dos candidatos cai aqui
RetornanteR$ 99,00Quem teve campanha em 2020/2022/2024 (detectado automaticamente pelo email)
Cupom reservadoVariável (pode zerar = gratuidade)Configurado pelo admin do QueroApoiar via cupom + parceiro envia o código no campo cupom
Preço por partidoVariávelConfigurado 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étodoTaxaDescontada de
PIX1,99%Valor da doação
Cartão de crédito3,38%Valor da doação
Boleto1,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

ItemValorQuando aplica
Saque (transferência)R$ 10,002º 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/EstornoR$ 5,00Por estorno solicitado
WhatsAppR$ 1,00 por doaçãoApenas em doações originadas pelo bot WhatsApp

Prazo de liberação do dinheiro

MétodoLiberação
PIXD+1 (no dia útil seguinte)
BoletoD+2
Cartão de créditoD+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 (ou nome) 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, api e similares), retorna 422 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.

SlugCargoEsfera
presidentePresidente da RepúblicaFederal
vice_presidenteVice-presidenteFederal
governadorGovernadorEstadual
vice_governadorVice-governadorEstadual
senadorSenadorFederal
suplente_senadorSuplente de senadorFederal
deputado_federalDeputado federalFederal
deputado_estadualDeputado estadualEstadual
deputado_distritalDeputado distrital (DF)Distrital
prefeitoPrefeitoMunicipal
vice_prefeitoVice-prefeitoMunicipal
vereadorVereadorMunicipal

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

StatusSignificado
aguardando_senhaCandidata ainda não definiu a senha pelo e-mail
aguardando_pagamentoSenha definida, falta pagar a inscrição
aguardando_ativacaoPago, falta validar o celular por SMS
ativaCampanha pública e recebendo doações
expirada30 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

Ao reportar incidentes, inclua o prefixo da chave (16 primeiros caracteres), horário, resposta recebida e volume estimado de chamadas afetadas.