# impartire API — Reference: Record types

Every path is under `https://impartire.com/api/v1`. The machine-readable contract is https://impartire.com/api/v1/openapi.json (OpenAPI 3.1).

#### GET /api/v1/record-types

List the org's record types and their fields

Every live record type of the org (custom objects: a Product, a Contract…), by name, each with its live field definitions in the app's form order — the contract `fields` on POST / PATCH /records is validated against. A `reference` field names its target in `reference_target`. Deprecated definitions, and for an OAuth token the ones its person may not read, are left out. The list is returned whole. All 404 when the org does not have custom records.

Scopes: `records:read`

Response 200 — `RecordTypeList`

- `data` (array of RecordType, required)
  - `id` (string (uuid), required)
  - `name` (string, required)
  - `kind` ("record", required)
  - `fields` (array of RecordField, required) — The type's live field definitions, in the app's form order. Deprecated fields, and for an OAuth token the fields its person may not read, are left out.
    - `id` (string (uuid), required)
    - `key` (string, required) — The key a value is stored under in an asset's `fields`.
    - `name` (string, required) — The field's label, as the app shows it.
    - `type` (string, required) — text | url (a string) · select (one option `value`) · multiselect (an array of option values) · date (YYYY-MM-DD) · datetime (epoch milliseconds) · number · reference (an id, or an array of ids when `multiple`). More may be added.
    - `required` (boolean, required) — Required for the asset to be ready (a workflow gate may wait on it). Not enforced on a write: an asset may be created empty and filled in later.
    - `multiple` (boolean, required) — For a reference field, whether the value is an array of ids.
    - `options` (array of object or null, required) — For select and multiselect, the accepted values (store `value`; `label` is for display). Null for every other type.
      - `value` (string, required)
      - `label` (string, required)
    - `reference_target` (object or null, required) — For a `reference` field, its target. Null for every other type.
      - `kind` ("asset" | "record" | "project", required) — What the field points at: an asset, a record, or a project of the org.
      - `type_id` (string (uuid) or null, required) — For `record`, the record type the target must be of (GET /api/v1/record-types); null otherwise.
- `next_cursor` (string or null, required) — Always null: the list is returned whole.

Other responses:

- 401 (Problem) — unauthenticated — no key, or an unknown, revoked or expired one.
- 403 (Problem) — insufficient-scope — the key lacks a required scope.
- 404 (Problem) — not-found.
- 429 (Problem) — rate-limited — the key's request budget is spent; wait Retry-After seconds.
- 500 (Problem) — internal.
