Articles appear as you type. Choose Ask AI for an answer from the published help.

Webhooks

In this article

Set up and test a webhook

Send board activity to Make, n8n, Zapier, or your own server.

  1. Create a webhook trigger in the receiving tool and copy its public https:// URL.
  2. In featurevote, open Settings → Integrations and click Set up next to Webhooks.
  3. Paste the URL, select the events you want, and click Save webhook.
  4. Choose an event next to Send test and send a test for every event you use so your tool can learn its fields.

The Webhooks row shows the last delivery and its status code.

Connect your receiving tool

Make → Google Sheets

Create a scenario with Webhooks → Custom webhook and copy its address. Save it in featurevote with New request selected, then send a test. In Make, choose Redetermine data structure if prompted and add Google Sheets → Add a row. Map columns to fields such as data.request.title and data.request.url.

n8n

Start with a Webhook node using POST and its production URL. Send a featurevote test while the node is listening.

Zapier

Use Webhooks by Zapier → Catch Hook and paste its link into featurevote. This requires a paid Zapier plan.

Your own server

Accept a JSON POST, verify its signature, and return any 2xx status within 10 seconds.

Available events

EventWhen it is sent
request.createdA request is posted on the board or in Discord, added in featurevote, or created from a message. Requests awaiting approval are included with status pending_approval.
comment.createdA visitor or team member comments on a request in featurevote.
request.vote_milestoneA request reaches 5, 10, 25, 50, or 100 voters.
request.shippedYou mark a request done and choose to notify its voters.
message.receivedSomeone sends your team a private message from the board.

Changes made through an AI client (MCP) do not generate webhook events yet.

Understand message fields

Messages share an envelope with id, type, timestamp, and data. Request events share the same request object, so mappings can be reused.

Additional event fields in data are:

  • comment.created: comment, containing id, text, internal, and author.
  • request.vote_milestone: milestone, the vote count reached.
  • message.received: message, containing id, text, and author, instead of request.

votes counts people rather than weighted votes. Missing author names and emails are null. Text fields are truncated at 5,000 characters. Messages can include submitted names and email addresses, so send them only to a tool you trust with that information.

Verify webhook signatures

Messages use Standard Webhooks signatures. Use one of its libraries to verify incoming messages.

Each request includes:

  • webhook-id: the message ID; use it to skip messages already handled.
  • webhook-timestamp: a timestamp in seconds.
  • webhook-signature: a signature in the form v1,<signature>.

Retrieve your signing secret with Copy signing secret on the webhook card. Removing the webhook and adding it again generates a new secret.

Delivery limits and failures

Each event is sent once. Failed messages are not retried; check the webhook card for the failure reason. The receiving tool must answer within 10 seconds. Redirects are not followed, and the destination must be a public https:// URL.