Skip to main content
We try to version the API using dates to maintain a highly backwards compatible API. You can specify a version using the tally-version header, e.g. tally-version: 2025-02-01.
v0.14.0

Breaking changes

  • PATCH /forms/{formId} with status: PUBLISHED and no blocks is rejected with a 400 error when the form is not published yet and has no blocks. Previously the form went live with no blocks.

Changed endpoints

  • PATCH /forms/{formId}
    status: PUBLISHED without blocks publishes the form’s saved draft blocks. Previously the drafts stayed hidden and the form went live with its old blocks, or none.
v0.13.0

Changed endpoints

  • GET /forms/{formId}/submissions
    Each submission includes locale, the language code the respondent filled the form in, or null when it is not known
  • GET /forms/{formId}/submissions/{submissionId}
    The response includes locale, or null when it is not known
v0.12.0

Breaking changes

  • PATCH /webhooks/{webhookId} no longer accepts formId. The field is ignored, so a webhook remains associated with its current form. Previously the webhook was moved to that form. To send another form’s submissions to the same URL, create a webhook for that form with POST /webhooks.
v0.11.0

Breaking changes

  • An API key now only works while its creator is a member of the organization the key was created in. When that user leaves or is removed, requests with the key are rejected with a 401 error. Previously the key kept working in the user’s new organization. Create a new API key in the new organization instead.
v0.10.0

Breaking changes

  • POST /forms and PATCH /forms/{formId} no longer accept DELETED as a status. Requests using it will be rejected with a 400 error. Previously the form was marked as deleted without being moved to the trash, leaving it unrecoverable. Use DELETE /forms/{formId} to delete a form.
v0.9.0

New endpoints

  • GET /workspaces/{workspaceId}/folders
    List a workspace’s folders
  • POST /workspaces/{workspaceId}/folders
    Create a folder
  • PATCH /workspaces/{workspaceId}/folders/{id}
    Rename a folder
  • DELETE /workspaces/{workspaceId}/folders/{id}
    Delete a folder and its subfolders, moving any forms they contain to trash

Changed endpoints

  • GET /workspaces
    Each workspace now includes a folders array
  • GET /workspaces/{workspaceId}
    The response now includes a folders array
v0.8.0

New endpoints

  • GET /forms/{formId}/analytics/metrics
    Get aggregate form metrics
  • GET /forms/{formId}/analytics/visits
    Get form visits over time
  • GET /forms/{formId}/analytics/submissions
    Get completed and partial submissions over time
  • GET /forms/{formId}/analytics/dimensions
    Get visitor breakdowns by source, browser, OS, device and location
  • GET /forms/{formId}/analytics/drop-off
    Get per-question drop-off statistics
v0.7.0

Changed endpoints

  • POST /forms
    Form settings accept rich text (html with mentions) for email and redirect fields
  • GET /forms/{formId}
    Form settings now return rich text (html with mentions) for email and redirect fields
  • PATCH /forms/{formId}
    Form settings accept rich text (html with mentions) for email and redirect fields
v0.6.0

Changed endpoints

  • GET /forms/{formId}/submissions
    Each submission now includes previewUrl and pdfUrl
  • GET /forms/{formId}/submissions/{submissionId}
    The response now includes previewUrl and pdfUrl
v0.5.0

Changed endpoints

  • GET /forms/{formId}/questions
    Field references (used for default answers and mentions) can now resolve to utility fields, such as utility::today()
v0.4.0

Breaking changes

  • Block payloads are now validated against the schema. Requests with invalid block payload structures will be rejected with a 400 error. Previously, malformed block payloads were accepted silently.
v0.3.0

New endpoints

  • GET /forms/{formId}/questions
    Get form questions
  • GET /forms/{formId}/submissions/{submissionId}
    Get a specific form submission
  • GET /organizations/{organizationId}/users
    View organization users
  • DELETE /organizations/{organizationId}/users/{userId}
    Remove users from organization
  • GET /organizations/{organizationId}/invites
    View pending invites
  • POST /organizations/{organizationId}/invites
    Invite users to organization
  • DELETE /organizations/{organizationId}/invites/{inviteId}
    Cancel pending invites
  • GET /webhooks
    List configured webhooks
  • GET /webhooks/{webhookId}/events
    List webhook events
  • POST /webhooks/{webhookId}/events/{eventId}
    Retry webhook events

Changed endpoints

  • GET /forms/{formId}/submissions
    Added new filtering options: startDate, endDate & afterId
v0.2.0

New endpoints

  • GET /users/me

Changed endpoints

  • GET /forms
    Now returns a paginated response instead of a flat list.
  • GET /workspaces
    Now returns a paginated response instead of a flat list.

Deprecated endpoints

  • GET /me
v0.1.0
Hello world! 🎉