---
title: "Retrieve form layouts"
method: GET
path: "/settings/form-layouts"
tags: ["Settings"]
---

# Retrieve form layouts

`GET /settings/form-layouts`

## Request

- Base URL: `https://api.cavuno.com/v1`
- URL: `https://api.cavuno.com/v1/settings/form-layouts`
- Auth: HTTP bearer

Retrieves the field order, visibility and required state of the job, company and talent forms. Requires `settings.read`. The public board context serves the same lists (public fields only) as `forms` for headless renderers.

## Response `200`

Successful response.

- FormLayouts: The job, company and talent forms as resolved, ordered field lists: every built-in, custom field and collection reference, including private profile fields. Fields never placed by an operator follow in the default order.
  - `job` FormLayoutField[], required
    - `kind` 'builtin' | 'custom' | 'collection', required: A built-in field, a custom field, or a collection reference.
    - `key` string, required
    - `label` string, required: The field label shown in Settings.
    - `visible` boolean, required: Whether the form shows the field.
    - `required` boolean, required: Whether a submission must fill the field. Always `false` for a hidden field.
    - `locked` boolean, required: A locked built-in can move but must stay shown and required. Always `false` for custom and collection fields.
    - `lockReason` 'google_required' | 'google_hiring_organization' | 'google_work_arrangement' | 'google_job_location' | 'google_remote_eligibility' | 'posting' | 'identity', nullable, required: Why the field is locked, or `null`.
    - `requirable` boolean, required: Whether a layout write can switch `required` on. Custom and collection fields take `required` from their own definition (the job-form custom-fields and profile-field endpoints), so they are never requirable here.
  - `company` FormLayoutField[], required
    - `kind` 'builtin' | 'custom' | 'collection', required: A built-in field, a custom field, or a collection reference.
    - `key` string, required
    - `label` string, required: The field label shown in Settings.
    - `visible` boolean, required: Whether the form shows the field.
    - `required` boolean, required: Whether a submission must fill the field. Always `false` for a hidden field.
    - `locked` boolean, required: A locked built-in can move but must stay shown and required. Always `false` for custom and collection fields.
    - `lockReason` 'google_required' | 'google_hiring_organization' | 'google_work_arrangement' | 'google_job_location' | 'google_remote_eligibility' | 'posting' | 'identity', nullable, required: Why the field is locked, or `null`.
    - `requirable` boolean, required: Whether a layout write can switch `required` on. Custom and collection fields take `required` from their own definition (the job-form custom-fields and profile-field endpoints), so they are never requirable here.
  - `talent` FormLayoutField[], required
    - `kind` 'builtin' | 'custom' | 'collection', required: A built-in field, a custom field, or a collection reference.
    - `key` string, required
    - `label` string, required: The field label shown in Settings.
    - `visible` boolean, required: Whether the form shows the field.
    - `required` boolean, required: Whether a submission must fill the field. Always `false` for a hidden field.
    - `locked` boolean, required: A locked built-in can move but must stay shown and required. Always `false` for custom and collection fields.
    - `lockReason` 'google_required' | 'google_hiring_organization' | 'google_work_arrangement' | 'google_job_location' | 'google_remote_eligibility' | 'posting' | 'identity', nullable, required: Why the field is locked, or `null`.
    - `requirable` boolean, required: Whether a layout write can switch `required` on. Custom and collection fields take `required` from their own definition (the job-form custom-fields and profile-field endpoints), so they are never requirable here.

## Other responses

- `default`: An error. Every non-2xx response uses the same envelope; see the Errors section of the introduction.

## Changes

- **2026-10-20** `d5974dabff14`: 3 breaking, 24 info
  - the `company/items/lockReason` response's property type changed from `string` to no type for status `200`
  - the `job/items/lockReason` response's property type changed from `string` to no type for status `200`
  - the `talent/items/lockReason` response's property type changed from `string` to no type for status `200`
  - added `#/components/schemas/FormFieldLockReason, subschema #2` to the `company/items/lockReason` response property `allOf` list for the response status `200`
  - …23 more
- **2026-10-20** `cee1c2d567e5`: 6 breaking, 21 warning, 3 info
  - the response property `company/items/lockReason` became nullable for the status `200`
  - the response property `job/items/lockReason` became nullable for the status `200`
  - the response property `talent/items/lockReason` became nullable for the status `200`
  - the `company/items/lockReason` response's property type changed from no type to `string` for status `200`
  - …26 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/cavuno/apis/cavuno-v1-rest-api/changes/settings/form-layouts/get.md)

---

[API](https://skmtc.dev/cavuno/apis/cavuno-v1-rest-api.md) · [All operations](https://skmtc.dev/cavuno/apis/cavuno-v1-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cavuno/apis/cavuno-v1-rest-api/revisions/d5974dabff14?raw)
