Field Reference

Every field of every asset on one page, marked editable or read-only, so you can see exactly what a write body may contain before you send one.

Every field the public API exposes, per asset, on one page — and for each one, whether you can write it. The API Reference tab carries the same shape per endpoint; this page exists so you (or an agent) can see all of it in a single fetch, and because "read-only" here has three distinct meanings that a plain OpenAPI readOnly flag cannot express — see the table below.

The tables are generated from the same schemas that validate live requests, so they cannot drift from what the API actually accepts.

Access

AccessOn create (POST)On update (PUT)
EditableSent as you like; required ones must be presentSent as you like; a required field must be present on every write, and an omitted editable field is cleared, since PUT replaces rather than merges
Editable, sometimes requiredRequired only in some cases, in one of two ways. Either whether it is required depends on the other fields you send — a metric's sourceId is required unless the metric is calculated — or it is a field of an array's items, mandatory on every element you send while the array itself may be omitted: a metric's dimensions.name, a goal's triggers.type. Read the field's note either waySame
Read-onlyIgnored — send it or don't, nothing is appliedIgnored while it matches the stored value, so a spec fetched with GET can be sent straight back. Sending a different value is rejected with 400, naming the field and both values
Read-only, never comparedIgnoredIgnored, always — these change on their own (a metric that refreshes moves status and dataUpdatedAt), so a value that went stale between your GET and your PUT is never an error
Read-only (no write endpoint)n/a — the whole asset is read-only today: no endpoint accepts it as a request body, so nothing about it can be writtenn/a

So the round trip works without pre-processing: GET an asset, change the editable fields you care about, PUT the whole thing back. You only see a read-only 400 if you actually tried to change one — most often by reusing a body across two different assets, so that its id no longer matches the one in the URL.

Two rules that are easy to miss, both covered in Getting Started:

  • A PUT replaces. An editable field you leave out is cleared, not preserved — including nested objects, which are replaced whole rather than merged key by key.
  • An update reads the asset before it validates the body, so a write to something that does not exist answers 404 even when the body is invalid too.

A version field accompanies every asset in responses. It is not listed below: it names the mapper version rather than describing the asset, and if you send it on a write it must equal "1.0".

Metric

A public metric asset. Every metric names its source in sourceId, except a calculated one: that omits sourceId, fieldId, timeZone and refreshStatus entirely (its dimensions also omit fieldId and dataType) and is written by sending a formula instead. Written by POST /metrics and PUT /metrics/:metricId. See Metrics.

FieldTypeAccessNotes
idstringRead-onlyThe unique identifier of the metric.
ownerUserIdstringRead-only
sourceIdstringEditable, sometimes requiredThe id of the source the metric reads from - a data feed, direct connection or cube, depending on sourceType. Required on every write except a calculated metric, which has no source.
timeRefIdstringEditable
fieldIdstringEditable
createdAtstring (date-time)Read-only, never compared
updatedAtstring (date-time)Read-only, never compared
dataUpdatedAtstring (date-time)Read-only, never compared
statusstringRead-only, never comparedOne of: OK, LOADING_DATA, FAILED, EMPTY, BACKFILL_DATA, MISSING_FEATURES.
namestringEditable, required
descriptionstringEditable
timeRangeStartstring (date-time)Read-only, never compared
timeRangeEndstring (date-time)Read-only, never compared
timeZonestringEditable
positiveDirectionstringEditableOne of: UP, DOWN, NEUTRAL.
missingValuesstringEditable
sourceTypestringEditableOne of: DATAFEED, CALCULATED, DBT, SQL, CUBE. The metric's source type. Internally this metric-creation path is named 'formula' (unrelated to the public formula field below, which is specific to calculated metrics) and is surfaced here as 'DATAFEED'; calculated metrics always report 'CALCULATED'.
lockedbooleanEditable
numericbooleanEditable
formulastringEditable
refreshStatusstringEditableNot a fixed set of values: 'OK' on success, otherwise an upper-cased free-text failure message (e.g. 'FAILED - PROFILE NOT FOUND: ...').
properties.aggregationstringEditableHow the metric's values are rolled up, e.g. 'SUM', 'MEAN', 'COUNT' or 'DISTINCT_COUNT'. A DATAFEED- or SQL-sourced create that omits it is stored with 'SUM', or 'COUNT' when the metric is not numeric; the other source types derive their aggregation from the formula or the upstream definition.
properties.numberFormatstringEditableHow the metric's value is rendered: 'NUMERIC' for a plain number, 'CURRENCY' alongside currencyCode, 'PERCENTAGE', or 'DURATION'. A create that omits it (or omits properties entirely) is stored with 'NUMERIC'.
properties.currencyCodestringEditable
properties.cumulativebooleanEditable
properties.timelessDatabooleanEditable
properties.lockAggregationbooleanEditable
properties.iconIdstringEditable
properties.iconTypestringEditable
properties.dataShapestringEditableOne of: TRANSACTIONAL, SNAPSHOT. Whether the metric accumulates over time ('TRANSACTIONAL') or shows the most recent single point ('SNAPSHOT'). See snapshotPeriod for how often a SNAPSHOT metric resets.
properties.snapshotPeriodstringEditable
properties.tableNamestringEditableSQL-sourced metrics only (sourceType: 'SQL'). The table the metric's field belongs to, from GET /direct_connections/:connectionId/tables.
properties.slMetricTypestringRead-onlydbt-sourced metrics only. The semantic layer metric type, e.g. SIMPLE or RATIO.
properties.supportedPeriodicitiesstringRead-onlydbt-sourced metrics only. Comma-separated list of the periodicities the metric can be queried at, e.g. 1d,1w,1mo.
properties.slForceGroupOnTimestringRead-onlydbt-sourced metrics only. The dbt grain a cumulative grain-to-date metric must be grouped by, which fixes the periodicity it is queried at — one of DAY, WEEK, MONTH, QUARTER, YEAR.
properties.slForceGroupOnTimeAggregationstringRead-onlydbt-sourced metrics only. Which value in each slForceGroupOnTime period represents it — FIRST or LAST.
dimensions.idstring, per itemEditable
dimensions.namestring, per itemEditable, sometimes required
dimensions.fieldIdstring, per itemEditable
dimensions.dataTypestring, per itemEditableOne of: STRING, DATE, DOUBLE, BOOLEAN. The dimension's type. A DATAFEED-sourced metric's dimensions are always 'STRING', so a create may omit it; for a SQL- or CUBE-sourced metric send the connection's own column type translated onto this enum.

Dashboard

A public dashboard asset. No create/update endpoint accepts this asset today, so every field is read-only. See Dashboards.

FieldTypeAccessNotes
idstringRead-only (no write endpoint)The unique identifier of the dashboard.
namestringRead-only (no write endpoint)
ownerUserIdstringRead-only (no write endpoint)
createdAtstring (date-time)Read-only (no write endpoint)
updatedAtstring (date-time)Read-only (no write endpoint)

Goal

A public goal asset. Written by POST /goals and PUT /goals/:goalId. See Goals.

FieldTypeAccessNotes
idstringRead-onlyThe unique identifier of the goal.
ownerIdstringRead-only
namestringEditable, required
typestringEditable, requiredOne of: THRESHOLD, RECURRING_TARGET, CUSTOM_TARGET, RANGE. The goal's type, determining payload shape and evaluation behavior.
payloadobjectEditableGoal-type-specific configuration. THRESHOLD: value, thresholdType ('ABOVE'|'BELOW'), valueType ('VALUE'|'METRIC'), notifyOptions. RANGE: lowerValue, upperValue, notifyOptions (e.g. ['CROSSED_INSIDE'] or ['CROSSED_OUTSIDE']). RECURRING_TARGET: value, recurringPeriod (e.g. 'D'|'w'|'M'), notifyOptions (e.g. ['PERIOD_END', 'VALUE_REACHED']). CUSTOM_TARGET: customGranularity, values (an array of {coordinate, value}). notifyOptions is an array of strings for every goal type that takes it, even when it holds a single option.
scopesobjectEditableThe metrics this goal applies to: {metrics: [<metric id>, ...]}. No other scope types exist today. A metric scope is practically required on create: without one, goal creation fails (403) on the share-rights check. When present, its id is attached to each trigger internally.
triggers.typestring, per itemEditable, sometimes requiredOne of: event.updated.metric.data, event.updated.schedule.period_end. 'event.updated.metric.data' fires on new metric data (metric-scoped goals); 'event.updated.schedule.period_end' fires on a recurring schedule.
createdAtstring (date-time)Read-only, never compared
updatedAtstring (date-time)Read-only, never compared

Tag

A public tag asset. Written by POST /tags and PUT /tags/:tagId. See Tags.

FieldTypeAccessNotes
idstringRead-onlyThe unique identifier of the tag.
ownerIdstringRead-only
namestringEditable, required
descriptionstringEditable
configobjectEditableThe tag's display configuration: {colour}. colour accepts a hex/rgb/hsl color, a CSS4 color name, or a var(--token) reference; a random theme color is assigned if omitted.
createdAtstring (date-time)Read-only, never compared
updatedAtstring (date-time)Read-only, never compared

DataFeed

A public data feed asset. Written by PUT /data_feeds/:feedId. See Data Feeds.

FieldTypeAccessNotes
idstringRead-onlyThe unique identifier of the data feed.
ownerUserIdstringEditable
createdAtstring (date-time)Read-only, never compared
last_refresh_outcomestringRead-only, never comparedOne of: success, error.
last_successful_refresh_timestampstring (date-time)Read-only, never compared
is_lockedbooleanEditable
namestringEditable
descriptionstringEditable
joined_to_idsarray of stringRead-only
columns.idstring, per itemEditable
columns.useCustomNameboolean, per itemEditable
columns.autoDetectboolean, per itemEditable
columns.formulastring, per itemEditableA datasource-qualified reference to the column's source field is surfaced as the placeholder 'source@' and translated back to the real datasource id on write.
columns.namestring, per itemEditable
columns.typestring, per itemEditableOne of: TEXT, NUMERIC, DATE.
columns.fmtArgsobject, per itemEditableColumn-specific format arguments; shape varies by the column's format.
columns.aggregationstring, per itemEditable
source.connectorstringEditable
source.formatstringEditable
source.refresh_intervalnumberEditableRefresh interval in seconds, e.g. 3600 for hourly. 0 means the feed is never automatically refreshed.
source.is_dynamicbooleanEditable
source.disabledbooleanEditable
source.date_last_refreshstring (date-time)Read-only, never compared
source.queryobjectEditableThe query-builder query the data source pulls, for a feed generated from a service connection - the same shape POST /data_feeds/generate?type=queryBuilder takes, each field named by name. Absent for a data source that has no query of its own (an upload, or a REST endpoint), which also cannot be given one. Writable: sending it replaces the query wholesale (send the full field list, read from a GET immediately before) and the data source is refreshed. A query-builder column addresses its source field by POSITION, so send the matching columns in the same request - the field order in fields is the column order, A, B, C..., hidden fields excluded. A field marked hidden is a parameter the service requires to answer the query rather than a column of the feed; leave it out and it is carried over.

DirectConnection

A public direct connection asset (metrics-service-backed). Written by POST /direct_connections and PUT /direct_connections/:connectionId. See Direct Connections.

FieldTypeAccessNotes
idstringRead-onlyThe unique identifier of the connection.
namestringEditable
dataBaseTypestringEditable, requiredAlways required; identifies the connector type, e.g. 'postgresql', 'snowflake', 'redshift', 'bigquery', 'databricks', 'mariadb', 'aurora', 'azuresql', 'azuresynapse', 'dbt', 'cube', 'sample'. A dbt semantic-layer connection reports 'dbt', which is also how you create one. Each connector defines its own connectionFields parameter names.
ownerIdstringEditableThe user who owns the connection. Listed connections are the ones you own plus the ones shared across the account.
isSharedbooleanEditable, requiredWhether the connection is shared with every user in the account.
connectionFieldsobjectEditableConnector-specific configuration; field names vary per dataBaseType (e.g. postgresql uses user/_host/_port/_database/currentSchema). Populated only for a connection you own (and for the built-in sample connection) - an empty object for one shared across the account. Within your own connection, secret fields (password, private keys) are omitted rather than masked - but an update preserves any secret whose key it does not send, so a spec read from here can be sent straight back to PUT. Send a secret only to change it; sending it empty clears it.

DataFeedConnection

A public data feed connection asset (web-UI-service-backed, read-only). No create/update endpoint accepts this asset today, so every field is read-only. See Data Feed Connections.

FieldTypeAccessNotes
idstringRead-only (no write endpoint)The unique identifier of the connection.
namestringRead-only (no write endpoint)
serviceProvider.namestringRead-only (no write endpoint)
serviceProvider.serviceKeystringRead-only (no write endpoint)
state.keystringRead-only (no write endpoint)One of: ACTIVE, REVOKED, DISABLED.

ServiceProvider

A service provider that connections can be created against - Salesforce, GA4, and so on (web-UI-service-backed, read-only). Discovery only: the listing carries the identifiers other endpoints take, not the provider's auth configuration or branding. No create/update endpoint accepts this asset today, so every field is read-only. See Service Providers.

FieldTypeAccessNotes
idstringRead-only (no write endpoint)The unique identifier of the service provider.
namestringRead-only (no write endpoint)Display name, e.g. 'Google Analytics 4'.
descriptionstringRead-only (no write endpoint)What the provider connects to. Absent when the provider has no description.
serviceKeystringRead-only (no write endpoint)Stable key identifying the provider, e.g. 'c3po_gaV4'. This is the same value a data feed connection reports as serviceProvider.serviceKey.

Did this page help you?