# formcarry - [Introduction](https://formcarry.com/docs/introduction.md): Formcarry is one inbox for every form you run. - [Quickstart](https://formcarry.com/docs/quickstart.md): Formcarry collects form submissions in three steps. - [What every form needs](https://formcarry.com/docs/what-every-form-needs.md): The endpoint applies the same rules to every submission, whatever sent it. - [How formcarry works](https://formcarry.com/docs/how-it-works.md): Formcarry is built so that a submission is safe the moment it is accepted. - [Set Up Email Notifications for Your Forms](https://formcarry.com/docs/features/email-notifications.md): Configure email notifications and auto-replies for every formcarry form submission. - [Automatic Spam Protection](https://formcarry.com/docs/features/spam-protection.md): formcarry automatically detects and flags spam submissions, keeping your dashboard clean and your submission counts accurate on every plan. - [Thank You Pages and Redirects](https://formcarry.com/docs/features/thank-you-pages.md): Show a branded confirmation after every form submission using formcarry's built-in thank you pages, your own custom URL, or a dynamic redirect. - [Accept and Manage File Uploads](https://formcarry.com/docs/features/file-uploads.md): Enable file uploads in your formcarry forms. Supports multiple files up to 10 MB each. - [Server-Side Field Validation Rules](https://formcarry.com/docs/features/field-validations.md): Enforce validation rules on your form fields in formcarry — require fields, validate email format, URL format, and more. - [Export Form Submissions as CSV or JSON](https://formcarry.com/docs/features/exporting-submissions.md): Download your formcarry form submissions as a CSV or JSON file with optional filters for precise data exports. - [Manage Team Accounts, Members, and Roles](https://formcarry.com/docs/features/team-accounts.md): Invite teammates, assign roles, and manage multiple teams in formcarry. Each team has isolated data, its own subscription, and strict privacy controls. - [Custom HTML Email Templates for Form Notifications](https://formcarry.com/docs/email/custom-email-templates.md): Create custom HTML notification emails in formcarry using dynamic template tags, conditional blocks, fallback values, and field iteration. - [Use Your Own SMTP Server for Formcarry Email Delivery](https://formcarry.com/docs/email/custom-email-servers.md): Configure a custom SMTP server in formcarry to send notification and auto-reply emails from your own email address for white-label delivery. - [Using Gmail as a Custom SMTP Email Server](https://formcarry.com/docs/email/gmail-smtp-setup.md): Connect your Gmail account as a custom SMTP server in formcarry, including app password configuration for secure login. - [Automate Form Submissions with Zapier](https://formcarry.com/docs/integrations/zapier.md): Connect formcarry to 5,000+ apps via Zapier and trigger automated workflows on every new form submission. Set up your first Zap using your API key. - [Protect Your Forms with Google reCAPTCHA v2 and v3](https://formcarry.com/docs/integrations/google-recaptcha.md): Add Google reCAPTCHA v2 checkbox or v3 to your formcarry forms to block spam bots and protect submissions from automated abuse with server-side validation. - [React](https://formcarry.com/docs/frameworks/react.md): React sends a form to formcarry with one fetch call from the component. - [Next.js](https://formcarry.com/docs/frameworks/nextjs.md): Next.js sends a form to formcarry with one fetch call from a client component, in the App Router or the Pages Router. - [Vue](https://formcarry.com/docs/frameworks/vue.md): Vue sends a form to formcarry with one fetch call from the component. - [Svelte](https://formcarry.com/docs/frameworks/svelte.md): Svelte sends a form to formcarry with one fetch call from the component. - [JavaScript](https://formcarry.com/docs/frameworks/javascript.md): Plain JavaScript sends a form to formcarry with fetch and shows the answer without leaving the page. - [jQuery](https://formcarry.com/docs/frameworks/jquery.md): jQuery sends a form to formcarry with one $.ajax call from the submit handler. - [formcarry.js](https://formcarry.com/docs/frameworks/formcarry-js.md): formcarry.js sends a form to formcarry from a plain HTML page with one script tag and one call. - [Webflow](https://formcarry.com/docs/builders/webflow.md): A Webflow form sends its submissions to formcarry through the Form block's Custom action setting, which posts to any URL. - [Framer](https://formcarry.com/docs/builders/framer.md): Framer sends a form's submissions to formcarry through its Webhook destination, posting each one as JSON from its own address. - [WordPress](https://formcarry.com/docs/builders/wordpress.md): A WordPress page sends its form to formcarry from a Custom HTML block, because the block editor has no form block of its own. - [Wix](https://formcarry.com/docs/builders/wix.md): A Wix Forms form sends its submissions to formcarry through a Wix Automation, because Wix's own form element has no action URL setting. - [Squarespace](https://formcarry.com/docs/builders/squarespace.md): A Squarespace page sends a form to formcarry through a code block that holds a plain HTML form. - [Build with AI](https://formcarry.com/docs/ai/overview.md): An AI tool builds the form and connects it to formcarry from one prompt. - [Lovable](https://formcarry.com/docs/ai/lovable.md): Lovable builds a form that sends its submissions to formcarry, and one prompt in its chat does the setup. - [v0](https://formcarry.com/docs/ai/v0.md): v0 connects the form in the Next.js app it generates to formcarry from one prompt. - [Replit](https://formcarry.com/docs/ai/replit.md): Replit Agent connects the form it built to formcarry from one prompt in the Agent chat. - [Claude](https://formcarry.com/docs/ai/claude.md): Claude connects the form in your project to formcarry from one prompt, then sends a test submission and reports what it changed. - [ChatGPT](https://formcarry.com/docs/ai/chatgpt.md): ChatGPT writes a form that sends its submissions to formcarry, in Canvas from a chat or, with Codex, into your project. - [Connect over MCP](https://formcarry.com/docs/connect.md): Formcarry's MCP does everything you would do in the dashboard for your forms and submissions, from the chat of the tool you already use. - [Formcarry API Overview](https://formcarry.com/docs/api/overview.md): Base URL, versioning, authentication, pagination, and error format for the Formcarry v1 REST API at api.formcarry.com. - [API Authentication with Bearer Tokens](https://formcarry.com/docs/api/authentication.md): Generate a Formcarry API key, send it as a Bearer token, understand scopes, and verify credentials with GET /v1/me. - [List forms](https://formcarry.com/docs/api-reference/forms/list-forms.md): Returns the forms your key can access, newest first, each with its full configuration. - [Create a form](https://formcarry.com/docs/api-reference/forms/create-a-form.md): Creates a form and returns it with its endpoint URL. - [Retrieve a form](https://formcarry.com/docs/api-reference/forms/retrieve-a-form.md): Returns the form and its full configuration. - [Delete a form](https://formcarry.com/docs/api-reference/forms/delete-a-form.md): Permanently deletes the form. Its submissions, exports and connected integrations are not deleted. This cannot be undone. - [Update a form](https://formcarry.com/docs/api-reference/forms/update-a-form.md): Changes only what you send. - [Add a recipient](https://formcarry.com/docs/api-reference/forms/add-a-recipient.md): Adds one address to the list that receives the email on every submission and keeps the others. Adding an address that is already on the list changes nothing. To replace the whole list, PATCH `self_email_notification.recipients` instead. The free plan allows one address. - [Remove a recipient](https://formcarry.com/docs/api-reference/forms/remove-a-recipient.md): Removes one address from the list that receives the email on every submission and keeps the others. - [Upload an image](https://formcarry.com/docs/api-reference/forms/upload-an-image.md): Uploads a logo and returns a URL. The upload does not change the form. You must put the response `url` into the corresponding field with a PATCH. - [List a form's fields](https://formcarry.com/docs/api-reference/forms/list-a-forms-fields.md): Returns the field names carried by the newest 2,000 submissions of this form, sorted by most used first. Each field returns with how many of them carry it and when the newest one arrived. Only the first 200 names are shown. - [List webhooks](https://formcarry.com/docs/api-reference/forms/list-webhooks.md): The form's webhooks. One per form for now; the list shape stays when more are allowed. - [Add a webhook](https://formcarry.com/docs/api-reference/forms/add-a-webhook.md): Adds a webhook that receives every submission as a JSON POST. The response carries the signing `secret` once; store it. - [Retrieve a webhook](https://formcarry.com/docs/api-reference/forms/retrieve-a-webhook.md): One webhook, without its secret. - [Delete a webhook](https://formcarry.com/docs/api-reference/forms/delete-a-webhook.md): Removes the webhook, so no later submission is delivered to it. A delivery already queued or being retried can still complete. Adding it again issues a new secret. - [Update a webhook](https://formcarry.com/docs/api-reference/forms/update-a-webhook.md): Changes only what you send: url, enabled, description, events. The secret does not change. - [List deliveries](https://formcarry.com/docs/api-reference/forms/list-deliveries.md): The delivery log of the webhook, sorted by newest first. - [Retrieve a delivery](https://formcarry.com/docs/api-reference/forms/retrieve-a-delivery.md): The latest outcome of one submission's delivery to this webhook. - [Send a submission again](https://formcarry.com/docs/api-reference/forms/send-a-submission-again.md): Queues the submission for the delivery worker again, for this webhook only. - [List email servers](https://formcarry.com/docs/api-reference/forms/list-email-servers.md): The email servers your teams have set up in the dashboard, to use as a form's notification sender: `email_server` is your own SMTP server, `premium_server` a sending domain verified with formcarry. Put the `id` in `self_email_notification.sender.server_id`. Servers are managed in the dashboard. - [List submissions](https://formcarry.com/docs/api-reference/submissions/list-submissions.md): Returns a form's submissions, newest first (unless you ask for the oldest). - [Count submissions](https://formcarry.com/docs/api-reference/submissions/count-submissions.md): Counts the submissions matching the filters instead of returning them, so you can see the size of an answer before you page through it. Takes the same filters as the list. - [Read what happened to submissions](https://formcarry.com/docs/api-reference/submissions/read-what-happened-to-submissions.md): Returns what happened to up to 20 submissions after they arrived: every email, webhook, Zapier zap and integration each one was sent to, along with the latest outcome of each. - [Retrieve a submission](https://formcarry.com/docs/api-reference/submissions/retrieve-a-submission.md): Returns one submission with its fields and uploaded files. - [Delete a submission](https://formcarry.com/docs/api-reference/submissions/delete-a-submission.md): Permanently deletes the submission. Files uploaded with it are not deleted. This cannot be undone. - [Mark a submission as spam](https://formcarry.com/docs/api-reference/submissions/mark-a-submission-as-spam.md): Moves the submission to spam. Spam is left out of lists unless you ask for it with status=spam or status=all. - [Restore a submission from spam](https://formcarry.com/docs/api-reference/submissions/restore-a-submission-from-spam.md): Moves a spam submission back to the inbox. - [Search submissions across forms](https://formcarry.com/docs/api-reference/submissions/search-submissions-across-forms.md): Searches the 25 most recently active forms this key can read and returns the matches with the form each one came from. - [Retrieve the current key or connection](https://formcarry.com/docs/api-reference/me/retrieve-the-current-key-or-connection.md): Returns the key or app connection used for this request: its scopes, and which teams and forms it can access. Handy to check what a credential is allowed to do. - [Check that the API is up](https://formcarry.com/docs/api-reference/health/check-that-the-api-is-up.md): No authentication needed. - [Legacy Formcarry API Overview](https://formcarry.com/docs/api/legacy/overview.md): Base URL, authentication, and endpoint list for the legacy Formcarry API served from formcarry.com/api using the api_key header. - [Legacy API Authentication](https://formcarry.com/docs/api/legacy/authentication.md): Send your Formcarry API key in the api_key header to authenticate legacy API requests against formcarry.com/api. - [Legacy Forms API — Create and Delete Forms](https://formcarry.com/docs/api/legacy/forms.md): Use the legacy Formcarry Forms API to programmatically create forms with configuration options, or permanently delete forms by ID. - [Legacy Submissions API — List and Filter Submissions](https://formcarry.com/docs/api/legacy/submissions.md): Fetch paginated form submissions with the legacy Formcarry Submissions API, filtering by date, spam status, attachments, or field values. ## OpenAPI Specs - [docs-json](https://api.formcarry.com/docs-json) - [openapi-snapshot-2026-09-26](/docs/reference/openapi-snapshot-2026-09-26.json)