---
title: "List site binding options"
method: GET
path: "/api/sites/multiscreen/v2/{site_name}/binding-options"
tags: ["Page Elements Api V2"]
---

# List site binding options

`GET /api/sites/multiscreen/v2/{site_name}/binding-options`

## Request

- Base URL: `https://api.duda.co`
- URL: `https://api.duda.co/api/sites/multiscreen/v2/{site_name}/binding-options`
- Auth: HTTP basic

Lists the data-binding targets that connected_data can reference anywhere on the site. Use it where no page is in scope, such as header and footer elements. Currently the site's content library, site texts and site images.

## Path parameters

- `site_name` string, required

## Response `200`

OK

- BindingOptions: Data-binding sources available for a page or site
  - `sources` union[]: Everything bindable here. Each entry carries the 'kind' of binding it feeds — a field-valued leaf, or a collection binding
    - union
      - BindingOptionsFieldSource: A single bindable source
        - `fields` BindingOptionsField[]: On a FIELD entry, the fields bindable from this source. On a COLLECTION entry, the fields of that collection's rows, for the list item's per-slot mapping
          - `empty` boolean: True when the field holds no value on this site. Binding to one is allowed — it resolves once the value is filled in — but the site editor hides empty fields when offering a new connection, so prefer a non-empty one where both would do. False also means 'not known to be empty': a field whose value could not be resolved, and every collection row field
          - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
          - `filterable` boolean: Collection row fields only: whether a list's query can filter on this field
          - `label` string: The field's display name, as the site editor shows it — "Site Logo" for business_data.logo_url versus "Location" for the per-location location_data.logo_url. Keys alone can be near-indistinguishable, so prefer this when presenting a choice. Absent when the target carries no label
          - `operators` string[]: Collection row fields only: the comparison operators this field's type accepts. A query filter naming an operator outside this set is rejected
          - `options` string[]: Collection row fields only, and only for a field offering a fixed set of options: the option names a filter on it can compare against
          - `resolved_value` string: The field's current value on this site, so a client can tell phones.office from phones.mobile by the actual number. An empty string when the field is unset, absent when no value could be resolved, and always absent on a collection's row fields
          - `sortable` boolean: Collection row fields only: whether a list's query can sort on this field
          - `types` string[]: Value types this field can be bound to. A binding is valid where the prop's @Bindable type in the generated widget binding schema is one of these. Absent means the field can be bound to nothing: a collection row field whose type maps to no bindable type — a multi-select, say — is listed only so a query can sort or filter on it, and binding it is rejected
        - `kind` 'FIELD' | 'COLLECTION', required: Which half of the contract this entry feeds
        - `source` 'CONTENT_LIBRARY' | 'DYNAMIC_PAGE' | 'COLLECTION_ITEM' | 'SITE_TEXT' | 'SITE_IMAGES', required: Copy this verbatim into the leaf's source
      - BindingOptionsCollectionSource: A single bindable source
        - `fields` BindingOptionsField[]: On a FIELD entry, the fields bindable from this source. On a COLLECTION entry, the fields of that collection's rows, for the list item's per-slot mapping
          - `empty` boolean: True when the field holds no value on this site. Binding to one is allowed — it resolves once the value is filled in — but the site editor hides empty fields when offering a new connection, so prefer a non-empty one where both would do. False also means 'not known to be empty': a field whose value could not be resolved, and every collection row field
          - `field` string, required: Field key within the source. For CONTENT_LIBRARY, three namespace roots mirror the Content Library resource: business_data.{name|logo_url} for global business data; location_data.{business_hours|logo_url|phones.{label}|emails.{label}|social_accounts.{network}} for the primary location; and additional_locations.{id}.{field} for a specific location by numeric id (e.g. "additional_locations.12345.phones.Office"). Labels are matched case-insensitively and echoed lowercase. A whole location (a LOCATION slot, e.g. the MAP address) is the bare root: location_data for the primary location, additional_locations.{id} for a specific one. business_data.* is global-only and cannot be scoped to a location. There are two logos: location_data.logo_url is that location's, business_data.logo_url is the site's own. For DYNAMIC_PAGE: the collection field name. For SITE_TEXT, mirroring the Content Library resource's site_texts: overview, about_us or services for the fixed texts, and custom.{label} for a custom one (e.g. "custom.tagline"); echoed lowercase. For SITE_IMAGES: the site image's label (case-sensitive). The site logo is not here — it is CONTENT_LIBRARY business_data.logo_url
          - `filterable` boolean: Collection row fields only: whether a list's query can filter on this field
          - `label` string: The field's display name, as the site editor shows it — "Site Logo" for business_data.logo_url versus "Location" for the per-location location_data.logo_url. Keys alone can be near-indistinguishable, so prefer this when presenting a choice. Absent when the target carries no label
          - `operators` string[]: Collection row fields only: the comparison operators this field's type accepts. A query filter naming an operator outside this set is rejected
          - `options` string[]: Collection row fields only, and only for a field offering a fixed set of options: the option names a filter on it can compare against
          - `resolved_value` string: The field's current value on this site, so a client can tell phones.office from phones.mobile by the actual number. An empty string when the field is unset, absent when no value could be resolved, and always absent on a collection's row fields
          - `sortable` boolean: Collection row fields only: whether a list's query can sort on this field
          - `types` string[]: Value types this field can be bound to. A binding is valid where the prop's @Bindable type in the generated widget binding schema is one of these. Absent means the field can be bound to nothing: a collection row field whose type maps to no bindable type — a multi-select, say — is listed only so a query can sort or filter on it, and binding it is rejected
        - `kind` 'FIELD' | 'COLLECTION', required: Which half of the contract this entry feeds
        - `source` 'COLLECTION' | 'DYNAMIC_PAGE', required: Copy this verbatim into the collection binding's source
        - `collection` string: Site collection name; required when source is COLLECTION
        - `field` string: Collection-typed field of the current row of the page's dynamic collection — an inner collection; required when source is DYNAMIC_PAGE
        - `types` string[]: Value types this collection can be bound to, matching the @Bindable type of the list prop

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `402`: Payment Required
- `405`: Method Not Allowed
- `429`: Too many requests. The rate limit was exceeded.
- `500`: Internal Server Error

---

[API](https://skmtc.dev/duda/apis/duda-partner-api.md) - [All operations](https://skmtc.dev/duda/apis/duda-partner-api/llms.txt) - [OpenAPI document](https://skmtc.dev/duda/apis/duda-partner-api/revisions/52be4d41cb12?raw)
