Read API
The read API gives you programmatic, read-only access to your forms and submissions. Use it to build your own dashboards, sync leads into other systems, or archive data.
Authentication
Section titled “Authentication”Create an API key in the dashboard (Settings → API keys) and send it as a Bearer token:
Authorization: Bearer fw_key_…Keys are read-only by design: any request other than GET is rejected, so a leaked key can never modify or delete data. Keys are revocable and each key’s last use is visible in the dashboard.
Endpoints
Section titled “Endpoints”Base URL: https://api.formwire.io
| Endpoint | Returns |
|---|---|
GET /v1/forms | All your forms |
GET /v1/forms/:id | One form |
GET /v1/forms/:id/submissions | Submissions for a form (see filters below) |
GET /v1/stats | Submission counts over time |
GET /v1/usage | Current-period usage against your plan |
Listing submissions
Section titled “Listing submissions”GET /v1/forms/:id/submissions?limit=50&offset=0&since=2026-07-01&until=2026-07-08&spam=false| Query param | Default | Notes |
|---|---|---|
limit | server default | Page size |
offset | 0 | Skip N rows |
since / until | — | ISO dates; bound the created-at range |
spam | false | true returns the spam tab instead |
Response:
{ "submissions": [ { "id": "sub_…", "accessKeyId": "a1b2c3…", "createdAt": "2026-07-08T09:14:02.000Z", "isSpam": false, } ], "pagination": { "limit": 50, "offset": 0, "total": 132 }}Results are ordered newest-first and bounded by your plan’s retention window (30 days free, 1 year Pro) — rows older than retention are never returned.
Example
Section titled “Example”const res = await fetch( "https://api.formwire.io/v1/forms/YOUR-FORM-ID/submissions?limit=100", { headers: { Authorization: `Bearer ${process.env.FORMWIRE_API_KEY}` } });const { submissions, pagination } = await res.json();A 401 {"error": "invalid api key"} means the key was revoked or mistyped.