Skip to content

Answers go where your team works.

Send every response to Google Sheets, Slack, Discord or your own endpoint. Embed forms on your site, print QR codes that count scans, and let AI agents work with your forms over MCP.

Workshop registration New

Response #128 · 10:53

Full name
Rahul D.
Pass
Full event
Dietary needs
Jain
  • Google SheetsRow 5 added
  • Webhook200 · signed
  • Slack#registrations
  • DiscordMessage sent
  • Email alert2 owners notified
  • MCP agentget_response_stats

Where responses go

Every response, delivered.

Google Sheets

A row for every response

Paste one Apps Script into your sheet and connect it. Each response appends a row with a column per question; new questions add columns, and retries never duplicate a row.

Fig 0.1
RegistrationsSheet1
Submitted
Name
Pass
2
10:42
Priya S.
Full event
3
10:47
Arjun M.
Day pass
4
10:51
Neha K.
Team (4)
5
10:53
Rahul D.
Full event

Webhooks

Signed JSON to any endpoint

Each completed response is POSTed as JSON and signed with HMAC-SHA256 over the timestamp and body. Failed deliveries retry with backoff, up to five attempts.

Fig 0.2
POST https://example.com/hooks/soyl200 OK

content-type: application/json

x-webhook-id: 9b1f0c52-…-4e7a

x-webhook-timestamp: 1792658192000

x-signature-256: sha256=9f2c41…e71a

{
  "type": "form.submission.completed",
  "createdAt": "2026-10-22T10:53:12.004Z",
  "data": {
    "formId": "5d0c…", "submissionId": "a71e…",
    "answers": { "t_evt_ticket": { "type": "single_choice", "value": "t_evt_ticket_full" } },
    "fields": [{ "label": "Which pass do you want?", "value": "Full event" }]
  }
}

Chat

Readable messages in Slack and Discord

Paste a Slack or Discord incoming-webhook URL and SOYL sends a tidy message with the answers and a link to the response, instead of raw JSON.

Fig 0.3
registrationsSlack

New response: Workshop registration

Which pass do you want?
Full event
Any dietary requirements?
Jain
View response
#form-responsesDiscord

New response: Workshop registration

Which pass do you want?
Full event
Any dietary requirements?
Jain
View response

Verify a webhook

Ten lines to trust a request

The signature covers the timestamp and the exact body, so a replayed or edited request fails. Use the secret shown once when you add the webhook.

const { createHmac, timingSafeEqual } = require("node:crypto");

// rawBody: the request body exactly as received (a string)
function isFromSoyl(secret, rawBody, headers) {
  const timestamp = headers["x-webhook-timestamp"];
  const expected = "sha256=" + createHmac("sha256", secret)
    .update(`${timestamp}.${rawBody}`)
    .digest("hex");
  const given = headers["x-signature-256"] || "";
  const fresh = Math.abs(Date.now() - Number(timestamp)) < 5 * 60 * 1000;
  return fresh && given.length === expected.length &&
    timingSafeEqual(Buffer.from(given), Buffer.from(expected));
}

Embed

Your form, on your site.

One script tag. Inline embeds resize to fit; popups and sliders open over your page in the form’s colours. Pass hidden fields with data-soyl-hidden.

  • InlineSits in your page and resizes to fit each question, or at a fixed height.
  • PopupOpens over the page from any button, in the form’s own colours.
  • SliderSlides in from the right edge; great for feedback tabs.
<div data-soyl-form="your-form" data-soyl-title="Workshop registration"></div>
<script src="https://forms.soylai.com/embed.js" async></script>

QR codes

Print it. Count it.

Download any form’s QR code as PNG or SVG for posters, tables and counters. Scans are tagged, so results show how many visits and completions came from the code.

128 scans

Traffic sources

SourceVisitsDoneRate
QR code1289776%
instagram845161%
direct614472%

Illustrative numbers. Tag any link with ?src=name to track it.

The Android app’s scanner opens SOYL forms straight from a code.

Built, switching on soon

Next to land.

These are built and waiting on setup with the platforms they connect to. They're off until then.

  • WhatsApp alertsA WhatsApp message when new responses come in: the form and a count, never the answers.Coming soon
  • Google Sheets, one clickConnect your Google account and every response syncs to a new sheet, no script needed.Coming soon
  • Zapier and MakeNew-response triggers and actions for thousands of apps, built on the public API.Coming soon
  • Android appYour forms, live results and a QR scanner on your phone.Coming to Google Play

API & MCP

Your AI agent can create forms.

Connect Claude, ChatGPT or any MCP client with a workspace API key. Agents can list your forms, read a schema, draft a new form in your brand, fetch a share QR and read response stats.

  • list_forms
  • get_form_schema
  • draft_form
  • get_brand_kit
  • get_share_link_qr
  • get_response_stats
# Draft a form in your brand (costs 1 AI credit; never auto-published)
curl https://forms.soylai.com/api/mcp \
  -H "Authorization: Bearer $SOYL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0", "id": 1, "method": "tools/call",
    "params": {
      "name": "draft_form",
      "arguments": {
        "description": "Design workshop registration in Pune, ₹499 a seat",
        "length": "short"
      }
    }
  }'

Building a website or backend integration? Use the REST API and its documentation.

  • Workspace API keysOwners and admins create and revoke keys in-app. The full key is shown once; only a hash is stored.
  • Drafts never publishdraft_form returns a draft for you to review. Nothing is saved or published on its own.
  • Rate-limitedEach key gets a fair per-minute budget, so a runaway agent can’t flood your workspace.

FAQ

Questions about integrations

Something else? Email support@soylai.com.

How do I connect Google Sheets?

Open your form’s integrations, copy the short Apps Script SOYL gives you into your sheet, deploy it as a web app and paste its URL back. Every new response then appends a row with a column per question.

How do I verify a webhook really came from SOYL?

Each request carries x-webhook-timestamp and x-signature-256. Recompute HMAC-SHA256 over “timestamp.body” with the webhook’s secret, compare it in constant time, and reject anything older than five minutes.

How many webhooks can a form have?

1 on Free, 5 on Starter and 20 on Pro. Google Sheets, Slack and Discord connections each count as one.

Is there an API?

Yes, on every plan. A REST API at /api/v1 lists forms, reads and syncs responses and submits responses from your own server, with an OpenAPI spec and full documentation on the Developers page. AI agents can also use the MCP server at /api/mcp. Both authenticate with a workspace API key.

Can I embed a form on my website?

Yes, on every plan. Add one script tag and a div or button: inline embeds resize to fit, popups and sliders open over your page, and hidden fields can be passed through.

Plug SOYL into your stack.

Sheets, webhooks, embeds and QR codes on every plan. Start free, no card needed.

Free forever · No card · Pricing in ₹