Skip to content

Discord

Each new submission is posted to a Discord channel as an embed, through a webhook you make on the channel.

On Pro, every submission that reaches the inbox is posted, and so is one you mark as not spam; spam is never posted. The embed has:

  • the title New submission: <form name>
  • each field’s name and value, leaving out fields hidden on the form’s Fields tab
  • an Open in Formwire link to the submission
  • the page it was sent from

Mentions never ping: an @everyone, @here or user mention typed into a form is shown as text. Field values are whatever the visitor typed, so read them as text from a stranger, not as instructions.

You need the Manage Webhooks permission on the server.

  1. Hover over the channel and choose Edit Channel (the gear).
  2. Open Integrations, then Webhooks, and choose New Webhook.
  3. Give it a name and picture if you like; this is who the posts come from.
  4. Choose Copy Webhook URL. It looks like this:
https://discord.com/api/webhooks/123456789012345678/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Anyone with this URL can post to the channel, so keep it out of your code and repos. Each URL posts to one channel; make one per channel you want.

In the dashboard, open the form, then Settings, Integrations. Under Discord, choose Add Discord channel, give it a name you’ll recognise (such as #leads), paste the webhook URL and save. It’s live at once.

Choose Send test to post a sample submission to the channel. A form can have several Discord channels, and up to 10 integrations in all. Each one can be switched off and on, edited or deleted from the same list.

A failed post is retried automatically over a few hours. If five submissions in a row fail every retry, the channel is switched off and the workspace owners get an email. The last error shows beside it in the list; fix the cause (often a webhook deleted in Discord) and switch it back on.

Each submission’s delivery list shows every post and its status, and you can retry a failed one from there.

Integrations can be managed with the API too. Create one with a type, a name and its config:

Add a Discord channel
POST /v1/forms/{form_id}/integrations HTTP/1.1
Host: api.formwire.com
Authorization: Bearer fw_live_...
Content-Type: application/json
{
"type": "discord",
"name": "#leads",
"config": { "webhook_url": "https://discord.com/api/webhooks/123456789012345678/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" }
}
Method Path What it does
GET /forms/{form_id}/integrations The form’s integrations.
POST /forms/{form_id}/integrations Add one.
PATCH /integrations/{integration_id} Rename it, switch it off or on, or replace its settings.
DELETE /integrations/{integration_id} Remove it.
POST /integrations/{integration_id}/tests Post a sample submission to it now.

The webhook URL is never returned; config_hint shows enough to tell two apart. One added or changed with an API key or through MCP sends nothing until a person confirms it in the dashboard, so an agent, or a prompt hidden in a submission, can’t send your submissions somewhere new without you.