Access the Tally API with managed OAuth authentication. Manage forms, submissions, workspaces, and webhooks for your Tally account.
Reference
Get Current User
GET /tally/users/meResponse:
{
"id": "w2lBkb",
"firstName": "John",
"lastName": "Doe",
"email": "john@example.com",
"organizationId": "n0Ze8Q",
"subscriptionPlan": "FREE",
"createdAt": "2026-02-07T20:58:54.000Z",
"updatedAt": "2026-02-07T22:50:35.000Z"
}List Forms
GET /tally/formsQuery Parameters:
page- Page number (default: 1)limit- Items per page (default: 50)
Response:
{
"items": [
{
"id": "GxdRaQ",
"name": "Contact Form",
"workspaceId": "3jW9Q1",
"organizationId": "n0Ze8Q",
"status": "PUBLISHED",
"hasDraftBlocks": false,
"numberOfSubmissions": 42,
"createdAt": "2026-02-09T08:36:00.000Z",
"updatedAt": "2026-02-09T08:36:17.000Z",
"isClosed": false
}
],
"page": 1,
"limit": 50,
"total": 1,
"hasMore": false
}Get Form
GET /tally/forms/{formId}Response:
{
"id": "GxdRaQ",
"name": "Contact Form",
"workspaceId": "3jW9Q1",
"status": "PUBLISHED",
"blocks": [
{
"uuid": "11111111-1111-1111-1111-111111111111",
"type": "FORM_TITLE",
"groupUuid": "22222222-2222-2222-2222-222222222222",
"groupType": "FORM_TITLE",
"payload": {}
},
{
"uuid": "33333333-3333-3333-3333-333333333333",
"type": "INPUT_TEXT",
"groupUuid": "44444444-4444-4444-4444-444444444444",
"groupType": "INPUT_TEXT",
"payload": {}
}
],
"settings": null
}Create Form
POST /tally/forms
Content-Type: application/json
{
"status": "DRAFT",
"workspaceId": "3jW9Q1",
"blocks": [
{
"type": "FORM_TITLE",
"uuid": "11111111-1111-1111-1111-111111111111",
"groupUuid": "22222222-2222-2222-2222-222222222222",
"groupType": "FORM_TITLE",
"title": "My Form",
"payload": {}
},
{
"type": "INPUT_TEXT",
"uuid": "33333333-3333-3333-3333-333333333333",
"groupUuid": "44444444-4444-4444-4444-444444444444",
"groupType": "INPUT_TEXT",
"title": "Your name",
"payload": {}
}
]
}Block Types:
FORM_TITLE- Form title blockINPUT_TEXT- Single-line text inputINPUT_EMAIL- Email inputINPUT_NUMBER- Number inputINPUT_PHONE_NUMBER- Phone number inputINPUT_DATE- Date pickerINPUT_TIME- Time pickerINPUT_LINK- URL inputTEXTAREA- Multi-line text inputMULTIPLE_CHOICE- Radio buttonsCHECKBOXES- Checkbox groupDROPDOWN- Dropdown selectLINEAR_SCALE- Scale ratingRATING- Star ratingFILE_UPLOAD- File uploadSIGNATURE- Signature fieldPAYMENT- Payment fieldHIDDEN_FIELDS- Hidden fields
Note: Block uuid and groupUuid must be valid UUIDs (GUIDs).
Update Form
PATCH /tally/forms/{formId}
Content-Type: application/json
{
"name": "Updated Form Name",
"status": "PUBLISHED"
}Status Values:
DRAFT- Form is a draftPUBLISHED- Form is live
Delete Form
DELETE /tally/forms/{formId}Moves the form to trash.
List Questions
GET /tally/forms/{formId}/questionsResponse:
{
"questions": [
{
"uuid": "33333333-3333-3333-3333-333333333333",
"type": "INPUT_TEXT",
"title": "Your name"
}
],
"hasResponses": true
}List Submissions
GET /tally/forms/{formId}/submissionsQuery Parameters:
page- Page number (default: 1)limit- Items per page (default: 50)startDate- Filter by start date (ISO 8601)endDate- Filter by end date (ISO 8601)afterId- Get submissions after this ID (cursor pagination)
Response:
{
"page": 1,
"limit": 50,
"hasMore": false,
"totalNumberOfSubmissionsPerFilter": {
"all": 42,
"completed": 40,
"partial": 2
},
"questions": [
{
"uuid": "33333333-3333-3333-3333-333333333333",
"type": "INPUT_TEXT",
"title": "Your name"
}
],
"submissions": [
{
"id": "sub123",
"respondentId": "resp456",
"formId": "GxdRaQ",
"createdAt": "2026-02-09T10:00:00.000Z",
"isCompleted": true,
"responses": [
{
"questionId": "33333333-3333-3333-3333-333333333333",
"value": "John Doe"
}
]
}
]
}Get Submission
GET /tally/forms/{formId}/submissions/{submissionId}Delete Submission
DELETE /tally/forms/{formId}/submissions/{submissionId}List Workspaces
GET /tally/workspacesResponse:
{
"items": [
{
"id": "3jW9Q1",
"name": "My Workspace",
"createdByUserId": "w2lBkb",
"createdAt": "2026-02-09T08:35:53.000Z",
"updatedAt": "2026-02-09T08:35:53.000Z"
}
],
"page": 1,
"limit": 50,
"total": 1,
"hasMore": false
}Get Workspace
GET /tally/workspaces/{workspaceId}Response:
{
"id": "3jW9Q1",
"name": "My Workspace",
"createdByUserId": "w2lBkb",
"createdAt": "2026-02-09T08:35:53.000Z",
"members": [
{
"id": "w2lBkb",
"firstName": "John",
"lastName": "Doe",
"email": "john@example.com"
}
]
}Create Workspace
POST /tally/workspaces
Content-Type: application/json
{
"name": "New Workspace"
}Note: Creating workspaces requires a Pro subscription.
Update Workspace
PATCH /tally/workspaces/{workspaceId}
Content-Type: application/json
{
"name": "Updated Workspace Name"
}Delete Workspace
DELETE /tally/workspaces/{workspaceId}Moves the workspace and all its forms to trash.
Admin scope. User removal permanently revokes a member's access to the organization. Confirm the user's name, email, and intent with the user before executing DELETE operations.
List Users
GET /tally/organizations/{organizationId}/usersResponse:
[
{
"id": "w2lBkb",
"firstName": "John",
"lastName": "Doe",
"email": "john@example.com",
"createdAt": "2026-02-07T20:58:54.000Z"
}
]Remove User
DELETE /tally/organizations/{organizationId}/users/{userId}Admin scope. Creating invites grants new users access to the organization. Cancelling invites revokes pending access. Confirm the email and intent before executing.
List Invites
GET /tally/organizations/{organizationId}/invitesCreate Invite
POST /tally/organizations/{organizationId}/invites
Content-Type: application/json
{
"email": "newuser@example.com",
"workspaceIds": ["3jW9Q1"]
}Cancel Invite
DELETE /tally/organizations/{organizationId}/invites/{inviteId}Data transmission. Webhooks send form submission data to the specified external URL. Submissions may contain personal or sensitive respondent information. Confirm the destination URL, form, and event types with the user before creating or updating.
List Webhooks
GET /tally/webhooksNote: Listing webhooks may require specific permissions.
Create Webhook
POST /tally/webhooks
Content-Type: application/json
{
"formId": "GxdRaQ",
"url": "https://example.com/webhook",
"eventTypes": ["FORM_RESPONSE"]
}Webhook Event Types:
FORM_RESPONSE- Triggered when a new form response is submitted
Update Webhook
PATCH /tally/webhooks/{webhookId}
Content-Type: application/json
{
"url": "https://new-endpoint.com/webhook"
}Delete Webhook
DELETE /tally/webhooks/{webhookId}List Webhook Events
GET /tally/webhooks/{webhookId}/eventsRetry Webhook Event
POST /tally/webhooks/{webhookId}/events/{eventId}