<!-- https://developers.silktide.com/v1/governance/metadata/get-section-metadata | Governance / Metadata -->

# Get a section's metadata, and the properties it can have

`GET /v1/websites/{websiteId}/sections/{sectionId}/meta`

Returns a section's metadata values, and every metadata property the
account defines, so you can show the empty ones too. Section `0` is the
whole website. See [Metadata](https://developers.silktide.com/v1/governance/metadata.md) for what properties
are.

`values` names only the properties that have been given a value. When none
have, it is an empty array (`[]`) rather than an empty object, so check for
both before you read it by name.

`isRequired`, `min`, `max`, `choices` and `allowOther` describe what a value
is meant to be, for your own forms. Silktide does not enforce them; see
[Set a section's metadata](https://developers.silktide.com/v1/governance/metadata/set-section-metadata.md).

## Request

### Path parameters

- `websiteId` (integer, required, at least 1): The website.
- `sectionId` (integer, required): The section. `0` is the whole website.

## Response

Status `200`.

- `values` (map of strings or numbers or booleans or empty list, required): The section's values, by property name. Only properties that have been given a value are here. An empty array (`[]`), not an object, when none have.
- `properties` (list of objects, required): Every metadata property the account defines for sections, in the account's order.
  - `name` (string, required): The property's name: the key of its value in `values`.
  - `label` (string, required): Its name as people see it.
  - `propertyType` (string, required): The type of value it holds. One of: `string`, `int`, `float`, `bool`, `url`.
  - `isRequired` (boolean, required): Whether every section is meant to have a value for it.
  - `min` (integer, required, can be null): The smallest value (`int`, `float`) or shortest length (`string`, `url`) it is meant to take. Null for no limit.
  - `max` (integer, required, can be null): The largest value or longest length it is meant to take. Null for no limit.
  - `choices` (list of strings, required, can be null): The values to pick from. Null when it has no list.
  - `allowOther` (boolean, required): With `choices`, whether a value not in the list is meant to be allowed.

## Errors

| Status | Type | When |
| --- | --- | --- |
| 404 | `ModelNotFound` | No website or section with those ids exists in the account, or the API key's user cannot see it. |
| 403 | `AccessDenied` | The API key's user cannot see this section. |
| 401 | `NotLoggedIn` | No API key was sent, or it is not a key for this region. |
| 429 | `TooManyRequests` | Too many requests to this path in five seconds. Retry after the number of seconds in the `Retry-After` header, which `properties.retryAfter` repeats. |
| 503 | - | Silktide is busy. Retry after the number of seconds in the `Retry-After` header. |

## Access

- Permission: Can see section
- Plan feature: none
- Edition: Silktide 4 and Silktide 5
- Cost: free
- Stability: stable, since 1.0.0

## Example: A section with three values

```bash
curl "https://api.eu.silktide.com/v1/websites/3/sections/2/meta" \
  -H "Authorization: silktide token=$SILKTIDE_API_KEY"
```

Response:

```json
{
  "values": {
    "region": "US",
    "author": "Jane Doe",
    "year": 2023
  },
  "properties": [
    {
      "name": "region",
      "label": "Region",
      "propertyType": "string",
      "isRequired": true,
      "min": null,
      "max": null,
      "choices": [
        "UK",
        "US",
        "Europe",
        "AU"
      ],
      "allowOther": false
    },
    {
      "name": "author",
      "label": "Author",
      "propertyType": "string",
      "isRequired": false,
      "min": null,
      "max": null,
      "choices": [
        "John Smith",
        "Jane Doe",
        "Joe Bloggs"
      ],
      "allowOther": true
    },
    {
      "name": "year",
      "label": "Year created",
      "propertyType": "int",
      "isRequired": false,
      "min": 1995,
      "max": 3000,
      "choices": null,
      "allowOther": false
    }
  ]
}
```

## Example: A section with no values yet

```bash
curl "https://api.eu.silktide.com/v1/websites/3/sections/0/meta" \
  -H "Authorization: silktide token=$SILKTIDE_API_KEY"
```

Response:

```json
{
  "values": [],
  "properties": [
    {
      "name": "region",
      "label": "Region",
      "propertyType": "string",
      "isRequired": true,
      "min": null,
      "max": null,
      "choices": [
        "UK",
        "US",
        "Europe",
        "AU"
      ],
      "allowOther": false
    },
    {
      "name": "author",
      "label": "Author",
      "propertyType": "string",
      "isRequired": false,
      "min": null,
      "max": null,
      "choices": [
        "John Smith",
        "Jane Doe",
        "Joe Bloggs"
      ],
      "allowOther": true
    },
    {
      "name": "year",
      "label": "Year created",
      "propertyType": "int",
      "isRequired": false,
      "min": 1995,
      "max": 3000,
      "choices": null,
      "allowOther": false
    }
  ]
}
```
