Seagit Forms documentation

Everything a form can ask, everywhere its answers can go, and how to check they arrive.

Start here

Four steps take a form from empty to delivering answers into your own systems. Each links to the guide that covers it in full.

  1. Build it

    Drag fields in, or press / anywhere to open the picker. Give each field a readable ID while you are there — it becomes the key your answers are stored under.

    Field types and validation
  2. Decide who can answer

    Share the link and anyone can respond without an account. Or make the form private, and it returns nothing but a lock screen until the password is entered.

    Password protection and settings
  3. Put it where people already are

    Share the link, or paste two lines of HTML and the form lives on your own site — resizing itself, with no Seagit chrome around it.

    Embed a form on your website
  4. Send answers where you work

    Responses are always saved in Seagit. On top of that, POST each one to your own endpoint or post it into a Slack channel.

    Webhook payload and testing

Building a form

What you can ask, and what you can turn on.

Getting responses out

Both destinations are additional — nothing replaces the copy in Seagit.

WebhooksPOST every submission to a URL of yours, as JSON.The full payload, field by fieldOptional authentication headerTesting with webhook.siteSlackPost submissions into a channel, labelled by question.Creating the app and scopeFinding the channel IDThe invite step everyone missesDiscordPost submissions into a channel with one webhook URL.Creating the webhookWhy the URL is a credentialLong answers and skipped questionsEmail notificationsBe emailed when a response arrives, capped so a busy form cannot flood you.Turning them onThree an hour, and the backlog that followsWhy one has not arrivedTelegramSend every response to a chat, on every plan including Free.Creating the bot with BotFatherFinding the chat ID, minus sign and allWhy a valid bot still says "chat not found"Microsoft TeamsPost submissions into a channel as an Adaptive Card.Workflows, after the connector retirementCopying the whole signed URLWhy "accepted" is not "delivered"Google ChatPost submissions into a space as a card.Creating the webhook in the spaceThe admin policy that hides the menuWhy a short URL fails as 401AirtableTurn every response into a row in one of your bases.Token scopes and the two IDsMatching labels to column namesWhat never arrives, and whyGoogle SheetsTurn every response into a row in one of your spreadsheets.Connecting your Google account and picking a sheetColumn mapping and the header rowRecovering from missing columns and misaligned rowsNotionTurn every response into a page in one of your databases.Connecting the database to the integrationHow column types are matchedReading a 404 that is not about the ID

Planning

Before you build, what this is good at — and what it is not.

Straight to a comparison: vs Google Forms · vs Typeform · vs Jotform · vs SurveyMonkey

What is true of every form

Two guarantees worth knowing before you design around anything else, because they hold no matter which settings or destinations you use.

Your responses are the record

Every submission is stored in Seagit, readable in your dashboard and exportable as CSV for as long as the form exists. No destination can lose you an answer, because none of them is where the answer lives.

Destinations are attempted once

Each gets five seconds, and there are no retries. If your endpoint is down when a response arrives, it will not be re-sent — the response is still safe, but you will need to export rather than wait.

Somewhere else to look

The examples are complete, working forms — a job application, a feedback form and more — if you would rather read a finished thing than a reference. Privacy covers what is stored and for how long.

Common questions

Do respondents need an account?
No. Every form has its own link, and anyone with it can answer without signing up or installing anything. Only the person building the form needs an account, via Google or GitHub.
How do I password-protect a form?
Password protection is a paid feature. Turn on "Make form private" in settings and set a password. Until the correct one is entered the form returns nothing but a lock screen, so its questions cannot be read by guessing the link. Passwords are stored as a salted scrypt hash and are never returned by any API.
Where are responses stored?
Every response is stored in Seagit and stays available in your dashboard and as a CSV export for as long as the form exists. Webhooks and Slack are additional destinations, never a replacement.
What happens if my webhook is down?
The submission still succeeds and the response is still saved. Each destination gets five seconds and there are no retries, so a delivery that fails is not sent again — treat destinations as notifications and Seagit as the record.
How do I test a webhook without building an endpoint?
Open webhook.site, copy the URL it generates, paste it into your form settings, and submit an answer. The request appears there immediately, headers included, so you can confirm both the payload and your authentication header.
Why are my webhook keys named component-1787692637208?
That is the ID generated when a field is created. Hover the field in the editor, click the gear, and set the ID to something like firstName. Do it before collecting answers: existing responses stay under the old key and will not merge with new ones.
How do I put a form on my own website?
Paste two lines of HTML: an empty div carrying your form ID, and a script tag loading embed.js. The script finds the div and injects the form, then resizes it as fields expand so there is never an inner scrollbar. If your host strips scripts, a plain iframe works instead with a fixed height. You do not need to configure anything first — a freshly pasted snippet works immediately.
Can respondents upload files?
On a paid plan, up to 200 KB per file. File fields are not available on the free plan. Attachments are stored inside the response rather than uploaded separately, so larger files are refused with a clear message. For anything bigger, ask for a link using a URL field.
Why is my Slack integration silent?
Almost always because the bot has not been invited to the channel. Slack accepts the message with 200 OK and posts nothing. Send /invite @your-app in the channel, or add the chat:write.public scope.