variants

The custom fields this organisation keeps on its variants

A page of custom field definitions: what this organisation has added to its variants beyond the catalogue's own columns. Each carries id, name, field_type (string, decimal, integer, boolean or date), source, description, is_active, is_editable, is_value_editable, access_type, and its timestamps.

Read this before reading or writing a variant's custom_fields map: the map is keyed on the field's id, and field_type is the type a value must parse as.

source says where the field came from: tightly for one declared here, otherwise the connector that brought it. The two counts beside the page are that split, over the active fields: total_active_tightly_specific and total_active_integration. is_value_editable is computed rather than stored: true when source is tightly, and otherwise true only when access_type is read_write.

label is what a face prints and name is the key values are stored under. bound_to names the connection filling the field, and while it is set a write to its values is refused; used_in counts the families and saved filters that read it.

Paging is offset and limit, limit at most 100 and 25 by default; max_size is every field matching the filters and size is this page. search matches name and description. filter_args is a JSON array of {key, operation, value} over is_active, is_editable, field_type, name and source.

Scope: products:read.

get/api/v1/variants/custom-fields

Request

  • Base URL: https://api.app.tightly.io
  • URL: https://api.app.tightly.io/api/v1/variants/custom-fields
  • Auth: HTTP bearer

Query parameters

offsetinteger

Definitions to skip before this page.

limitinteger

Definitions in this page.

searchstring
Example:fabric

Free text over name and description.

filter_argsstring
Example:[{"key":"is_active","operation":"eq","value":true},{"key":"source","operation":"eq","value":"tightly"}]

A JSON array of {key, operation, value}. is_active and is_editable take eq and ne on a boolean; field_type and source take eq, ne and in; name takes eq, ilike and in.

Headers

Tightly-Versionstring
Example:2026-11

The date train to answer on. One train exists today, 2026-11, the one this reference describes and the one every key is minted on, so the call answers on it with or without this header. Send it anyway, so a client built now names its train from the start.

Response

A page of definitions, with the active split and the size of the matching set.

messageobject

severity, service and desc.

Example response

{
  "data": {
    "custom_fields": [
      {
        "access_type": "read_only",
        "bound_to": {
          "field_key": "product.custom_field.fabric",
          "source_path": "metafields.custom.fabric"
        },
        "description": "The mill's stated composition.",
        "field_type": "string",
        "grain": "product",
        "id": "123",
        "is_active": true,
        "is_editable": true,
        "is_value_editable": true,
        "label": "Fabric",
        "name": "fabric",
        "source": "tightly"
      }
    ]
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.