MiN8T All Insights

What are Data Storages? How to Collect Form Responses

M
MiN8T Team
Email Engineering

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:

i

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

  1. Name (required) — e.g., "Q2 NPS Survey", "Webinar RSVPs"
  2. Description (optional) — a note for your team about what this storage collects
  3. Webhook URL (optional) — a URL to forward submissions to (Zapier, Make, or your own API)
  4. 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:

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:

Allowed origins: Gmail, Yahoo, Mail.ru, AOL, and FairEmail. A CORS preflight (OPTIONS) handler is also provided.

Security & Limits

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

  1. Drag an AMP Form block from the block palette into your template.
  2. Add input fields: text, email, tel, select dropdown, textarea, or hidden fields.
  3. In the form's property panel, set the Action URL to your Data Storage endpoint URL (copy it from the dashboard).
  4. Configure the success and error response templates — these are shown to the recipient after submission.
  5. Style the submit button using the button properties panel.

Available Input Types

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:

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.

i

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

Webhook Behavior

!

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:

Last updated: April 2026. All details verified against MiN8T's actual codebase implementation.