---
title: "Listing Published Form Versions"
method: GET
path: "/v1/projects/{projectId}/forms/{xmlFormId}/versions"
tags: ["Published Form Versions"]
---

# Listing Published Form Versions

`GET /v1/projects/{projectId}/forms/{xmlFormId}/versions`

Each entry of the version listing will contain some of the same duplicate keys with basic information about the Form: `xmlFormId` and `createdAt`, for example. This is done to match the data you'd receive if you'd requested each version separately.

This endpoint supports retrieving extended metadata; provide a header `X-Extended-Metadata: true` to additionally retrieve the `Actor` that each version was `publishedBy`.

## Path parameters

- `projectId` number, required
- `xmlFormId` string, required

## Response `200`

Ok

- Form[]
  - `projectId` number, required — The `id` of the project this form belongs to.
  - `xmlFormId` string, required — The `id` of this form as given in its XForms XML definition
  - `name` string — The friendly name of this form. It is given by the `<title>` in the XForms XML definition.
  - `version` string, required — The `version` of this form as given in its XForms XML definition. If no `version` was specified in the Form, a blank string will be given.
  - `enketoId` string — If it exists, this is the survey ID of this Form on Enketo at `/-`. This will be the ID of the published version if it exists, otherwise it will be the draft ID. Only a cookie-authenticated user may access the preview through Enketo.
  - `hash` string, required — An MD5 sum automatically computed based on the XForms XML definition. This is required for OpenRosa compliance.
  - `keyId` number — If a public encryption key is present on the form, its numeric ID as tracked by Central is given here.
  - `state` 'open' | 'closing' | 'closed', required
  - `publishedAt` string — Indicates when a draft has most recently been published for this Form. If this value is `null`, this Form has never been published yet, and contains only a draft.
  - `createdAt` string, required — ISO date format
  - `updatedAt` string — ISO date format
  - `webformsEnabled` boolean — Enables use of ODK Web Forms instead of Enketo for filling Forms via web browsers.

## Changes

- **2026-05-22** `fadfadd0e94e` — 1 info
  - added the optional property `items/allOf[subschema #2]/publishNotes` to the response with the `200` status
- **2025-12-20** `022694254f0d` — 1 info
  - api operation id `Listing Published Form Versions` removed and replaced with `listPublishedFormVersions`
- **2025-10-27** `b11b54eea487` — 1 info
  - removed the non-success response with the status `403`
- **2025-03-13** `e8c2858fd4eb` — 1 warning, 2 info
  - removed the optional property `items/allOf[subschema #2]/publishNotes` from the response with the `200` status
  - api operation id `listPublishedFormVersions` removed and replaced with `Listing Published Form Versions`
  - added the non-success response with the status `403`

[Change history](https://skmtc.dev/getodk/apis/odk-central-api/changes/v1/projects/:projectId/forms/:xmlFormId/versions/get.md)

---

[API](https://skmtc.dev/getodk/apis/odk-central-api.md) · [All operations](https://skmtc.dev/getodk/apis/odk-central-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/getodk/odk-central-api/revisions/d4f5ba77f644/schema)
