What are Data Storages? How to Collect Form Responses
1 What are Data Storages?
A Data Storage is the server-side endpoint that receives and stores form submissions from AMP emails. When a recipient fills out a feedback form, RSVP, survey, or order form inside your AMP email, the form data is sent to your Data Storage endpoint and saved securely.
Think of it as a lightweight database for email form responses — no backend coding required. You create a Data Storage in the dashboard, point your AMP form's action URL at it, and MiN8T handles the rest: receiving the POST request, sanitizing the data, storing it, and optionally forwarding it to a webhook.
Common use cases:
- NPS / CSAT surveys — collect star ratings and feedback comments
- Event RSVPs — gather attendee names and email addresses
- Order confirmations — let recipients confirm or modify orders directly in email
- Lead generation — capture interest and contact details without leaving the inbox
- Quick polls — single-question surveys with instant results
Data Storages are the receiving side of AMP forms. Data Sources are the sending side — they serve data into emails. Both use the same endpoint infrastructure with AMP CORS headers, but they flow in opposite directions.
2 Creating a Data Storage
Step 1: Open Data Storages Dashboard
In the MiN8T sidebar, click "Data Storages". This opens the Data Storages dashboard at /data-storages.
Step 2: Click "New Storage"
Click the "+ New Storage" button. A creation modal opens.
Step 3: Fill in Details
- Name (required) — e.g., "Q2 NPS Survey", "Webinar RSVPs"
- Description (optional) — a note for your team about what this storage collects
- Webhook URL (optional) — a URL to forward submissions to (Zapier, Make, or your own API)
- Enable Webhook — toggle on to activate forwarding
Step 4: Save
Click "Create". MiN8T generates a unique endpoint URL with a 64-character cryptographic hash. The storage appears in your dashboard card list showing:
- Storage name and description
- Active/Inactive status badge
- Response count
- Full endpoint URL with copy button
- Last response timestamp
Data Storages are managed at the account level — not per template. One storage can receive submissions from multiple emails and templates.
3 The Submission Endpoint
Every Data Storage gets a unique public endpoint:
POST https://api.min8t.com/emailformdata/v1/storage/{hash}/{name}
In development:
POST http://localhost:3001/emailformdata/v1/storage/{hash}/{name}
The {hash} is a 64-character hex string (256 bits of entropy) that acts as the authentication. The {name} is a URL-safe slug of your storage name.
Request Format
The endpoint accepts both application/json and application/x-www-form-urlencoded (the default for AMP form submissions):
POST /emailformdata/v1/storage/a1b2c3...f0/q2-nps-survey
Content-Type: application/x-www-form-urlencoded
rating=5&comment=Great+product&email=user@example.com
Response
{ "success": true }
AMP CORS Headers
The endpoint automatically handles AMP CORS requirements:
Access-Control-Allow-Origin— echoes the requesting email client originAMP-Access-Control-Allow-Source-Origin— echoes the sender email addressAccess-Control-Expose-Headers— exposes the AMP source origin header
Allowed origins: Gmail, Yahoo, Mail.ru, AOL, and FairEmail. A CORS preflight (OPTIONS) handler is also provided.
Security & Limits
- Maximum 50 fields per submission
- Maximum 10KB per field value
- HTML tags,
<script>, and event handlers are automatically stripped (XSS protection) - Metadata is recorded with each submission: origin, user agent, IP address, and timestamp
- Inactive storages return 404 — deactivate a storage to stop accepting submissions without deleting it
4 Connecting an AMP Form
To collect responses from an AMP email, set your <amp-form> block's action URL to the Data Storage endpoint.
In the MiN8T Editor
- Drag an AMP Form block from the block palette into your template.
- Add input fields: text, email, tel, select dropdown, textarea, or hidden fields.
- In the form's property panel, set the Action URL to your Data Storage endpoint URL (copy it from the dashboard).
- Configure the success and error response templates — these are shown to the recipient after submission.
- Style the submit button using the button properties panel.
Available Input Types
- Text — single-line text input
- Email — email address with browser validation
- Tel — phone number input
- Select — dropdown with predefined options
- Textarea — multi-line text
- Hidden — invisible fields for tracking data (campaign ID, template version, etc.)
Each field's name attribute becomes the key in the stored response. For example, an input with name="rating" stores as {"rating": "5"}.
The Generated AMP HTML
When exported, MiN8T generates proper <amp-form> markup:
<form method="post"
action-xhr="https://api.min8t.com/emailformdata/v1/storage/{hash}/{name}">
<input type="email" name="email" placeholder="Your email" required />
<input type="text" name="feedback" placeholder="Your feedback" />
<button type="submit">Submit</button>
<div submit-success>
<template type="amp-mustache">
Thank you for your feedback!
</template>
</div>
<div submit-error>
<template type="amp-mustache">
Something went wrong. Please try again.
</template>
</div>
</form>
AMP forms use action-xhr (not action). The form submission is handled via XHR within the email client — the recipient never leaves their inbox. MiN8T sets this automatically when you export.
5 Viewing Responses
All form submissions are stored and accessible in the Data Storages dashboard.
Response Table
Click on any Data Storage card to expand the responses viewer. Each response row shows:
- Response ID — unique identifier
- Field values — all submitted fields displayed as key-value pairs
- Timestamp — when the submission was received
Responses are paginated (20 per page) and sorted by most recent first. The card header shows the total response count and the time of the last submission.
Deleting Responses
Individual responses can be deleted from the response table. The storage's response count automatically decrements.
Submission metadata (origin email client, IP address, user agent, timestamp) is stored alongside the form fields. This helps with spam detection and analytics.
6 Exporting Data
Export all responses from a Data Storage in two formats:
JSON Export
Downloads a JSON file with all responses, each containing the response ID, fields object, and timestamp. Useful for programmatic processing or importing into other tools.
[
{
"id": "clx7abc...",
"fields": {
"rating": "5",
"comment": "Great product",
"email": "user@example.com"
},
"createdAt": "2026-04-12T14:30:00.000Z"
}
]
CSV Export
Downloads a CSV file with columns for ID, timestamp, and all unique field names across all responses. The export automatically discovers all field names used across submissions (since different form versions may have different fields) and creates a column for each.
CSV values containing commas, quotes, or newlines are properly escaped. The file is ready to import into Excel, Google Sheets, or any data tool.
Export is unlimited — all responses are included regardless of how many there are. The export request has a 30-second timeout to handle large datasets.
7 Webhook Forwarding
For real-time processing, configure a webhook URL on your Data Storage. Every time a form submission is received, MiN8T forwards it to your webhook as a POST request.
Webhook Payload
POST https://hooks.zapier.com/hooks/catch/123/abc/
Content-Type: application/json
{
"storage_id": "clx7abc...",
"storage_name": "Q2 NPS Survey",
"timestamp": "2026-04-12T14:30:00.000Z",
"fields": {
"rating": "5",
"comment": "Great product",
"email": "user@example.com"
}
}
Integration Examples
- Zapier — trigger a Zap to create a CRM contact, add a row to Google Sheets, or send a Slack notification
- Make (Integromat) — build multi-step automations triggered by form submissions
- Custom API — forward to your own backend for processing, validation, or database storage
- Slack — post submissions directly to a Slack channel via an incoming webhook
Webhook Behavior
- Webhooks are fire-and-forget — failures don't block the form submission response
- If the webhook URL is unreachable or returns an error, the submission is still stored in MiN8T
- Webhook failures are logged but not retried automatically
- You can enable or disable the webhook at any time without losing stored data
Webhook URLs must be HTTPS in production. The webhook receives the raw form fields — if you need to validate or transform the data, do it in your receiving endpoint.
8 Next Steps
Now that you understand Data Storages, explore these related features:
- What are Data Sources? — serve data into AMP emails (the reverse of Data Storages)
- What are Smart Elements? — auto-populate email blocks with external data
- How to Test and Export AMP Emails — test your AMP forms in Gmail before sending
- AMP Email Whitelisting Guide — get approved to send AMP emails with forms
Last updated: April 2026. All details verified against MiN8T's actual codebase implementation.