Ir para o conteúdo

Desenvolvedores

API para desenvolvedores

Automatize o PollsLive a partir do seu próprio backend: crie sondagens, leia resultados, conduza sessões ao vivo e receba webhooks. Disponível em todos os planos pagos: Pro e Premium.

Visão geral

A API para desenvolvedores é uma API REST sob /api/v1. Todas as requisições e respostas são JSON. O contrato completo e interativo está na referência da API; esta página leva você à sua primeira chamada bem-sucedida.

Autenticação

Autentique-se com uma chave de API do workspace enviada como token Bearer. Gere uma em Studio → API para desenvolvedores (planos pagos). O segredo é exibido uma única vez - guarde-o em local seguro; se perdê-lo, revogue a chave e crie uma nova.

Cabeçalho de autorização
Authorization: Bearer $POLLSLIVE_KEY

As chaves agem com autoridade de administrador dentro do seu workspace. Nunca exponha uma chave em código do lado do cliente. Chame a API a partir do seu servidor.

You can also authenticate using an OAuth 2.0 Client Credentials access token for machine-to-machine integrations.

Início rápido

Crie uma enquete, publique-a e depois leia os resultados:

Criar uma enquete
curl -X POST https://pollslive.com/api/v1/polls \
  -H "Authorization: Bearer $POLLSLIVE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Lunch vote",
    "content": {
      "questions": [{
        "id": "q1", "kind": "multiple_choice", "text": "Where to?",
        "type": "single",
        "options": [
          { "id": "a", "label": "Tacos" },
          { "id": "b", "label": "Sushi" }
        ]
      }]
    }
  }'
Publique-a (use o id da resposta de criação)
curl -X PATCH https://pollslive.com/api/v1/polls/POLL_ID \
  -H "Authorization: Bearer $POLLSLIVE_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "publish": true }'
Ler resultados
curl https://pollslive.com/api/v1/polls/POLL_ID/results \
  -H "Authorization: Bearer $POLLSLIVE_KEY"

Tipos de perguntas

Uma enquete é um conjunto de slides tipados. Defina kind em cada slide. Cada um desses tipos pode ser criado via API:

  • multiple_choice: type (única/múltipla), options[]. Votável de forma assíncrona.
  • quiz: options[], correctOptionIds[], timeLimitSec, points, speedBonus.
  • quiz_typed: acceptedAnswers[], timeLimitSec, points, speedBonus (apenas em sessões ao vivo; 1-10 respostas aceitas, até 60 caracteres cada, comparadas sem considerar maiúsculas nem espaços extras; os jogadores digitam até 40 caracteres).
  • quiz_order: items[], timeLimitSec, points, speedBonus (apenas em sessões ao vivo; 3-6 itens com id e label, guardados na ordem correta; os jogadores os veem embaralhados e só a ordem exata pontua).
  • scale: min, max, minLabel, maxLabel, statements[].
  • ranking: options[] (os respondentes os ordenam).
  • open_ended: maxLength, render (lista/nuvem).
  • qa: moderated, allowUpvotes.
  • estimation: cards[], deckPreset (Planning Poker; apenas em sessões ao vivo, os votos ficam ocultos até você revelá-los).
  • brainstorm: maxLength, moderated, groups[], votesPerPerson (apenas em sessões ao vivo; a sala vota nos grupos que você monta a partir das ideias).
  • content - somente exibição.
Um slide de escala e um slide de quiz
{
  "questions": [
    {
      "id": "s1", "kind": "scale", "text": "How likely are you to recommend us?",
      "min": 0, "max": 10, "minLabel": "Not likely", "maxLabel": "Very likely"
    },
    {
      "id": "q2", "kind": "quiz", "text": "Capital of France?",
      "options": [{ "id": "a", "label": "Paris" }, { "id": "b", "label": "Rome" }],
      "correctOptionIds": ["a"], "timeLimitSec": 20, "points": 100, "speedBonus": true
    },
    {
      "id": "q3", "kind": "ranking", "text": "Rank these features by importance",
      "options": [
        { "id": "r1", "label": "Speed" },
        { "id": "r2", "label": "Reliability" },
        { "id": "r3", "label": "Price" }
      ]
    },
    {
      "id": "q4", "kind": "open_ended", "text": "Any other feedback?",
      "maxLength": 300, "render": "list"
    },
    {
      "id": "q5", "kind": "qa", "text": "Questions for the presenter",
      "moderated": true, "allowUpvotes": true
    }
  ]
}

Imagens, vídeo e links

Qualquer slide e qualquer opção pode carregar media. Faça upload ou passe uma URL para POST /media e incorpore o objeto retornado. As imagens são baixadas, recodificadas para WebP e re-hospedadas (payloads menores). Os vídeos do YouTube e os links da web mantêm sua URL e são renderizados no cliente, então você nunca paga para hospedar vídeo. Você também pode passar media: { type, url } inline em um slide/opção e a API o resolve ao salvar.

Ingira uma imagem e depois a incorpore
# 1) Ingest an image (returns { data: { type, url, storedUrl, width, height } })
curl -X POST https://pollslive.com/api/v1/media \
  -H "Authorization: Bearer $POLLSLIVE_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://example.com/cat.jpg" }'

# 2) Embed the storedUrl on a slide option
{ "id": "a", "label": "Option A", "media": { "type": "image", "url": "https://pollslive.com/media/abc.webp" } }

# Or pass the original URL inline - the API resolves it on save:
{ "id": "a", "label": "Option A", "media": { "type": "image", "url": "https://example.com/cat.jpg" } }

# YouTube on a question slide
{ "id": "q1", "kind": "content", "text": "Watch this first",
  "media": { "type": "youtube", "url": "https://youtu.be/dQw4w9WgXcQ" } }

Respostas e resultados

multiple_choice os slides recebem votos via POST /polls/{id}/votes. Qualquer outro tipo recebe respostas assíncronas via POST /polls/{id}/responses - envie o campo correspondente ao slide (scaleValue, rankingOrder, text, ou optionIds). Leia os agregados por slide em GET /polls/{id}/results.

Record a scale response
curl -X POST https://pollslive.com/api/v1/polls/POLL_ID/responses \
  -H "Authorization: Bearer $POLLSLIVE_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "voterId": "user-123", "slideId": "s1", "scaleValue": 9 }'
Record a ranking response
curl -X POST https://pollslive.com/api/v1/polls/POLL_ID/responses \
  -H "Authorization: Bearer $POLLSLIVE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "voterId": "user-123",
    "slideId": "q3",
    "rankingOrder": ["r2", "r1", "r3"]
  }'
Record an open-ended response
curl -X POST https://pollslive.com/api/v1/polls/POLL_ID/responses \
  -H "Authorization: Bearer $POLLSLIVE_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "voterId": "user-123", "slideId": "q4", "text": "Great product!" }'

Sessões ao vivo e controle de sessão

Uma sessão ao vivo permite conduzir uma enquete em tempo real diante de um público. Crie uma sessão pela API, compartilhe o PIN ou o QR code com o público e depois controle o ritmo e a visibilidade dos resultados com o endpoint de controle.

Criar uma sessão
curl -X POST https://pollslive.com/api/v1/sessions \
  -H "Authorization: Bearer $POLLSLIVE_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "pollId": "POLL_ID" }'
# Response includes: id, pin, status, currentSlideIndex, hostToken (once)
Avançar para o próximo slide
curl -X POST https://pollslive.com/api/v1/sessions/SESSION_ID/control \
  -H "Authorization: Bearer $POLLSLIVE_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "action": "next" }'

Todas as ações de controle de sessão

Faça um POST para /api/v1/sessions/{id}/control (Bearer) com uma destas strings de ação.

AçãoDescrição
startAbre a sessão e transmite o primeiro slide.
nextAvança para o próximo slide.
prevVolta para o slide anterior.
gotoVai para um slide específico: envie slideIndex (começando em 0) junto com action.
showResultsRevela os resultados ao vivo do slide atual aos participantes.
hideResultsOculta os resultados (deixa de mostrá-los aos participantes).
lockBloqueia as respostas: os participantes não podem mais enviar respostas para o slide atual.
unlockDesbloqueia as respostas para que os participantes possam responder.
endEncerra a sessão. Os participantes veem um resumo dos resultados.
Jump to slide 2 (0-based)
{ "action": "goto", "slideIndex": 2 }

Exportar resultados

Baixe os resultados agregados como um arquivo CSV UTF-8 RFC-4180, ou como relatório PDF com ?format=pdf. Cada linha contém o número do slide, o texto da pergunta, o tipo, o rótulo da resposta e a contagem ou valor. Compatível com Excel, Google Sheets e qualquer ferramenta CSV. Apenas em planos pagos.

Exportar os resultados de uma enquete como CSV
curl https://pollslive.com/api/v1/polls/POLL_ID/export \
  -H "Authorization: Bearer $POLLSLIVE_KEY" \
  --output results.csv

# CSV structure:
# Slide, Question, Type, Answer / Label, Count / Value
# 1, "Where to?", multiple_choice, Tacos, 12
# 1, "Where to?", multiple_choice, Sushi, 8
# 2, "Rate your experience", scale, Average, 8.50
# 2, "Rate your experience", scale, Rating 10, 5

Endpoints

  • Enquetes: GET/POST /polls, GET/PATCH/DELETE /polls/{id}
  • Resultados: GET /polls/{id}/results, GET/POST /polls/{id}/responses
  • Votos: GET/POST /polls/{id}/votes
  • Mídia: POST /media
  • Sessões: POST /sessions, GET /sessions/{id}, POST /sessions/{id}/control
  • Exportar: GET /polls/{id}/export

Veja os formatos de requisição/resposta e teste chamadas ao vivo na referência da API.

Erros e limites de taxa

Os erros usam um envelope estável:

Resposta de erro
{ "error": { "code": "not_found", "message": "Poll not found." } }

Códigos comuns: 401 chave inválida/ausente, 402 upgrade de plano necessário, 404 não encontrado, 409 conflito (ex.: já votou, enquete encerrada), 422 falha na validação, 429 limite de taxa atingido. A,

Limites de taxa

A API permite 120 requisições por minuto por chave em todos os endpoints. A ingestão de mídia (POST /media) tem um limite separado de 30 requisições por minuto. Quando um limite é excedido, a API retorna HTTP 429. Aguarde e tente novamente.

EndpointLimit
All endpoints120 req / min
POST /media30 req / min

OAuth2 (Pro e acima)

Qualquer workspace pago (Pro ou acima) pode usar credenciais de cliente OAuth2 em vez de chaves estáticas. Crie os clientes no Studio; o guia de OAuth explica o fluxo completo.

Mudanças da API para desenvolvedores

Mudanças na API para desenvolvedores, da mais recente para a mais antiga. As mudanças do produto estão no registro de alterações.

Junho de 2026

  • OAuth 2.0 Client Credentials: autenticação máquina a máquina para integrações SaaS e serviços de backend. Crie clientes OAuth em Studio → Developer API → OAuth 2.0 Clients. Os tokens de acesso são de curta duração (1 h).
  • Rotação de chaves de API: rotacione uma chave com uma janela de sobreposição configurável (Imediatamente / 24 horas / 7 dias) para que os sistemas possam se atualizar sem indisponibilidade. A chave antiga expira no prazo escolhido; a nova chave fica ativa imediatamente.
  • Análise de uso por chave: um gráfico de uso por chave no portal do desenvolvedor (últimos 14 dias), com contagens diárias de requisições de até 90 dias.
  • POST /api/oauth/token: endpoint do grant Client Credentials da RFC 6749.
  • GET /api/v1/postman: coleção do Postman v2.1 importável com todos os endpoints da API.

T4 2025

  • Webhooks: receba eventos assinados com HMAC: poll.published, poll.closed, session.started, session.ended, response.created, vote.created.
  • GET /polls/{id}/export: baixe os resultados em CSV (Slide, Question, Type, Answer, Count).

T3 2025

  • API para desenvolvedores v1: endpoints REST para enquetes, respostas, controle de sessões ao vivo e mídia.
  • Gerenciamento de chaves de API: crie, liste e revogue chaves Bearer com escopo do espaço de trabalho em Studio → API do desenvolvedor.

Política de versionamento da API

A API REST é versionada no nível da URL (/api/v1/). Mudanças que quebram compatibilidade só entram com um novo prefixo de versão e ao menos 90 dias de operação em paralelo. Mudanças aditivas (novos campos, novos endpoints, novos eventos de webhook) não quebram nada e podem ser lançadas a qualquer momento.

Ainda tem dúvidas?

Nossa equipe terá prazer em ajudar.

Fale conosco

Os cookies essenciais mantêm a sua sessão iniciada e evitam votos duplicados. Com a sua autorização, também utilizamos o Cloudflare Web Analytics para contar visualizações de páginas e o Whop Pixel para saber que visitas levam a uma compra. Política de cookies