Forms API
GET /api/v1/forms/{id}/submissions
Returns the leads a form created, newest first. Requires the read:forms scope (or *).
GET /api/v1/forms/cmq7form0alk34567890/submissions?since=2026-09-01T00:00:00Z&limit=50 HTTP/1.1
Host: agentlyleads.com
Authorization: Bearer alk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxQuery parameters
| Parameter | Description |
|---|---|
since | ISO 8601 datetime. Only submissions at or after it |
limit | 1 to 500, default 100 |
cursor | The nextCursor from the previous page |
Response: 200
{
"form": { "id": "cmq7form0alk34567890", "name": "Contact us", "...": "..." },
"submissions": [
{
"leadId": "cmq2lead0alk34567891",
"name": "Ann Lee",
"email": "ann@example.com",
"phone": null,
"company": "Acme",
"leadStatus": "NEW",
"pageUrl": "https://example.com/pricing",
"contactId": null,
"submittedAt": "2026-09-27T14:02:00.000Z",
"updatedAt": "2026-09-27T14:02:00.000Z"
}
],
"nextCursor": null
}leadIdis the lead the submission created. Read it with the Leads API.contactIdis set once the lead has been converted to a contact.pageUrlis the page the form was embedded on, when the browser sent it.- When
nextCursoris not null, pass it ascursorto get the next page.
How submissions are counted
Each submission becomes a lead, so this list is the form's leads. Two cases to know about:
- Repeat submissions. When someone submits again with an email that already has a lead, we update that lead instead of creating a second one, so they appear once.
submissionCounton the form still counts both. - Renamed forms. Leads are matched to a form by its name. After a rename, leads captured under the old name are no longer listed here. They are still in your leads, with source
Web form: <old name>.
A form ID from another workspace returns 404 with { "error": "Form not found." }.